Запрос 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
.
(Это открытие заставило меня добавить x-http-method-override на мой вопрос.)
Ответ 2
REST не ограничивает создание POST. Будьте осторожны с отображением методов CRUD на HTTP и предположим, что RESTful. POST - это метод, используемый для любого действия, которое не стандартизировано HTTP.
Поскольку стандарт не устанавливает предел для URI, это можно считать сломанной реализацией, и это нормально исправить. До тех пор, пока обходной путь не связан с вашим API, вы все еще RESTful. Это означает, что ваш API не должен реализовывать перевод или переопределять напрямую, а на предварительном процессоре, который переписывает запрос должным образом. Здесь должно быть четко документировано, что это связано с нарушенной реализацией, и вы ожидаете, что она со временем станет устаревшей.
Ответ 3
Плохой запах, если ваш запрос может быть настолько длинным, что он превышает максимальную длину (де-факто для браузеров - 2000 символов, но он может быть выше для других способов доступа к API-интерфейсам REST).
Если пользователь может передать столько данных, он должен находиться в поле тела пользователя/данных, а не в URL-адресе.