Freigeben über


Der Header für die Standortantwort im REST-Erstellungsvorgang

Für REST-Endpunkte teilt der Location Antwortheader Clients mit, wo eine neu erstellte Ressource abgerufen werden soll. Der Daten-API-Generator (DAB) gibt für Location Einfügungen zurückPOST. Für PUT oder PATCH Upserts, die neue Zeilen erstellen, wird die Kopfzeile möglicherweise weggelassen.

Wenn DAB den Location-Header festlegt

Scenario Statuscode Positionsheader (aktuelles Verhalten)
POST erstellt eine neue Zeile (Tabelle) 201 Erstellt Vorhanden: Primärschlüsselpfadsegmente, z. B id/123 . oder categoryid/3/pieceid/1.
POST führt gespeicherte Prozedur aus, die neue Zeilen zurückgibt. 201 Erstellt Vorhanden, wenn PK abgeleitet werden kann; ist möglicherweise leer, wenn dies nicht möglich ist.
PUT Upsert aktualisiert vorhandene Zeile 200 OK (Anforderung erfolgreich) Nicht vorhanden
PUT Upsert fügt neue Zeile ein (keine If-Match) 201 Erstellt Kann weggelassen werden; verlassen Sie sich nicht auf Location
PATCH Upsert aktualisiert vorhandene Zeile 200 OK (Anforderung erfolgreich) Nicht vorhanden
PATCH Upsert fügt neue Zeile ein (keine If-Match) 201 Erstellt Kann weggelassen werden; verlassen Sie sich nicht auf Location
PUT / PATCH mit fehlender Zeile und fehlender If-Match: * Zeile 404 nicht gefunden Nicht vorhanden
Alle Aktualisierungen (Zeile vorhanden) 200 OK (Anforderung erfolgreich) Nicht vorhanden

Verhalten

  • Zusammengesetzte Primärschlüssel werden als sortierte Segmente angezeigt, z. B book_id/1/id/5001 . oder categoryid/3/pieceid/1.
  • Spaltennamenzuordnungen (Aliase) verwenden die REST-verfügbar gemachten Feldnamen im Pfad.

Beispiel: POST-Erstellung eines neuen Elements

Anfrage

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

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

Antwort

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
}

Der Client kann jetzt GET http://localhost:50246/api/Books/id/123.

Beispiel: POST-Einfügen in zusammengesetzte Schlüsseltabelle

Anfrage

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

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

Antwort

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

Beispiel: PUT-Aktualisierung vorhandener Zeile (kein Speicherort)

Anfrage

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

{
  "title": "Updated Title"
}

Antwort

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

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

(Keine Location Kopfzeile.)

Beispiel: EINFÜGEN einer neuen Zeile

Anfrage

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

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

Antwort

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

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

(Location Kopfzeile kann hier weggelassen werden.)

Beispiel: PUT mit If-Match und fehlender Zeile

Anfrage

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

{
  "title": "Attempted Update"
}

Antwort

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

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

(Keine Location Kopfzeile.)

Review

  • POST mit Erstellung: Location ist mit dem Primärschlüsselpfad vorhanden.
  • PUT oder PATCH mit Update: Nein Location.
  • PUT oder PATCH mit Einfügemarke: Rückgaben 201 Created; Location kann weggelassen werden (nicht davon abhängig).
  • Wenn Sie diese Einschließen verwenden If-Match: *, führt DAB nur dann eine Aktualisierung durch, wenn die Zeile bereits vorhanden ist. Wenn die Zeile fehlt, schlägt die Anforderung fehl 404 Not Found , und es wird kein Einfügen ausgeführt, sodass keine Location Kopfzeile zurückgegeben wird.