ПОЛУЧИТЬ полезную нагрузку HTTP-запроса

Я разрабатываю API, и мне интересно, можно ли отправлять полезную нагрузку JSON по запросу GET?

В этом другом вопросеПолезные нагрузки методов HTTP-запросамы можем найти в соответствии сэта ссылка:

HEAD - Нет определенной семантики тела.GET - Нет определенной семантики тела.PUT - Тело поддерживается.POST - Тело поддерживается.DELETE - Нет определенной семантики тела.TRACE - Тело не поддерживается.ОПЦИИ - Тело поддерживается, но без семантики (возможно, в будущем).

Означает ли это, что я не должен отправлять запрос GET с полезной нагрузкой? Есть ли риски для этого?

Как, например, наличие некоторых клиентских библиотек HTTP, неспособных к отправке такой полезной нагрузки?Или мой код Java API не переносим на определенных серверах приложений?Что-нибудь еще?

Я обнаружил, что ElasticSearch использует такую полезную нагрузку для запроса GET:

$ curl -XGET 'http://localhost:9200/twitter/tweet/_search?routing=kimchy' -d '{
    "query": {
        "filtered" : {
            "query" : {
                "query_string" : {
                    "query" : "some query string here"
                }
            },
            "filter" : {
                "term" : { "user" : "kimchy" }
            }
        }
    }
}
'

Так что, если эта популярная библиотека делает это, и никто не жалуется, то, возможно, я могу сделать то же самое?

Кстати,Я хотел бы знать, нормально ли это для смешивания параметров queryString и полезной нагрузки JSON? Точно так же, как этот запрос ElasticSearch. Если так, существуют ли правила, чтобы мы знали, какие аргументы должны быть параметрами queryString или параметрами полезной нагрузки?

Здесь мы можем прочитать:HTTP GET с телом запроса

Комментарий Роя Филдинга о включении тела в запрос GET.

Да. Другими словами, любое сообщение HTTP-запроса может содержать тело сообщения и, следовательно, должно анализировать сообщения с учетом этого. Однако семантика сервера для GET ограничена таким образом, что тело, если оно есть, не имеет семантического значения для запроса. Требования к синтаксическому анализу отделены от требований к семантике метода.

Итак, да, вы можете отправить тело с GET, и нет, это никогда не полезно.

Это часть многоуровневой структуры HTTP / 1.1, которая станет понятной после разделения спецификации (работа в процессе).

....Рой

Тогда я не очень понимаю, почему это никогда не полезно, потому что, на мой взгляд, имеет смысл отправлять сложные запросы на сервер, которые не очень хорошо подходят для queryParam или matrixParam. Я думаю, что разработчики ElasticSearch API думают так же ...

Я планирую разработать API, который можно назвать так:

curl -XGET 'http://localhost:9000/documents/inbox?pageIndex=0&pageSize=10&sort=title'

curl -XGET 'http://localhost:9000/documents/trash?pageIndex=0&pageSize=10&sort=title'

curl -XGET 'http://localhost:9000/documents/search?pageIndex=0&pageSize=10&sort=title' -d '{
    "someSearchFilter1":"filterValue1",
    "someSearchFilter2":"filterValue2",
    "someSearchFilterList": ["filterValue3","xxx"]
    ... a lot more ...
}
'

Вам это кажется нормальным? Исходя из вышеизложенных соображений.

Ответы на вопрос(4)

Ваш ответ на вопрос