web-dev-qa-db-ja.com

REST APIのカスタム関数

2つのエンティティCompanyAddressを見てください。会社にはbillingAddressprofileAddressがあります。

請求先住所とプロファイルを設定する関数を実装する方法がわかりません。ここに私が見ることができるオプションがあります:

  1. POST/addressを使用して新しいアドレスを作成します。 /companyの会社オブジェクトをprofileAddress = {/* the new id of the address */}で更新します

  2. 実行/company/:id?function=updateBillingAddress&{/* rest of parameters go here */}

  3. 実行/updateBillingAddress?company={companyId}&{/* rest of parameters go here */}

  4. 実行/company/:id?billingAddress={ /* address data here */ }

最初の方法では、2つの呼び出しと、APIに接続する開発者側のより多くの責任が必要です。ただし、2番目の2つの方法が適切な構造かどうかはわかりません。

最後のものは大丈夫のようですが、ポインタを管理したり2つの呼び出しを実行したりする責任を負うことなく、更新の柔軟性を提供します。

以前に方法2または3の使用を見た人はいますか?彼らは大丈夫ですか?なぜ/なぜそうではないのですか?どちらを使用することをお勧めしますか、またその理由は何ですか。

6
Matt

私の考えでは、これには2つの異なる方法があります。

1)それらすべてを支配する1つのリソース:

新しい会社を作成するには:

 `POST /company`

POST本文には、プロファイルアドレスと請求先アドレスの両方を含む、会社の詳細が含まれています。 v0idnullで示されているように、戻り値は201 Created新しく作成されたリソースのURLを含むLocationヘッダー。

請求先住所を設定するには:

現在の会社の表現を取得します。

GET /company/123

新しい請求先住所で表現を更新し、次の操作を行います。

PUT /company/123

会社の完全に新しい表現で。

長所

  • 一部のワークフローのリクエスト数を減らします。
  • 1つのリソースのキャッシュのみを気にする必要があるため、キャッシュは「簡単」です。
  • より多くのAPI顧客にとって理解しやすくなります。

短所

  • さまざまな理由で会社のリソースを頻繁に更新している場合、同時更新で問題が発生する可能性があります
  • 会社のさまざまな側面に対してきめ細かなキャッシュ制御を行う機能はありません。

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リレーションをリンクして、それぞれの属性を更新します。

長所

  • 潜在的な同時更新の失敗が少ない、会社のさまざまな側面への細かい更新を可能にします。
  • 各リソースのきめ細かなキャッシング。
  • ハイパーメディア/リンクを使用することにより、URL /アプリケーションを後で再構築できます。

短所

  • 多くのワークフローで複数のリクエストが必要(モバイルクライアント?)
  • ハイパーメディアAPIに精通していない一部のAPIコンシューマーを理解するのは困難です。
1
Pete

依存する...

私がそれをする方法:

PUT /company

会社のパラメーターは、サポートする任意の形式でリクエストの本文にあります。 Locationヘッダーに新しい会社のURLを含む201 Createdを返す必要があります。

PUT /address

PUT/companyと同じです。同じ機能。

請求先住所は/ company/[company-id]のサブリソースなので、次のようになります。

PUT /company/[company-id]/billingAddress

新しい請求先住所のパラメータは、最初に作成した住所のURLだけにすることができます。

0
Alex Dow