Вызов службы RESTful с * многими * параметрами - PullRequest
6 голосов
/ 01 октября 2010

Мы разрабатываем приложение для iPhone, которое будет перезванивать службе RESTful, работающей в Tomcat.Нам нужно отправить много параметров запроса и превысили максимально допустимый для телефона максимум.

Было бы RESTful использовать вызов PUT с параметрами в теле, даже если намерение не изменять сервер?POST не кажется правильным, потому что он не идемпотентен, в то время как PUT есть (и, следовательно, более похож на поведение или GET).

Спасибо.

Ответы [ 3 ]

6 голосов
/ 01 октября 2010

У вас есть три варианта, максимально совместимых с HTTP:

Во-первых, у вас есть возможность отправить сжатые параметры некоторым образом, чтобы сформировать более короткий URL.

Во-вторых, в GET нет ничего, что говорит о том, что вы не можете отправить тело сообщения в запросе, независимо от того, что Content-Type или -Length вы выберете. Не все серверы поддерживают это, но сам протокол HTTP поддерживает.

В-третьих, вы можете отправить параметры в ресурс /queries/ и получить ответ с 201 Created и новый URL (например, /queries/78a65g82) в заголовке ответа Location, который клиент затем вызывает GET включено (несколько раз или даже в Ranges, если это выгодно) для получения результата.

4 голосов
/ 03 октября 2010

Если вы хотите RESTful, вы можете сделать это следующим образом: ЗАДАТЬ параметры на сервер (в любое место по вашему выбору), или вы можете ЗАПИСАТЬ их и позволить серверу разместить их для вас.В любом случае, вы только что создали ресурс, который содержит необходимые параметры.Затем вы отправляете GET со ссылкой на этот конкретный ресурс.Отвечая на ваш запрос GET, сервер, таким образом, знает, где получить свой большой набор параметров.Это было бы RESTful.

Тем не менее, отправка двух запросов не очень эффективна, если вы можете сделать то же самое с помощью одного запроса.Я бы просто попытался быть прагматичным.

Подумайте об этом: PUT сообщает прокси-серверам, что они не должны кэшировать ответ, но повторная попытка (любым элементом инфраструктуры на линии) определенно возможна, поскольку она идемпотентна (так же, как получить).Что GET дает вам над PUT?Ответ может быть кэширован.Но с таким большим количеством параметров я бы предположил, что большинство запросов в любом случае будут уникальными, верно?Таким образом, кэширование не принесет большой отдачи очень часто.Поэтому использование PUT представляется прагматичным и, следовательно, правильным выбором.

1 голос
/ 01 октября 2010

Это нарушает дух ОТДЫХА, но если это работает, будьте прагматичны.

...