次の方法で共有


REST 作成操作の Location Response ヘッダー

REST エンドポイントの場合、 Location 応答ヘッダーは、新しく作成されたリソースを取得する場所をクライアントに指示します。 データ API ビルダー (DAB) は、Location挿入のPOSTを返します。 新しい行を作成する PUT または PATCH アップサートの場合、ヘッダーを省略できます。

DAB が Location ヘッダーを設定する場合

Scenario 状態コード Location ヘッダー (現在の動作)
POST 新しい行を作成します (テーブル) 201 作成済み 現在: id/123categoryid/3/pieceid/1などの主キー パス セグメント。
POST は、新しい行を返すストアド プロシージャを実行します 201 作成済み PK を派生できる場合は存在します。できない場合は空である可能性があります。
PUT upsert は既存の行を更新します 200 OK(正常に処理されました) 存在しない
PUT upsert は新しい行を挿入します (If-Matchなし) 201 作成済み 省略できます。に依存しない Location
PATCH upsert は既存の行を更新します 200 OK(正常に処理されました) 存在しない
PATCH upsert は新しい行を挿入します (If-Matchなし) 201 作成済み 省略できます。に依存しない Location
PUT / PATCH If-Match: *と行がありません 404 見つかりません 存在しない
すべての更新 (行が存在) 200 OK(正常に処理されました) 存在しない

行動

  • 複合主キーは、 book_id/1/id/5001categoryid/3/pieceid/1など、順序付けられたセグメントとして表示されます。
  • 列名マッピング (エイリアス) では、パス内の REST で公開されるフィールド名が使用されます。

例: POST で新しい項目を作成する

リクエスト

POST /api/Books
Content-Type: application/json

{
  "title": "New Book",
  "publisher_id": 42
}

[応答]

HTTP/1.1 201 Created
Location: http://localhost:50246/api/Books/id/123
Content-Type: application/json

{
  "id": 123,
  "title": "New Book",
  "publisher_id": 42
}

クライアントが GET http://localhost:50246/api/Books/id/123できるようになりました。

例: 複合キー テーブルへの POST 挿入

リクエスト

POST /api/Inventory
Content-Type: application/json

{
  "categoryid": 3,
  "pieceid": 1,
  "categoryName": "SciFi"
}

[応答]

HTTP/1.1 201 Created
Location: http://localhost:50246/api/Inventory/categoryid/3/pieceid/1
Content-Type: application/json

{
  "categoryid": 3,
  "pieceid": 1,
  "categoryName": "SciFi"
}

例: PUT による既存の行の更新 (場所なし)

リクエスト

PUT http://localhost:50246/api/Books/id/1
Content-Type: application/json

{
  "title": "Updated Title"
}

[応答]

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1,
  "title": "Updated Title"
}

(ヘッダー Location しません。)

例: PUT による新しい行の挿入

リクエスト

PUT http://localhost:50246/api/Books/id/500
Content-Type: application/json

{
  "title": "Inserted via PUT",
  "publisher_id": 7
}

[応答]

HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": 500,
  "title": "Inserted via PUT",
  "publisher_id": 7
}

(ここではLocation ヘッダーを省略できます。

例: If-Match と行が見つからない PUT

リクエスト

PUT http://localhost:50246/api/Books/id/500
If-Match: *
Content-Type: application/json

{
  "title": "Attempted Update"
}

[応答]

HTTP/1.1 404 Not Found
Content-Type: application/json

{
  "error": "No Update could be performed, record not found"
}

(ヘッダー Location しません。)

Review

  • POST with creation: Location は主キー パスと共に存在します。
  • 更新プログラムを含む PUT または PATCH: Locationなし。
  • 挿入を含む PUT または PATCH: 201 Createdを返します。 Location は省略できます (依存しません)。
  • If-Match: *を含めると、DAB は行が既に存在する場合にのみ更新を実行します。 行がない場合、要求は 404 Not Found で失敗し、挿入は実行されないため、 Location ヘッダーは返されません。