對於 REST 端點, Location 回應標頭會告知用戶端在何處擷取新建立的資源。 資料 API 產生器 (DAB) 會傳回Location插入。POST 對於 PUT 建立新資料列的 or 更新 PATCH 插入,可以省略標頭。
當 DAB 設定 Location 標頭時
| Scenario | 狀態代碼 | 位置標頭 (目前行為) |
|---|---|---|
POST 建立新列 (表格) |
201 已建立 | Present:主索引鍵路徑區段,例如 id/123 或 categoryid/3/pieceid/1。 |
POST 執行傳回新列的預存程序 |
201 已建立 | 如果可以推導出 PK,則存在;當它不能時,可能會是空的。 |
PUT upsert 更新現有資料列 |
200 確定 | 不存在 |
PUT upsert 插入新列 (無 If-Match) |
201 已建立 | 可以省略;不要依賴 Location |
PATCH upsert 更新現有資料列 |
200 確定 | 不存在 |
PATCH upsert 插入新列 (無 If-Match) |
201 已建立 | 可以省略;不要依賴 Location |
PUT
/
PATCH 與 If-Match: * 和行缺失 |
404 找不到 | 不存在 |
| 任何更新 (資料列已存在) | 200 確定 | 不存在 |
行為
- 複合主索引鍵會顯示為有序區段,例如
book_id/1/id/5001或categoryid/3/pieceid/1。 - 直欄名稱對應 (別名) 會使用路徑中公開的 REST 欄位名稱。
範例:POST 建立新項目
Request
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 插入複合索引鍵表格
Request
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 更新現有資料列 (無位置)
Request
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 插入新列
Request
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
Request
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 with insert: 傳回
201 Created;Location可以省略 (不要依賴它)。 - 當您包含
If-Match: *時,DAB 只會在列已存在時執行更新。 如果缺少資料列,則要求會404 Not Found失敗,且不會執行任何插入,因此不會傳回任何Location標頭。