RESTful веб-сервис, положить неназванный ресурс? - PullRequest
1 голос
/ 06 января 2011

У меня есть серверная служба, которая создает уникальные идентификаторы для ресурсов.

Общая идея заключается в том, что ресурсы сохраняются и версионируются, поэтому вы можете выполнить: GET <a href="http://service/sales/targets/7818181919/latest" rel="nofollow">http://service/sales/targets/7818181919/latest</a> или же GET <a href="http://service/sales/targets/7818181919/4" rel="nofollow">http://service/sales/targets/7818181919/4</a> for version 4 и т. Д.

Мой вопрос касается самого правильного способа загрузки этих ресурсов.

Как насчет: PUT <a href="http://service/sales/targets/" rel="nofollow">http://service/sales/targets/</a> возвращение 303 See other /service/sales/targets/

Кажется, это немного неправильно, поскольку вы должны PUT и GET из одного места, используя ресурс-ориентированный интерфейс, но я не могу придумать лучшего варианта. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 06 января 2011

Если вы создаете ресурс, где вы еще не знаете точный URI, тогда используйте POST против «ресурса сбора» (в вашем случае http://service/sales/targets) и возвращаете новый URI в ответе Location заголовок. Это можно сравнить с заводским шаблоном в ООП.

В качестве альтернативы вы можете предоставить ресурс, который генерирует уникальные идентификаторы. Это позволяет вашим клиентам сначала GET уникальный идентификатор, а затем использовать PUT против URI, используя идентификатор. Недостатком является то, что вы должны вести список всех уникальных идентификаторов, которые были обслужены до сих пор, независимо от того, действительно ли они использовались или нет.

1 голос
/ 06 января 2011

Вы должны установить заголовок Location, когда вы POST или PUT ресурса.Целью для POST должен быть соответствующий ресурс контейнера (http://service/sales/targets/ в вашем случае)

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

14.30 Местоположение

Поле заголовка ответа Location используется для перенаправления получателя в местоположение, отличное от Request-URI для завершения запроса илиидентификация нового ресурса.


Для 201 (Создано) ответов, Местоположение - это то, что нового ресурса, который был создан запросом.Для ответов 3xx местоположение ДОЛЖНО указывать предпочтительный URI сервера для автоматического перенаправления на ресурс.
Значение поля состоит из одного абсолютного URI.

   Location       = "Location" ":" absoluteURI

Примером является:

   Location: http://www.w3.org/pub/WWW/People.html

Крис

...