クライアントがリソースをコピーできるようにする必要がある REST API を設計しています。たとえば、次のリソースがあるとします: customer/{customerno}/address
また、住所を配送先住所にコピーする機能をクライアントに提供します。次のようにできます: customer/{customerno}/address/copytoshipping
しかし、REST ではなく RPC になります。このようなことを行う正しい方法は何ですか?
クライアントがリソースをコピーできるようにする必要がある REST API を設計しています。たとえば、次のリソースがあるとします: customer/{customerno}/address
また、住所を配送先住所にコピーする機能をクライアントに提供します。次のようにできます: customer/{customerno}/address/copytoshipping
しかし、REST ではなく RPC になります。このようなことを行う正しい方法は何ですか?
それは REST API に含まれている必要がありますか? クライアントは、(請求先?) 住所の表現を GET して、それを配送先住所に PUT するだけで済みます。はい、クライアント側のコードでその詳細を隠すことはできますが (私には非常に合理的だと思われます)、コピーを行うための特別な操作で REST インターフェイスを乱雑にする特別な理由はありません。
Rel="CustomerAddress" を使用してアドレスを取得します
Rel="CustomerShippingAddress" を使用した POST URL の例 customer/{customerno}/address/shipping
別のアプローチは次のとおりです。
「顧客の住所」のリソースを公開します(上記のとおり)
GET /customer/{number}/address
「顧客の配送先住所」フェッチ用のリソースを公開します。
GET /customer/{number}/shipping-address
実際の住所で更新:
PUT /customer/{number}/shipping-address
Content-Type: application/xml
(xml/json of a single 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')
おそらく必要以上に複雑ですが、クライアントではなくサーバーにコピーの負担がかかります。