我正在设计一个REST API,我需要为客户端提供复制资源的能力。 假设您有以下资源:客户/ {客户地址} /地址REST执行动作
而且您将为客户提供将地址复制到shipping地址的功能。 我可以这样做:customer/{customerno}/address/copytoshipping
但是,它会是RPC而不是REST。什么是这样做的正确方法?
我正在设计一个REST API,我需要为客户端提供复制资源的能力。 假设您有以下资源:客户/ {客户地址} /地址REST执行动作
而且您将为客户提供将地址复制到shipping地址的功能。 我可以这样做:customer/{customerno}/address/copytoshipping
但是,它会是RPC而不是REST。什么是这样做的正确方法?
GET使用rel = “CustomerAddress” 使用rel = “CustomerShippingAddress” 例如URL客户/ {} customerno /地址
POST /运输
'rel = ...'如何映射到POST?我的印象是_rel_ation仅在HTML中指定(或通过XML中的等效适当命名空间节点)。 – 2012-04-17 14:14:07
真的是rel和POST没有任何关系。 Rel只是表明应该有一个可以像地址一样工作的收货地址资源。所以它可以像其他资源一样支持GET,PUT,POST和DELETE。我的帖子是为了表明发货地址只是另一个资源,所以要复制原始地址,您只需将其发送到不同的REL。 – suing 2012-04-17 14:25:33
啊,所以你说的是提供子资源的描述。没关系。 – 2012-04-17 16:26:15
这是否必须是REST API的地址?客户只需获取(billing?)地址的表示并将其寄送到送货地址。是的,您可能很好地隐藏了您的客户端代码中的细节(这对我来说似乎很合理),但没有特别的理由让特殊操作混淆REST界面来进行复制。
在这种情况下将工作交给客户是不可接受的。在服务器上执行此操作的最佳方式是什么? – rgullhaug 2012-04-18 18:04:37
一种不同的方法可以是:
暴露的 “客户地址” 的资源(如你在上述)
GET /customer/{number}/address
暴露的 “客户送货地址” 资源 取指:
GET /customer/{number}/shipping-address
更新与实际地址:使用URI指向另一个地址
PUT /customer/number/shipping-address HTTP/1.1
Content-Type: application/atom+xml
(xml/json of an atom:link with href pointer to main address ('/customer/123/address')
也许更复杂的比你想要的,但把副本负担的服务器上,而
PUT /customer/{number}/shipping-address
Content-Type: application/xml
(xml/json of a single address)
更新比客户。
最后一个不需要混合原子:XLink规范也适用。 – 2012-04-17 18:01:36
将工作放在客户端是不可接受的。服务器需要执行复制。我希望我的客户尽可能瘦。 – rgullhaug 2012-04-18 05:29:12