RESTful APIはフォーム全体のデータを提供する必要がありますか?


13

データ用にRESTful APIを完全に使用するJavaScript Webアプリケーションがあるとします。

このアプリケーションにはデータフォームがあり、/ product / 12345のレコードを編集しているとします。フォームを作成するとき、/ product / 12345にRESTfulリクエストを行い、JSONデータを取得します。

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27
}

したがって、私のフォームには、営業担当者を選択するためのドロップダウンリストがあるのは明らかです。このリストを作成する必要があります。 データはどこから取得する必要がありますか?最も一般的なアプローチは何ですか?

/ product / 12345要求応答の一部にすることは理にかなっていますか?

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27,
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ]
}

新しいレコードを作成する場合はどうですか?私のAPIもGET / product / newに次のように応答する必要がありますか?

{
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ],
  "categories": [
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
  ],
  "etc": [ ... ]
}

してください決して何かを作成するために、GETリクエストを使用していません。あなたのエンドポイントがあるべき/製品 ではない/製品/新。新しい製品を作成するには、そのエンドポイントにPUTリクエストを送信する必要があります。
ケレムバイドゥアン

これは何も作成していません。これは、純粋に既存のデータの要求、またはまだ保存されていない新しいレコードのテンプレートです。
チャドジョンソン

ああ、ごめんなさい。いずれにしても、製品エンドポイントは、テンプレート製品または製品作成フォームのドロップダウンの値の一覧を提供する責任を負わないようにする必要があります。@Danは、別個のエンドポイントを作成し、キャッシュヘッダーを使用するだけで、ブラウザがドロップダウン値をキャッシュしてパフォーマンスを向上できるようにしています。
ケレムベイドアン

回答:


6

私は非常にシンプルで、焦点を絞ったエンドポイントに傾いています。/ sales_usersのような場所で、すべての営業ユーザーを返すリクエストが予想されます。

GET / sales_users:

[
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
]

同様に、カテゴリのリストを作成する場合は、そのための個別のエンドポイントを追加します。

GET / categories:

[
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
]

GET / product / newを作成しません。むしろ、リストを作成するための適切なリクエストを知っている新しい製品(GET / categories、GET / sales_usersなど)の追加を処理するために、アプリでフォームを作成します。


3

営業担当者のリストが比較的静的であると仮定すると、/salesusers1回(フォームの読み込みなどで)呼び出して保存できる別のAPI呼び出しが必要になると思うので、このデータをそれぞれ再要求する必要はありません。時間。RESTでは、リソースを中心にAPIを整理していることに注意してください。営業担当者は、製品とは論理的に別のリソースです。

同様に、を呼び出すとき/product/newは、sales_user idを含む可能性があるが、それ以上の新しい製品のデータのみを送信する必要があります。sales_user自体への変更は別の呼び出しになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.