我有一个为资源创建唯一标识符的后端服务。
一般的想法是资源被保存和版本化,因此您可以执行:
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,但我想不出更好的选择。有什么想法吗?
答案 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
克里斯