Запрос REST не может быть закодирован для GET (URL слишком длинный)

Пример:

Проблема. Поисковый запрос может быть настолько длинным, что он разбивает максимальный размер веб-сервера Длина URL.

Как разрешить чрезвычайно длинные поисковые запросы и по-прежнему оставаться RESTful?

Ответы

Ответ 1

Для вдохновения я просто посмотрел API Google Translate v2, который" использует стиль вызова RESTful.

Естественно, тексты, которые нужно перевести, могут быть довольно длинными. И Google необязательно позволяет отправить запрос с помощью POST, но с твистом:

Чтобы использовать POST, вы должны использовать заголовок X-HTTP-Method-Override, чтобы сообщить Перевести API для обработки запроса как GET (используйте X-HTTP-Method-Override: GET).

Таким образом, можно семантически преобразовать запрос POST в запрос GET.

(Это открытие заставило меня добавить на мой вопрос.)

Ответ 2

REST не ограничивает создание POST. Будьте осторожны с отображением методов CRUD на HTTP и предположим, что RESTful. POST - это метод, используемый для любого действия, которое не стандартизировано HTTP.

Поскольку стандарт не устанавливает предел для URI, это можно считать сломанной реализацией, и это нормально исправить. До тех пор, пока обходной путь не связан с вашим API, вы все еще RESTful. Это означает, что ваш API не должен реализовывать перевод или переопределять напрямую, а на предварительном процессоре, который переписывает запрос должным образом. Здесь должно быть четко документировано, что это связано с нарушенной реализацией, и вы ожидаете, что она со временем станет устаревшей.

Ответ 3

Плохой запах, если ваш запрос может быть настолько длинным, что он превышает максимальную длину (де-факто для браузеров - 2000 символов, но он может быть выше для других способов доступа к API-интерфейсам REST).

Если пользователь может передать столько данных, он должен находиться в поле тела пользователя/данных, а не в URL-адресе.