Bagikan melalui


Header Respons Lokasi di Operasi Pembuatan REST

Untuk titik akhir REST, Location header respons memberi tahu klien tempat mengambil sumber daya yang baru dibuat. Data API builder (DAB) mengembalikan Location untuk POST sisipan. Untuk PUT atau PATCH upsert yang membuat baris baru, header mungkin dihilangkan.

Saat DAB mengatur header Lokasi

Scenario Kode Status Header Lokasi (perilaku saat ini)
POST membuat baris baru (tabel) 201 - Dibuat Sajikan: segmen jalur kunci utama, misalnya id/123 atau categoryid/3/pieceid/1.
POST menjalankan prosedur tersimpan yang mengembalikan baris baru 201 - Dibuat Ada jika PK dapat diturunkan; mungkin kosong ketika tidak bisa.
PUT upsert memperbarui baris yang ada 200 OK (Permintaan berhasil) Tidak ada
PUT upsert menyisipkan baris baru (tanpa If-Match) 201 - Dibuat Dapat dihilangkan; jangan mengandalkan Location
PATCH upsert memperbarui baris yang ada 200 OK (Permintaan berhasil) Tidak ada
PATCH upsert menyisipkan baris baru (tanpa If-Match) 201 - Dibuat Dapat dihilangkan; jangan mengandalkan Location
PUT / PATCH dengan If-Match: * baris dan hilang 404 Tidak ditemukan Tidak ada
Pembaruan apa pun (baris ada) 200 OK (Permintaan berhasil) Tidak ada

Perilaku

  • Kunci primer komposit muncul sebagai segmen yang diurutkan, misalnya book_id/1/id/5001 atau categoryid/3/pieceid/1.
  • Pemetaan nama kolom (alias) menggunakan nama bidang yang diekspos REST di jalur.

Contoh: POST membuat item baru

Permohonan

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

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

Jawaban

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
}

Klien sekarang GET http://localhost:50246/api/Books/id/123dapat .

Contoh: POST menyisipkan ke dalam tabel kunci komposit

Permohonan

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

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

Jawaban

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"
}

Contoh: PUT memperbarui baris yang ada (tanpa Lokasi)

Permohonan

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

{
  "title": "Updated Title"
}

Jawaban

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

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

(Tidak ada Location header.)

Contoh: PUT menyisipkan baris baru

Permohonan

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

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

Jawaban

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

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

(Location header dapat dihilangkan di sini.)

Contoh: PUT dengan If-Match dan baris hilang

Permohonan

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

{
  "title": "Attempted Update"
}

Jawaban

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

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

(Tidak ada Location header.)

Tinjauan

  • POST dengan pembuatan: Location hadir dengan jalur kunci utama.
  • PUT atau PATCH dengan pembaruan: Tidak Location.
  • PUT atau PATCH dengan insert: Returns 201 Created; Location mungkin dihilangkan (jangan bergantung padanya).
  • Saat Anda menyertakan If-Match: *, DAB hanya melakukan pembaruan jika baris sudah ada. Jika baris hilang, permintaan gagal dengan 404 Not Found dan tidak ada penyisipan yang dilakukan, sehingga tidak ada Location header yang dikembalikan.