RESTful Web服务,提供一个未命名的资源?

时间:2011-01-06 09:49:31

标签: rest

我有一个为资源创建唯一标识符的后端服务。

一般的想法是资源被保存和版本化,因此您可以执行: GET http://service/sales/targets/7818181919/latest 要么 GET http://service/sales/targets/7818181919/4 for version 4,等等。

我的问题是首先上传这些资源的最正确方法。

怎么样: PUT http://service/sales/targets/返回303 See other /service/sales/targets/

看起来有点不对,因为您应该使用面向资源的界面从完全相同的位置进行PUT和GET,但我想不出更好的选择。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果你创建一个你还不知道确切URI的资源,那么对“收集资源”(在你的情况下为http://service/sales/targets)使用POST并在响应中返回新的URI Location标题。这可以与OOP中的工厂模式进行比较。

或者,您可以提供生成唯一标识符的资源。这允许您的客户端首先GET使用唯一标识符,然后使用标识符对URI使用PUT。缺点是你必须保留到目前为止已经提供的所有唯一标识符的列表,无论它们是否真的被使用过。

答案 1 :(得分:1)

您应该在POST或PUT资源时设置Location标头。 POST的目标应该是适当的“容器”资源(在您的情况下为http:// service / sales / targets /)

有关HTTP标头的更多详细信息,请参阅here。我引用了下面的相关部分。希望有所帮助...

  

14.30位置

     

位置响应标头字段是   用于将收件人重定向到   Request-URI以外的位置   完成请求或   识别新资源。


For   201(创建)响应,位置   是新资源的   由请求创建。对于3xx   回应,位置应该   表示服务器的首选URI   用于自动重定向到   资源。


字段值由   一个绝对的URI。

   Location       = "Location" ":" absoluteURI
     

一个例子是:

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

克里斯