2022-08-15 15:33:51
Довелось давеча заняться фундаментальным рефакторингом всей кодовой базы моего пет-проджекта, потому что сделать всё хорошо изначально — это не наш метод.
Фронтенд я в итоге переписал полностью, обычное дело, а на бэкенде встал вопрос хоть какой-нибудь стандартизации, чтобы двигаться с новыми фичами дальше и не потерять контроль над ситуацией. Рефакторить так рефакторить, правильно?
И как раз в это время ко мне постучался коллега, который подкинул ссылочку на их новый REST API Standard, который вобрал в себя лучшее и при этом не раздулся до размеров JSON:API, который я, прямо скажем, недолюбливаю.
Это было вовремя. Я не поленился, прочитал всю спеку, проникся, и в итоге забрал себе часть контракта по работе с коллекциями, в частности cursor-based pagination. Потом перечитал URL Structure и задумался. А нахуя мы вообще соблюдаем REST? Зачем тянуть в новые стандарты старое соглашение, снова и снова?
GET пусть остаётся для /health и для статики, абсолютно всё решается POST-запросами, в тело которых можно аккуратно уложить любую параметризацию, а не вот это вот. Действие (action, verb) спокойно выносится в URL, пусть он сам за себя говорит. В моём случае достаточно соблюдать наименование вида /[версия]/[сущность]/[действие]/[признак], например:
/v1/damage/get/shallow — получить все т.н. “верхние маркеры”, опционально принимает набор фильтров и объект пагинации
/v1/damage/create — очевидно
/v1/airalarm/get/all — все объекты другой сущности
/v1/auth — просто действие
И так далее. POST only. Works like a charm. А вы что думаете об этом? In REST we trust или rest in peace?
496 viewsedited 12:33