REST API¶
REST (Representational State Transfer) - архитектурный стиль клиент-серверного взаимодействия: правила, по которым приложения обмениваются данными. REST API - API, построенное по этим правилам.
- Stateless - сервер не хранит состояние клиента, каждый запрос несёт всю нужную информацию
- Ресурсы - все данные представлены ресурсами с адресами:
/users,/products - Стандартные методы HTTP - GET, POST, PUT, PATCH, DELETE
- Кэшируемость - ответы сервера можно кэшировать
- Слоистая система - клиент не знает, говорит он с сервером напрямую или через прокси
- Формат - на практике JSON
Note
В исходной версии было «формат json (xml устаревшее)». REST к формату не привязан: представление ресурса может быть
JSON, XML, HTML - что угодно по Content-Type. JSON просто стал стандартом де-факто.
См. REST в Spring MVC и SOAP и REST.
Имена ресурсов¶
-
Существительные, а не глаголы. Действие задаёт HTTP-метод, а не адрес.
-
Множественное число - единообразие и явное указание на коллекцию.
-
Нижний регистр и дефисы (kebab-case).
-
Без пробелов и спецсимволов. Вместо пробела - дефис:
/product-categoriesлучше, чем/product%20categories.
Иерархия и параметры¶
-
Вложенность для связанных сущностей. Если ресурс принадлежит другому, это видно по адресу:
-
Глубина вложенности - не больше 2-3 уровней. Глубже - фильтрация через параметры:
-
Фильтрация, сортировка, пагинация - query-параметрами:
Версионирование¶
Самый простой способ - версия в пути:
Другие способы (заголовок, параметр, media type) и как Spring Framework 7 поддерживает их из коробки - в Версионирование API.
Документирование¶
Swagger (OpenAPI) - описание API и интерактивная документация.
TODO¶
- HTTP-методы: безопасность и идемпотентность каждого (см. HTTP)
- HATEOAS и модель зрелости Ричардсона
- контракт через OpenAPI: contract-first и code-first
- тестирование REST API