Создание web service в visual studio
Ключевые составляющие RESTful
Веб-сервисы прошли долгий путь с момента их появления. В 2002 году W3C выпустил определения WSDL и SOAP веб-сервисов. Это сформировало стандарт по созданию веб-сервисов.
В 2004 году W3C выпустил определение ещё одного стандарта под названием RESTful. В последние годы этот стандарт стал довольно популярным. На данный момент он используется многими известными сайтами по всему миру, в число которых входит и Twitter.
Ключевые составляющие реализации RESTful:
Методы RESTful
- POST — с его помощью можно создать новую запись сотрудника;
- GET — с его помощью можно запросить список сотрудников;
- PUT — с его помощью можно обновить данные сотрудников;
- DELETE — с его помощью можно удалять записи сотрудников.
Посмотрим на это с точки зрения одной записи. Допустим у нас есть запись сотрудника под номером 1. Вот какое значение могли бы иметь следующие действия:
- POST — этот метод нельзя применить, так как сотрудник с номером 1 уже существует;
- GET — этот метод можно использовать для получения данных о сотруднике под номером 1;
- PUT — этот метод можно использовать для обновления данных сотрудника под номером 1;
- DELETE — этот метод можно использовать для удаления записи сотрудника под номером 1.
Почему RESTful
В основном популярность RESTful обусловлена следующими причинами:
1. Разнородные языки и среды — это одна из основных причин:
- У веб-приложений, написанных на разных языках, есть возможность взаимодействовать друг с другом;
- Благодаря RESTful эти приложения могут находиться в разных средах, будь то Windows или Linux.
Представим, что для работы с такими сайтами как Twitter, Google и т. д. клиентскому приложению нужно знать, на каких языках и на какой платформе они написаны. Основываясь на этих знаниях, мы могли бы написать код для взаимодействия с ними, однако это превратилось бы в сущий ад.
Twitter и Google дают доступ к их функциональности посредством RESTful веб-сервисов. Это даёт возможность любому клиентскому приложению взаимодействовать с этими сервисами с помощью REST.
2. Технологический бум – сегодня всё должно работать на разнообразных устройствах, будь то смартфон, ноутбук или кофеварка. Представляете, каких бы усилий стоило наладить взаимодействие этих устройств с помощью обычных веб-приложений? RESTful API делают эту задачу гораздо проще, поскольку, как было упомянуто выше, вам не нужно знать, что у устройства «под капотом».
3. Появление облачных сервисов — всё переезжает в облако. Приложения медленно перемещаются в облачные системы вроде Azure или Amazon, которые предоставляют большое количество API на основе RESTful архитектуры. Следовательно, приложения должны разрабатываться таким образом, чтобы они были совместимы с облаком. Так как все облачные архитектуры работают на основе REST, логично разрабатывать веб-сервисы тоже на REST-архитектуре, чтобы извлечь максимум пользы из облачных сервисов.
RESTful архитектура
Приложение или архитектура считается RESTful, если ей присущи следующие характеристики:
Принципы и ограничения RESTful
Архитектура REST основывается на нескольких характеристиках, которые описаны ниже. Любой RESTful веб-сервис должен им соответствовать, чтобы называться таковым. Эти характеристики также известны как принципы проектирования, которым нужно следовать при работе с RESTful-сервисами.
RESTful клиент-сервер
Это самое важное требование REST-архитектуры. Оно означает, что на сервере располагается RESTful веб-сервис, который предоставляет необходимую функциональность клиенту. При отправке клиентом запроса к веб-сервису сервер должен либо отклонить его, либо принять и предоставить соответствующий ответ.
Отсутствие состояния
Многослойная система
Суть этой концепции заключается в том, что любой дополнительный слой вроде промежуточного (слой, в котором создаётся бизнес-логика; это может быть дополнительный сервис, с которым клиент взаимодействует до сервера) можно поместить между клиентом и сервером, на котором располагается RESTful веб-сервис. Однако этот слой должен быть внедрён прозрачно, чтобы он не нарушил взаимодействия клиента и сервера.
Единообразие интерфейса
- POST — для создания ресурса;
- GET — для его получения;
- PUT — для его обновления;
- DELETE — для его удаления.
Веб-сервисы можно создавать на множестве языков. Многие IDE можно использовать для создания REST-сервисов.
Наш сервис будет работать со следующим набором данных «туториалов»:
TutorialId | TutorialName |
---|---|
0 | Arrays |
1 | Queues |
2 | Stacks |
Мы реализуем следующие RESTful методы:
- GET Tutorial — при его вызове клиент получает все доступные TutorialName;
- GET Tutorial/TutorialId — при его вызове клиент получает TutorialName, соответствующее переданному TutorialId;
- POST Tutorial/TutorialName — при его вызове клиент отправляет запрос на добавление туториала с переданным TutorialName;
- DELETE Tutorial/TutorialId — при его вызове клиент отправляет запрос на удаление туториала с TutorialName, соответствующему переданному TutorialId.
Теперь создадим шаг за шагом наш веб-сервис.
Шаг первый
После выбора этой опции должно появиться новое диалоговое окно, о котором мы поговорим в следующем шаге.
Шаг второй
Если далее у вас появилось следующее окно, выбирайте вариант «Пустой»:
После этого должно открыться окно, где в обозревателе решений можно увидеть наш проект:
Шаг третий
Теперь нужно создать файл нашего RESTful веб-сервиса. Для этого сначала нажмите Ctrl+Shift+A, либо кликните правой кнопкой по файлу проекта Webservice.REST и выберите опции Добавить → Создать элемент…:
В открывшемся окне найдите опцию «Служба WCF (с поддержкой технологии AJAX)» и дайте ей имя TutorialSevice.svc:
Шаг четвёртый
Теперь нам нужно внести изменения в конфигурационный файл Web.config. Он содержит настройки, необходимые для правильной работы приложения. Наше изменение позволит приложению отправлять и принимать данные как RESTful веб-сервис.
Откройте конфигурационный файл:
В открывшемся файле найдите строку и замените её на .
Шаг пятый
Пора приниматься за код. Откройте файл TutorialService.svc. Сначала добавим код для отображения наших данных. Создадим список со строками «Arrays», «Queues» и «Stacks». Они будут отражать имена доступных туториалов:
Шаг шестой
Теперь напишем код для нашего метода GET в том же файле. Этот метод будет запускаться при каждом вызове сервиса из браузера. Он будет использоваться для получения доступных туториалов:
В самом методе GetAllTutorials() находится код, который собирает все названия туториалов и возвращает их в одной строке.
Шаг седьмой
Код, показанный ниже, нужен для того, чтобы вернуть соответствующий TutorialName при получении GET-запроса с TutorialId :
Метод GetTutorialByID() реализует описанную логику. Обратите внимание на то, что мы приводим TutorialId к типу Integer . Это связано с тем, что всё передаваемое в адресную строку браузера является строкой. А поскольку индексом списка не может быть строка, мы добавляем код, необходимый для преобразования в число.
Шаг восьмой
Настала очередь кода для метода POST, который будет вызываться каждый раз, когда мы захотим добавить строку в наш список туториалов с помощью POST-запроса:
На первой строке находится атрибут WebInvoke , прикреплённый к нашему методу, что позволяет вызывать его с помощью POST-запроса. Для атрибутов RequestFormat и ResponseFormat мы указываем JSON, так как именно с этим форматом работает RESTful веб-сервис.
Шаг девятый
Осталось добавить метод для работы с DELETE-запросами. Он будет вызываться каждый раз, когда мы будем пытаться удалить существующее значение из списка с помощью DELETE-запроса:
Первая-вторая строки ничем особо не отличаются от предыдущих методов, они сигнализируют о том, что нижеуказанный метод будет вызываться при каждом DELETE-запросе.
В самом методе DeleteTutorial() мы приводим переданный TutorialId к типу Integer и удаляем из списка соответствующий элемент.
В итоге код должен выглядеть так (не учитывая элементов, которые были там изначально):
Запускаем наш веб-сервис
Мы создали наш веб-сервис, пора его запустить.
Сначала кликните правой кнопкой по файлу проекта Webservice.REST и выберите опцию «Назначить автозагружаемым проектом», чтобы Visual Studio запустила этот проект при запуске всего решения:
Теперь осталось запустить проект. Рядом с кнопкой запуска будет указано имя браузера, в котором будет запускаться проект. Автоматически будет предложен браузер по умолчанию, однако вам ничто не мешает выбрать другой:
Прим. перев. В вашем случае сервис может запуститься на localhost с другим портом. Далее в статье мы будем использовать значение 51056, однако не забывайте заменять его на своё, когда будете пытаться запускать примеры.
В этом примере браузер делает GET-запрос и тем самым вызывает написанный нами метод GetAllTutorials() , который возвращает список со всеми туториалами.
Тестируем веб-сервис
Выше мы увидели, как браузер делает GET-запрос для вызова GetAllTutorials() . Давайте проверим другие сценарии.
1. GET Tutorial/TutorialId — при вызове этого RESTful API клиент должен получить TutorialName , соответствующий переданному TutorialId .
В этот раз был вызван метод GetTutorialByID() , который вернул туториал с индексом 1 — «Queues».
2. POST Tutorial/TutorialName — при вызове этого API клиент отправляет запрос на добавление переданного TutorialName , который сервер должен добавить в список. В этот раз нам понадобится инструмент Fiddler, который можно бесплатно скачать с официального сайта.
Запустите Fiddler и выполните следующие действия:
Нажмите на кнопку «Execute». После этого нашему сервису будет отправлен запрос на добавление «Trees».
3. DELETE Tutorial/TutorialId — при вызове этого API клиент отправит запрос на удаление из списка TutorialName , которое соответствует переданному TutorialId .
Запустите Fiddler и выполните следующие действия:
Если мы опять запросим список всех туториалов, мы увидим, что их стало меньше на один:
В этом руководстве описано следующее:
Предварительные требования
Для выполнения шагов, описанных в этом учебнике, вам понадобится Visual Studio. Перейдите на страницу загрузки Visual Studio, чтобы получить бесплатную версию.
Для выполнения шагов, описанных в этом учебнике, вам понадобится Visual Studio. Перейдите на страницу загрузки Visual Studio, чтобы получить бесплатную версию.
Для выполнения шагов, описанных в этом учебнике, вам понадобится Visual Studio. Перейдите на страницу загрузки Visual Studio, чтобы получить бесплатную версию.
Потребуется установить необходимые компоненты:
Нажмите на значок Пуск в Windows и введите Visual Studio Installer.
Выберите Изменить, чтобы увидеть установленные рабочие нагрузки.
Если вы внесли изменения, нажмите Изменить, чтобы установить компоненты.
Запустите Visual Studio 2017. В верхней строке меню последовательно выберите Файл > Создать > Проект.
В качестве Имени введите FSharpTutorial, а затем нажмите кнопку ОК.
В Обозревателе решений разверните папку Контроллеры и выберите файл ValuesController.fs, чтобы открыть его в редакторе.
Затем измените существующий пример элемента Get() в соответствии со следующим кодом:
Запустите среду Visual Studio.
В окне "Пуск" выберите Создать проект.
В диалоговом окне Настроить новый проект в качестве Имени проекта введите FSharpTutorial.
В диалоговом окне Дополнительные сведения примите для Платформы версию по умолчанию.
В панели инструментов Обозревателя решений разверните папку Контроллеры и выберите контроллер WeatherForecastController.fs, чтобы открыть файл кода в редакторе.
Затем измените элемент Get() , введя следующий код:
Дальнейшие действия
This article helps you write a web service, called MathService, that exposes methods for adding, subtracting, dividing, and multiplying two numbers.
Requirements
The following list describes the recommended hardware, software, skills and knowledge that you need:
Write an .asmx web service
Change the name of the default Web service that is created from Service1.asmx to MathService.asmx.
Select Click to switch to code view in the designer environment.
Define methods that encapsulate the functionality of your service. Each method that will be exposed from the service must be flagged with a WebMethod attribute in front of it. Without this attribute, the method will not be exposed from the service.
Not every method needs to have the WebMethod attribute. It's useful to hide some implementation details called by public web service methods or for the case in which the WebService class is also used in local applications. A local application can use any public class, but only WebMethod methods will be remotely accessible as web services.
Add the following method to the MathServices class that you created:
Select Build on the Build menu to build the web service.
Consume a web service
Add a reference for the MathService web service to the new console application.
This step creates a proxy class on the client computer. After the proxy class exists, you can create objects based on the class. Each method call that is made with the object then goes out to the uniform resource identifier (URI) of the web service (usually as a SOAP request).
Create an instance of the proxy object that was created. Place the following code in the function called Main :
Invoke a method on the proxy object that you created in the previous step, as follows:
Select Build on the Build menu to build the console application.
Select Start on the Debug menu to test the application.
Close and save the project.
References
Эта статья поможет вам написать веб-службу с именем MathService, которая предоставляет методы для добавления, вычитания, деления и умножения двух чисел.
Требования
В следующем списке перечислены рекомендуемые оборудование, программное обеспечение, навыки и знания, необходимые вам:
Написание веб-службы ASMX
Измените имя веб-службы по умолчанию, созданной из Service1.asmx , на MathService.asmx.
Определите методы, которые инкапсулируются в функциональность службы. Каждый метод, который будет предоставлен из службы, WebMethod должен быть помечен атрибутом перед ним. Без этого атрибута метод не будет предоставлен из службы.
Не каждый метод должен иметь атрибут WebMethod . Полезно скрыть некоторые сведения о WebService реализации, вызываемые методами общедоступной веб-службы или в случае, когда класс также используется в локальных приложениях. Локальное приложение может использовать любой открытый класс, но WebMethod только методы будут удаленно доступны как веб-службы.
Добавьте следующий метод в созданный MathServices класс:
Выберите "Сборка**" в** меню "Сборка", чтобы создать веб-службу.
Использование веб-службы
Добавьте ссылку на веб-службу MathService в новое консольное приложение.
На этом шаге создается прокси-класс на клиентском компьютере. После того как прокси-класс существует, на его основе можно создавать объекты. Каждый вызов метода, выполняемый с объектом, затем передается в универсальный код ресурса (URI) веб-службы (обычно в виде soap-запроса).
Создайте экземпляр созданного прокси-объекта. Поместите следующий код в функцию с именем : Main
Вызовите метод для прокси-объекта, созданного на предыдущем шаге, следующим образом:
Выберите "Сборка**" в** меню "Сборка", чтобы создать консольное приложение.
Выберите " Пуск" в меню "Отладка ", чтобы протестировать приложение.
Закройте и сохраните проект.
Ссылки
Введение
Описание
В этой статьей будем создавать следующий API:
API | Описание | Тело запроса | Тело ответа |
GET /api/todo | Получить все элементы списка дел | Нет | Массив элементов списка дел |
GET /api/todo/ | Получить элемент по идентификатору | Нет | Элемент списка дел |
POST /api/todo | Добавить новый элемент | Элемент списка дел | Элемент списка дел |
PUT /api/todo/ | Обновить существующий элемент | Элемент списка дел | Нет |
PATCH /api/todo/ | Обновить существующий элемент | Элемент списка дел | Нет |
DELETE /api/todo/ | Удалить элемент | Нет | Нет |
На диаграмме ниже показана архитектура приложения:
Создание проекта
Добавление класса модели
Модель — это объект, который представляет данные в нашем приложении. В данном случае единственная модель — это элемент списка дел.
Добавьте каталог с именем «Models». В обозревателе решений нажмите правую кнопку мыши на проекте. Выберите пункт Add > New Folder. Ведите имя каталога Models.
Примечание: классы модели могут находиться в любом месте проекта, но обычно их размещают в каталоге Models.
Добавьте класс TodoItem . Нажмите правую кнопку мыши на каталоге Models и выберите пункт Add > Class. Ведите имя класса TodoItem и нажмите Add.
Замените сформированный код следующим:
Добавление класса репозитория
Репозиторий — это объект, который инкапсулирует уровень данных и содержит логику для извлечения данных и направлениях их к модели. Хотя в данном приложении не используется база данных, имеет смысл показать, как можно внедрять репозитории в контроллеры. Создайте код репозитория в каталоге Models.
Начните с определения интерфейса репозитория с названием ITodoRepository . Используйте шаблон класса (Add New Item > Class).
Этот интерфейс определяет основные операции CRUD.
Затем добавьте класс TodoRepository , который реализует ITodoRepository :
Постройте приложение, чтобы убедиться, что компилятор не выдает ошибок.
Такой подход упрощает модульное тестирование контроллеров. Модульные тесты внедряют «фиктивную» или «имитационную» версию ITodoRepository . В этом случае тест нацелен на логику контроллера, а не на уровень доступа к данным.
Для внедрения репозитория в контроллер необходимо зарегистрировать его при помощи контейнеров DI. Откройте файл Startup.cs. Добавьте следующую директиву using:
В метод ConfigureServices добавьте выделенный код:
Добавление контроллера
В обозревателе решений нажмите правую кнопку мыши на каталоге Controllers. Выберите пункт Add > New Item. В окне Add New Item выберите шаблон Web API Controller Class. Введите имя класса TodoController .
Замените сформированный код следующим:
Таким образом определяется класс пустого контроллера. В следующих разделах описывается добавление методов для реализации API.
Получение элементов списка дел
Чтобы получить элементы списка дел, добавьте следующие методы в класс TodoController :
Эти методы реализуют два метода GET:
Маршрутизация и URL-пути
"" — это величина, заменяемая на идентификатор элемента todo . Когда GetById вызывается, значение “” в URL присваивается параметру id метода.
Возвращаемые значения
Метод GetAll возвращает IEnumerable . MVC автоматически сериализует объект в JSON и записывает JSON в тело ответа. Код ответа для этого метода — 200, в том случае если нет необработанных исключений (необработанные исключения переводятся в ошибки 5xx.)
В свою очередь метод GetById возвращает значение более общего типа IActionResult , который представлен большим количеством типов возвращаемых значений. GetById имеет два различных типа возвращаемых значений:
- Если нет соответствия запрашиваемому идентификатору, метод возвращает ошибку 404. Это происходит при возврате NotFound .
- В остальных случаях метод возвращает код 200 и тело ответа в формате JSON. Это происходит при возврате ObjectResult .
Запуск приложения
Реализация других операций CRUD
Добавим методы Create , Update и Delete . Этот процесс аналогичен тому, о чем речь шла ранее, поэтому здесь будет показан код и выделены основные отличия. Создайте проект после добавления или изменения кода.
Create
Использование Postman для отправки запроса Create
- Установите POST в качестве метода HTTP.
- Выберите переключатель Body.
- Выберите переключатель raw.
- Выберите тип JSON.
- В редакторе пар ключ-значение укажите элемент Todo следующим образом: "> .
- Нажмите Send.
Для доступа к ресурсу, который только что создан, можно использовать URL из заголовка Location. Повторно вызовите метод GetById , создавший именованный маршрут "GetTodo" :
Update
Update с использованием Patch
Читайте также: