Что такое REST
Что проверяют
Понимаете ли вы, что REST это набор ограничений, а не «JSON по HTTP», и можете ли назвать эти ограничения.
Как отвечать
REST это архитектурный стиль взаимодействия клиента и сервера, обычно поверх HTTP. Ограничения:
- клиент и сервер разделены, каждый развивается независимо;
- нет состояния между запросами: каждый запрос самодостаточен, сервер не помнит предыдущий. Отсюда возможность горизонтального масштабирования;
- кэшируемость: ответ явно помечен как кэшируемый или нет;
- единообразный интерфейс: ресурсы адресуются URL, действия выражаются методами HTTP, представление отделено от самой сущности;
- слоистость: между клиентом и сервером могут стоять прокси и CDN, клиент об этом не знает;
- код по требованию (необязательное): сервер может прислать исполняемый код.
На практике это выглядит так: /users/42 это ресурс, GET его читает, PATCH меняет, DELETE удаляет. Глаголы в адресе (/getUser) ломают единообразие и заодно кэширование.
В строгом прочтении есть ещё HATEOAS: ответ содержит ссылки на возможные действия. Его почти никто не делает, поэтому большинство API по классификации Ричардсона останавливается на третьем уровне из четырёх.
Честно про альтернативы: GraphQL решает проблему избыточной и недостаточной выборки, gRPC даёт скорость и строгий контракт между сервисами. REST выигрывает простотой и совместимостью с любым HTTP-клиентом.
Где спотыкаются
Называют REST протоколом.
Не могут назвать ни одного ограничения, кроме использования методов HTTP.
Забывают про отсутствие состояния и хранят сессию в памяти процесса.
Проектируют адреса глаголами и удивляются, что кэширование не работает.