Подтвердить что ты не робот

API REST. Лучшие практики: args в строке запроса vs в теле запроса

API REST может иметь аргументы в нескольких местах:

  • В теле запроса. Как часть тела json или другого типа MIME
  • В строке - например. /api/resource?p1=v1&p2=v2
  • Как часть URL-пути - например. /api/resource/v1/v2

Каковы лучшие практики и соображения выбора между 1 и 2 выше?
2 vs 3 покрывается here.

4b9b3361

Ответ 1

Каковы наилучшие практики и соображения по выбору между 1 и 2 выше?

Обычно тело содержимого используется для данных, которые должны быть загружены/загружены на/с сервера, а параметры запроса используются для указания точных запрошенных данных. Например, когда вы загружаете файл, вы указываете имя, тип mime и т.д. В теле, но когда вы выбираете список файлов, вы можете использовать параметры запроса для фильтрации списка по некоторому свойству файлов. В общем случае параметры запроса являются свойством запроса, а не данными.

Конечно, это не строгое правило - вы можете реализовать его любым способом, который вы найдете более подходящим/работающим для вас.

Вы также можете проверить статью wikipedia о строке запроса, особенно первые два абзаца.

Ответ 2

Предполагаю, что вы говорите о запросах POST/PUT. Семантически тело запроса должно содержать данные, которые вы публикуете или исправляете.

Строка запроса, как часть URL (URI), там, чтобы определить, какой ресурс вы публикуете или исправляете.

Вы попросили передовую практику, поскольку семантика - моя. Конечно, использование ваших эмпирических правил должно работать, особенно если веб-фреймворк использует абстрактные параметры в параметрах.

Вы больше всего знаете:

  • Некоторые веб-серверы имеют ограничения на длину URI.
  • Вы можете отправлять параметры внутри тела запроса с помощью CURL.
  • Если вы отправляете данные, они не должны влиять на отладку.

Ответ 3

Ниже перечислены мои эмпирические правила...

Когда использовать тело:

  • Когда аргументы не имеют плоского ключа: структура значения
  • Если значения не читаются человеком, например сериализованные двоичные данные
  • Когда у вас очень много аргументов

Когда использовать строку запроса:

  • Когда аргументы таковы, что вы хотите видеть их при отладке
  • Если вы хотите иметь возможность называть их вручную при разработке кода, например. с curl
  • Когда аргументы являются общими для многих веб-служб
  • Если вы уже отправляете другой тип контента, например application/octet-stream

Обратите внимание, что вы можете смешивать и сопоставлять - помещать общие, те, которые должны быть отладки в строке запроса, и бросать все остальное в json.