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