Разработка API

Программные решения для бизнеса

На этом уроке мы познакомимся с интерфейсом API, создадим свой собственный API, разберем предлагаемый функционал и протестируем некоторые имеющиеся возможности.
Глоссарий
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
Видеолекция
Конспект
Мы познакомимся с API и попытаемся понять, как же он связывает различные приложения. API — это интерфейс, позволяющий двум независимым компонентам программного обеспечения обмениваться информацией. API играет роль посредника между внутренними и внешними программными функциями, обеспечивая настолько эффективный обмен информацией, что конечный пользователь обычно его просто не замечают.

Например, посредством API может быть передана геолокация из мобильного приложения одного человека на сервер, а затем на мобильное устройство другого. В рамках разработки программного решения можно добиться наибольшей эффективности в том случае, если и настольное, и мобильное приложения будут работать с единой базой данных и получать актуальную информацию в режиме реального времени.

С этой целью мы и создадим свой API, который сам будет работать с базой данных и возвращать ответ в удобном для приложения виде
1. Создаем проект «Web API»
  • Даем название проекту
  • Выбираем тип Web API. Убираем галочку с конфигурации https
2. На данном этапе нам необходимо реализовать три метода в рамках API:
  • для получения списка отелей с изображениями
  • для получения списка комментариев по конкретному отелю
  • для добавления нового отзыва об отеле
3. В проект добавляем модель Entity Framework. Для работы с данными мы остановимся на формате json, хотя вам может встречаться и xml. За счет своей лаконичности json, по сравнению с xml, представляет собой одну из двух структур в закодированном виде. Это набор из двух пар: ключ — значение и упорядоченный набор значений. Это универсальные структуры данных. Как правило, любой современный язык программирования поддерживает их в той или иной форме
4. Для начала настраиваем возвращаемый формат json в файле WebAPIConfig
5. На каждую таблицу, с которой мы будем работать создаем отдельный контроллер. Он позволит не перемешивать объекты друг с другом, а писать код только для конкретной таблицы.


  • Создаем контроллеры для классов Hotel и HotelComment
  • Указываем название модели и контекст приложения
Например, в контроллере отзывов будут находиться все запросы, связанные с получением списка отзывов, с фильтрацией и поиском, добавлением, изменением, удалением и т. д. Для разграничения действий с ресурсами на уровне http методов были придуманы следующие варианты:

  1. get — получение ресурса
  2. post — создание ресурса
  3. put — обновление
  4. delete — удаление ресурса

Обратите внимание, спецификация http не обязывает сервер принимать все методы, которых, на самом деле, гораздо больше, чем четыре. Обязателен только get. А также не указывает серверу, что он должен делать при получении запроса с тем или иным методом
6. Создаем Response Model для отелей, чтобы возвращать еще и фотографию
  • Сначала перечисляем ряд свойств, которые относятся к этой модели, затем добавляем конструктор
  • Получаем первое изображение из таблицы HotelImage
  • В контроллере отелей первый метод возвращает все отели. Поработаем над методом GetHotels, а остальные оставляем по умолчанию. В нем мы преобразуем список полученных отелей к типу ResponseHotel. Также мы установим атрибут ResponseType — это тип ответа, который необходим для документации в разделе Информация об ответе
7. Запускаем и тестируем это в браузере
  • У нас есть раздел API, который описывает документацию наших запросов
  • Здесь у нас есть созданные контроллеры, в том числе Hotels. На методе Hotels типа get у нас есть Response Information, который мы, как раз, указали в качестве атрибута, и список его свойств
8. Попробуем вызвать запрос на получение списка отелей.
  • В необработанном виде они выглядят так
  • В формате json они имеют такую структуру
9. Переходим к комментариям. Создавать Response Model в этом случае мы не будем. Подойдет класс от Entity Framework. Добавляем новый метод с параметром и дадим ему название через атрибут Wrote. Если комментариев к отелю не будет, вернется пустой json
10. Запустим и проверим. При открытии документации в контроле HotelComments, у нас появится новый метод getHotelComments. Он описывает параметры, которые необходимо передать
11. Попробуем его вызвать: возьмем код отеля из базы — 101. Данные получены
12. Переходим к добавлению данных в контроллере. За это будет отвечать метод POST. Время добавления нового отзыва будем вычислять на стороне сервера, поэтому тот объект, который передают в качестве параметров, мы изменяем. Также мы делаем все проверки полученных данных с помощью свойства ModelState. Обращаем внимание на то, что пользователи могут вводить пустые данные при указании автора и текста. Также у нас есть ограничения в базе данных на размер символов для автора, при этом пользователи должны указывать реально существующее название отеля, в том числе его код
13. В случае, если сущность не пройдет валидацию, мы выдаем Bad Request с сообщениями об ошибках в этой модели. Иначе сохраняем переданную сущность и сохраняем изменения, вернув новый созданный экземпляр
14. Как правило, через браузер можно получить данные только по методу get. Однако, есть приложения или расширения, имитирующие и другие методы. Как, например, приложение Postman, позволяющее отправлять запросы различными методами и получать ответ. Также в качестве альтернативы можно использовать консоль Package Manager в Visual Studio.

  • Открываем приложение Postman
  • Добавляем в адресную строку путь
  • Выбираем метод POST
  • Сущность должна быть отправлена в формате json в теле запроса на вкладке Body
  • Указываем код отеля, автора и комментарий
  • Не забудьте указать в хэдере Content-Type — application/json. Именно этот тип данных мы передаем
15. Попробуем отправить запрос. Получаем ответ с созданной сущностью
16. Можно увидеть новую запись в таблице HotelComment
17. Кроме того проверяем на наличие ошибок данные, которые мы передали. Если мы указываем несуществующий код отеля, например, 2, тогда то, что мы обработали в API, будет выведено в качестве результата значения ModelState
Мы научились создавать API, обращаться к его методам, и получать ответ. Теперь с этими данными можно работать не только на компьютере, но и на мобильных устройствах, о чем и поговорим на следующем занятии.
Предлагаем вам проверить полученные знания, выполнив небольшие задания.
Интерактивное задание
Тест
Для закрепления полученных знаний пройдите тест
Стартуем!
Какой метод обязателен в стандарте HTTP:
Дальше
Проверить
Узнать результат
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз