Веб-сервисы REST
Веб-сервисы REST в Yii 2
Содержание раздела «Веб-сервисы REST» Полного руководство по Yii 2.0:
- Быстрый старт
- Ресурсы
- Контроллеры
- Роутинг
- Форматирование ответа
- Аутентификация
- Ограничение частоты запросов
- Версионирование
- Обработка ошибок
Статьи раздела «Веб-сервисы REST» Полного руководство по Yii 2.0:
- Информация о материале
- Родительская категория: Полное руководство по Yii 2.0
- Категория: Веб-сервисы REST
Обработка ошибок
Если при обработке запроса к RESTful API в запросе пользователя обнаруживается ошибка или происходит что-то непредвиденное на сервере, вы можете просто выбрасывать исключение, чтобы уведомить пользователя о нештатной ситуации. Если же вы можете установить конкретную причину ошибки (например, запрошенный ресурс не существует), вам следует подумать о том, чтобы выбрасывать исключение с соответствующим кодом состояния HTTP (например, [[yii\web\NotFoundHttpException]], соответствующее коду состояния 404). Yii отправит ответ с соответствующим HTTP-кодом и текстом. Он также включит в тело ответа сериализованное представление исключения. Например:
- Информация о материале
- Родительская категория: Полное руководство по Yii 2.0
- Категория: Веб-сервисы REST
Версионирование
Хороший API должен быть версионирован: изменения и новые возможности реализуются в новых версиях API, а не в одной и той же версии. В отличие от Web-приложений, где у вас есть полный контроль и над серверным, и над клиентским кодом, API используются клиентами, код которых вы не контролируете. Поэтому, обратная совместимость (BC) должна по возможности сохраняться. Если ломающее её изменение необходимо, делать его нужно в новой версии API. Существующие клиенты могут продолжать использовать старую, совместимую с ними версию API. Новые или обновлённые клиенты могут использовать новую версию.
- Информация о материале
- Родительская категория: Полное руководство по Yii 2.0
- Категория: Веб-сервисы REST
Ограничение частоты запросов
Чтобы избежать злоупотреблений, вам следует подумать о добавлении ограничения частоты запросов к вашим API. Например, вы можете ограничить использование API до 100 вызовов в течение 10 минут для каждого пользователя. Если от пользователя в течение этого периода времени приходит большее количество запросов, будет возвращаться ответ с кодом состояния 429 («слишком много запросов»).
- Информация о материале
- Родительская категория: Полное руководство по Yii 2.0
- Категория: Веб-сервисы REST
Аутентификация
В отличие от веб-приложений, RESTful API обычно не сохраняют информацию о состоянии, а это означает, что сессии и куки использовать не следует. Следовательно, раз состояние аутентификации пользователя не может быть сохранено в сессиях или куках, каждый запрос должен приходить вместе с определенным видом параметров аутентификации. Общепринятая практика состоит в том, что для аутентификации пользователя с каждым запросом отправляется секретный токен доступа. Так как токен доступа может использоваться для уникальной идентификации и аутентификации пользователя, запросы к API всегда должны отсылаться через протокол HTTPS, чтобы предотвратить атаки «человек посередине» (англ. "man-in-the-middle", MitM).
- Информация о материале
- Родительская категория: Полное руководство по Yii 2.0
- Категория: Веб-сервисы REST
Форматирование ответа
При обработке RESTful API запросов приложение обычно выполняет следующие шаги, связанные с форматированием ответа:
- Информация о материале
- Родительская категория: Полное руководство по Yii 2.0
- Категория: Веб-сервисы REST
Маршрутизация
Имея готовые классы ресурсов и контроллеров, можно получить доступ к ресурсам, используя URL вроде http://localhost/index.php?r=user/create
, подобно тому, как вы это делаете с обычными Web-приложениями.
На деле вам обычно хочется включить «красивые» URL-адреса и использовать все преимущества HTTP-методов (HTTP-verbs). Например, чтобы запрос POST /users
означал обращение к действию user/create
. Это может быть легко сделано с помощью настройки компонента приложения urlManager
в конфигурации приложения следующим образом:
Страница 1 из 2