Давайте начнем с манифеста REST API: ресурсы — это альфа и омега, суть всего REST. Помните, как мы обсуждали, что REST API работает с объектами, а не с действиями? В REST любой объект, с которым взаимодействует ваш сервер, называется ресурсом. Ваша задача — грамотно "адресовать" этот ресурс, чтобы клиент мог его найти. Тут на сцену вступает URI.
URI (Uniform Resource Identifier) — это уникальный адрес для какого-то ресурса на вашем сервере. Давайте это упростим: если ваш сервер — это большой склад, то URI — это адрес стеллажа, где лежит нужная коробка (ваш ресурс).
Пример простого URI:
https://api.example.com/users
Как правильно проектировать URI?
Давайте сразу договоримся, что URI — это не что-то "на вынос". Это как витрина вашего магазина — она должна быть привлекательной и доносить до потенциального покупателя информацию о том, чем здесь торгуют.
Вот пара советов:
- Используйте существительные, а не глаголы.
- Правильно:
/users,/products/{productId}/reviews. - Неправильно:
/getUsers,/deleteProduct.
- Правильно:
- Используйте множественное число для групп ресурсов.
- Например,
/usersдля описания всех пользователей.
- Например,
- Используйте иерархию для вложенных ресурсов.
- Например, если хотите получить заказы конкретного пользователя:
/users/{userId}/orders.
- Например, если хотите получить заказы конкретного пользователя:
- URI — это не глаголы и не действия. Вы их определяете через методы HTTP (об этом чуть позже).
Пример:
GET https://api.example.com/users
POST https://api.example.com/users
GET https://api.example.com/users/123
if-ов. Его видите только вы... и клиент, который вас возненавидит.
Методы HTTP: главные герои REST
Методы HTTP — это ключевые операторы для работы с ресурсами в REST API.
| Метод | Описание | Пример использования |
|---|---|---|
| GET | Получение информации о ресурсе | GET /users — получить всех пользователей |
| POST | Создание нового ресурса | POST /users — создать нового пользователя |
| PUT | Полное обновление ресурса | PUT /users/123 — полностью обновить пользователя 123 |
| PATCH | Частичное обновление ресурса | PATCH /users/123 — обновить только имя пользователя 123 |
| DELETE | Удаление ресурса | DELETE /users/123 — удалить пользователя 123 |
REST API строг в своей простоте. Если вы хотите добавить нового пользователя, используйте POST. Хотите его удалить? Воспользуйтесь DELETE. А если вы вдруг решите обновить его телефон и добавите запрос GET /users/updatePhone?id=123, то карма вашего REST API будет безнадежно испорчена.
Пример: Управление пользователями через методы HTTP
GET /users - Получить всех пользователей
POST /users - Создать нового пользователя
GET /users/123 - Получить конкретного пользователя
PUT /users/123 - Полностью обновить пользователя 123
PATCH /users/123 - Обновить только часть данных пользователя 123
DELETE /users/123 - Удалить пользователя 123
Если бы API был мобильным приложением, методы HTTP — это кнопки "Добавить", "Удалить", "Обновить".
Коды ответа HTTP: ваши друзья в дебаге
Когда сервер получает запрос, он должен как-то сообщить клиенту результат операции. Именно для этого существуют HTTP коды ответа. Они делятся на группы, но без "двойников".
| Код | Категория | Значение и примеры |
|---|---|---|
| 1xx | Информационные | "Запрос принят, но ничего не скажу" |
| 2xx | Успешные | Всё отлично! Ваш запрос обработан. |
| 3xx | Перенаправления | "Я переехал, вот новый адрес." |
| 4xx | Ошибки клиента | Вы что-то сделали не так. |
| 5xx | Ошибки сервера | Это уже наша проблема, извините. |
Основные коды, которые вам нужно знать
2xx: успешные коды
- 200 OK: всё прошло гладко. Сервер вернул данные.
- 201 Created: ваш ресурс был успешно создан.
- 204 No Content: запрос обработан, но возвращать нечего.
4xx: ошибки клиента
- 400 Bad Request: что-то не так с запросом (например, JSON невалиден).
- 401 Unauthorized: вы не авторизованы.
- 403 Forbidden: у вас нет прав.
- 404 Not Found: ресурс не найден.
5xx: ошибки сервера
- 500 Internal Server Error: общий код для серверной проблемы.
- 503 Service Unavailable: "извините, я ушел обедать. Попробуйте позже."
Пример работы с кодами
Пусть у вас есть API для управления книгами:
GET /books/{bookId}
- Если книга найдена, сервер вернет 200 OK и данные книги.
- Если книга не найдена, вы получите 404 Not Found.
- Если ваш сервер решил "выстрелить себе в ногу", вероятность получения 500 Internal Server Error высока.
Подводим итоги
Сегодня мы с вами разобрали три основных принципа REST:
- Ресурсы и их представление через URI.
- Методы HTTP, которые позволяют с ресурсами взаимодействовать.
- Коды ответа HTTP, которые делают ваш API дружелюбным к клиенту.
Теперь вы готовы перейти к созданию своих первых REST-контроллеров. А ещё никогда не называйте API "простым", пока сами его не протестировали штуками вроде Postman. REST API — это просто до тех пор, пока в него не придёт запрос от клиента с параметром foo=bar&baz=<injected_script>.
В следующей лекции начнем реализацию REST API контроллеров. Готовьтесь к аннотациям, JSON и бесконечным вопросам "Почему у меня 404?". До встречи!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ