2012-04-17 57 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