2015-11-24 1 views
1

У меня есть конечная точка REST GET /api/rules. Для фильтрации/запроса требуется несколько параметров запроса, например type, name, owner, description и tag. Таким образом, вы могли бы в конечном итоге с URI, как это:Должен ли я создать версию POST моей конечной точки GET REST в случае, если URI GET слишком длинный?

GET /api/rules?name=rule1,rule2&owner=john,jane&description=VeryLongDescription

В частности, я обеспокоен тем, что описание запрашиваются может быть очень длинным и сделать URI слишком долго (я забыл предел). Должен ли я создать версию POST этой же конечной точки для пользователей, которые получают ответ 414 URI Too Long с сервера?

Я имею в виду, вообще говоря, когда имеет смысл просто сделать POST, который получает ресурс? Каждый раз, когда вы вводите параметры запроса?

ответ

2

Теоретически URI не имеют границ, но на практике они могут быть ограничены реализациями. Если вам необходимо обойти ограничения, наложенные реализацией, которые не являются неотъемлемой частью протокола, вы должны попытаться отделить их от своего приложения.

Если вы являетесь пуристом, более или менее стандартный способ поддержки функциональности с помощью метода POST использует заголовок x-http-method-override, который может быть отделен от вашего приложения, если он реализован как предварительный процессор запроса. Препроцессор может преобразовать запрос POST в запрос GET, ожидаемый вашим приложением, преобразование полезной нагрузки в строку запроса.

Вот пример такого подхода в Google Translate API: https://cloud.google.com/translate/v2/using_rest#Translate

Если вы не пурист, или, если это слишком сложно для пользователей, или вы не хотите использовать пользовательский заголовок, Я думаю, что это нормально, когда конечная точка POST получает ресурс, если он правильно документирован, и запрашиваемый ресурс идентифицируется URI.