2012-04-17 29 views
2

我正在设计一个REST API,我需要为客户端提供复制资源的能力。 假设您有以下资源:客户/ {客户地址} /地址REST执行动作

而且您将为客户提供将地址复制到shipping地址的功能。 我可以这样做:customer/{customerno}/address/copytoshipping

但是,它会是RPC而不是REST。什么是这样做的正确方法?

+0

将工作放在客户端是不可接受的。服务器需要执行复制。我希望我的客户尽可能瘦。 – rgullhaug 2012-04-18 05:29:12

回答

1

GET使用rel = “CustomerAddress” 使用rel = “CustomerShippingAddress” 例如URL客户/ {} customerno /地址

POST /运输

+0

'rel = ...'如何映射到POST?我的印象是_rel_ation仅在HTML中指定(或通过XML中的等效适当命名空间节点)。 – 2012-04-17 14:14:07

+0

真的是rel和POST没有任何关系。 Rel只是表明应该有一个可以像地址一样工作的收货地址资源。所以它可以像其他资源一样支持GET,PUT,POST和DELETE。我的帖子是为了表明发货地址只是另一个资源,所以要复制原始地址,您只需将其发送到不同的REL。 – suing 2012-04-17 14:25:33

+0

啊,所以你说的是提供子资源的描述。没关系。 – 2012-04-17 16:26:15

2

这是否必须是REST API的地址?客户只需获取(billing?)地址的表示并将其寄送到送货地址。是的,您可能很好地隐藏了您的客户端代码中的细节(这对我来说似乎很合理),但没有特别的理由让特殊操作混淆REST界面来进行复制。

+0

在这种情况下将工作交给客户是不可接受的。在服务器上执行此操作的最佳方式是什么? – rgullhaug 2012-04-18 18:04:37

1

一种不同的方法可以是:

  • 暴露的 “客户地址” 的资源(如你在上述)

    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) 
  • 更新比客户。

  • +0

    最后一个不需要混合原子:XLink规范也适用。 – 2012-04-17 18:01:36