2つのエンティティCompany
とAddress
を見てください。会社にはbillingAddress
とprofileAddress
があります。
請求先住所とプロファイルを設定する関数を実装する方法がわかりません。ここに私が見ることができるオプションがあります:
POST
〜/address
を使用して新しいアドレスを作成します。 /company
の会社オブジェクトをprofileAddress = {/* the new id of the address */}
で更新します
実行/company/:id?function=updateBillingAddress&{/* rest of parameters go here */}
実行/updateBillingAddress?company={companyId}&{/* rest of parameters go here */}
実行/company/:id?billingAddress={ /* address data here */ }
最初の方法では、2つの呼び出しと、APIに接続する開発者側のより多くの責任が必要です。ただし、2番目の2つの方法が適切な構造かどうかはわかりません。
最後のものは大丈夫のようですが、ポインタを管理したり2つの呼び出しを実行したりする責任を負うことなく、更新の柔軟性を提供します。
以前に方法2または3の使用を見た人はいますか?彼らは大丈夫ですか?なぜ/なぜそうではないのですか?どちらを使用することをお勧めしますか、またその理由は何ですか。
私の考えでは、これには2つの異なる方法があります。
1)それらすべてを支配する1つのリソース:
新しい会社を作成するには:
`POST /company`
POST本文には、プロファイルアドレスと請求先アドレスの両方を含む、会社の詳細が含まれています。 v0idnullで示されているように、戻り値は201 Created
新しく作成されたリソースのURLを含むLocationヘッダー。
請求先住所を設定するには:
現在の会社の表現を取得します。
GET /company/123
新しい請求先住所で表現を更新し、次の操作を行います。
PUT /company/123
会社の完全に新しい表現で。
2)請求先住所とプロフィール住所の個別のサブリソース
新しい会社を作成するには:
POST /company
応答は次のようになります。
201 Created
Location: /company/123
Link: </company/123/billing_address>;rel=billing_address
Link: </company/123/profile_address>;rel=profile_address
その後、クライアントはbilling_address
またはprofile_address
リレーションをリンクして、それぞれの属性を更新します。
依存する...
私がそれをする方法:
PUT /company
会社のパラメーターは、サポートする任意の形式でリクエストの本文にあります。 Locationヘッダーに新しい会社のURLを含む201 Createdを返す必要があります。
PUT /address
PUT/companyと同じです。同じ機能。
請求先住所は/ company/[company-id]のサブリソースなので、次のようになります。
PUT /company/[company-id]/billingAddress
新しい請求先住所のパラメータは、最初に作成した住所のURLだけにすることができます。