REST エンドポイントの場合、 Location 応答ヘッダーは、新しく作成されたリソースを取得する場所をクライアントに指示します。 データ API ビルダー (DAB) は、Location挿入のPOSTを返します。 新しい行を作成する PUT または PATCH アップサートの場合、ヘッダーを省略できます。
DAB が Location ヘッダーを設定する場合
| Scenario | 状態コード | Location ヘッダー (現在の動作) |
|---|---|---|
POST 新しい行を作成します (テーブル) |
201 作成済み | 現在: id/123 や categoryid/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/5001やcategoryid/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ヘッダーは返されません。