У меня есть службы REST, которые должны получать действительно длинные запросы через GET. Скажем, например, я хочу запросить службу со многими географическими координатами, чтобы узнать что-то обо всех этих координатах.
1) Моя первая мысль заключалась в том, чтобы использовать длинные URI и увеличить максимальную длину URI в контейнере сервлета.
Это будет выглядеть так:
GET http://some.test/myresource?query={really big JSON object}
Но похоже, что URI длиной более 2 КБ не являются надежными из-за старых прокси-серверов (верно?).
2). Мое обходное решение - создать временный ресурс через POST и использовать URI этого ресурса в качестве параметра в фактическом запросе GET. Это будет выглядеть так:
POST http://some.test/temp
Request Body: {really big JSON object}
201 Created Location: http://some.test/temp/12309871
GET http://some.test/myresource?query=http://some.test/temp/12309871
3) Используйте тело запроса GET. Я прочитал ответы на вопрос, целесообразно ли использовать тело запроса GET для запроса, а консенсус - нет. Даже Рой Филдинг говорит, что это плохая идея.
4) Другой подход может заключаться в том, чтобы интерпретировать POST как "создать ресурс результата запроса" и удалить этот ресурс после запроса. Но я считаю, что не RESTful и быть плохими идеями.
Есть ли лучший способ обработки больших запросов с помощью запросов GET?