Дизайн REST API
В Линкед-ине хвастает человек: мол, нейросеть задизайнила рест-апишку. Прикладывает скриншот сваггера. Я смотрю на него и киваю: да, все на месте, все как у современного разработчика. А еще я понимаю, что на скриншоте, как в капле воды, собрано все то, за что я не люблю рестовые апишки.
Во-первых, версия v1 в урле. Она всегда меня забавляла. Я работал во многих
стартапах, и ни один из них не сменил версию. Гораздо чаще стартапы закрываются
и продаются. Я считаю, апишка должна быть одна, и со временем какие-то методы
добавляются, какие-то снимаются с обслуживания. А в той нумерации, что на
скриншоте, слишком много пафоса. Примерно как объявить счетчик с шестью нулями
для значения, которое в лучшем случае достигнет двойки. Даже если предположить,
что появится новая апишка, просто сделай другой урл: /api/grpc или
/api/graphql.
Далее, иерархия. Те апишки, которые работают с матчем, требуют код турнира. Нужно передать две айдишки: турнира и матча. Зачем? Разве может матч относиться к разным турнирам? Это банальная избыточность, и делается она ради красоты. Должен передаваться только матч, а по нему легко найти турнир и проверить права.
Еще одна забавная вещь: метод PUT не может покрыть все изменения, поэтому в
ход идут костыли: частички :report, :reopen на конце урла. Это некрасиво,
потому что по-хорошему операция определяется HTTP-методом, а тут урлы. Тот
случай, когда шубу заправляют в трусы, а она не лезет.
Ну и расцветка Сваггера как у цыган: зеленый, голубой, оранжевый, красный… все собрали.
На мой взгляд, нормальная апишка должна быть по принципу RPC. Один урл с двумя
параметрами: action и params. Метод один – POST. Внутри словарик с функциями
и схемами, по которому раскидываются запросы. Все. Документашка со схемами
строится одной командой.
Апишка – довольно простая вещь. Она не должна быть сложной и требовать разного тулинга. Тот REST, что имеем сегодня – это вавилонская башня на ровном месте. Как и в библейской истории, разработчики сами не понимают друг друга. Но продолжают и продолжают строить эту башню.

Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter