我正在設計一個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