2. REST API — Как сделать хорошо

Отличия между ресурсом и сущностью

Сущность — человек, машина, пост, комментарий. Один объект.

Ресурс (набор сущностей) — GET myblog/posts/123 — пост содержит описание, комментарии, комментаторов

Формирование пути

corellationId — необходим для построения цепочки запросов в распределенных системах (микросервисная архитектура)

Заголовок (Header) — Content-Type: Json

CRUD запросы

GET

POST

PUT

DELETE

PATCH

Моё мнение

Использовать множественное число в URI (в пути) не стоит — это сбивает с толку, например /toys/1 лучше записать /toy/1 , а для получения всех игрушек /toys

Использования методов PATCH, DELETE, PUT требует от клиента наличие обработчиков, если у нас есть UI. Дело в том что просто html не поддерживает другие методы, кроме GET и POST (да, можно фреймворками менять хитро методы, но всё же)

Старайтесь сделать, как тут: Pet Store проекте

Как же делать DELETE и PUT?

DELETE делаем через POST, так мы гарантируем что объект не удалится, если наш клиент перейдет по ссылке в браузере. Все что что-то ломает, изменяет должно быть через POST, чтобы человек подумал несколько раз зачем ему это. Почитал в Postman или Swagger UI что к чему, а не дергал наш писюн (эндпоинт), чтобы оторвать яйца у нашего демо проекта на ПСИ (Приемно-Сдаточных Испытаниях).

Понимаю что может появиться соблазн использовать DELETE и PUT, но поверьте трахаться с проблемами будете потом вы же. Не надо так. Лучше рабочий говнокод, чем нерабочая красотень. Заказчику похуй какой у вас код, даже если это херня из под коня, если он работает и дает то что нужно — он закроет глаза и нос.

HTTP Статусы

КодОписание
200 OKСервер успешно обработал запрос
3xx RedirectsРедиректы. Например для прохождения аутентификации через OAuth при просроченном (стухшем) session_id (сессионом ключе)
400 Bad RequestОшибка в запросе клиента
401 Unauthorized
302 Unauthorized
Нужна авторизация для доступа к ресурсу
302 — возвращает по умолчанию Spring приложение
403 ForbiddenАутентификация пройдена, но нет прав для выполнения метода
404 Not FoundСервер не может найти данные согласно запросу

404 используют при 403 на общедоступных в интернете ресурсах, это позволяет скрыть сам факт наличия ресурса. Например мы можем так скрыть факт существования пользователя с id = 10 в URI /user/10 если пользователь не администратор, а профиль закрытый (не должен отображаться другим пользователям)
5xx Server ErrorsОшибка по вине сервера

Это самый страшный код в пятницу на проде — он значит, что надо будет работать весь вечер и выходные

Тело ответа

Источник

Оцените автора
Kosenkov.Pro
Добавить комментарий