共用方式為


REST 建立作業中的位置回應標頭

對於 REST 端點, Location 回應標頭會告知用戶端在何處擷取新建立的資源。 資料 API 產生器 (DAB) 會傳回Location插入。POST 對於 PUT 建立新資料列的 or 更新 PATCH 插入,可以省略標頭。

當 DAB 設定 Location 標頭時

Scenario 狀態代碼 位置標頭 (目前行為)
POST 建立新列 (表格) 201 已建立 Present:主索引鍵路徑區段,例如 id/123categoryid/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 / PATCHIf-Match: * 和行缺失 404 找不到 不存在
任何更新 (資料列已存在) 200 確定 不存在

行為

  • 複合主索引鍵會顯示為有序區段,例如 book_id/1/id/5001categoryid/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 creationLocation 與主索引鍵路徑一起存在。
  • PUT 或 PATCH 與更新:Location
  • PUT 或 PATCH with insert: 傳回 201 Created; Location 可以省略 (不要依賴它)。
  • 當您包含 If-Match: *時,DAB 只會在列已存在時執行更新。 如果缺少資料列,則要求會 404 Not Found 失敗,且不會執行任何插入,因此不會傳回任何 Location 標頭。