Delen via


De header Van het antwoord op de locatie in REST Create

Voor REST-eindpunten vertelt de Location antwoordheader clients waar een zojuist gemaakte resource moet worden opgehaald. Data API Builder (DAB) retourneert Location voor POST invoegingen. Voor PUT of PATCH upserts die nieuwe rijen maken, kan de koptekst worden weggelaten.

Wanneer DAB de locatieheader instelt

Scenario Statuscode Locatiekoptekst (huidig gedrag)
POST maakt een nieuwe rij (tabel) 201 Aangemaakt Aanwezig: primaire-sleutelpadsegmenten, bijvoorbeeld id/123 of categoryid/3/pieceid/1.
POST voert opgeslagen procedure die nieuwe rijen retourneert 201 Aangemaakt Aanwezig als PK kan worden afgeleid; kan leeg zijn als dat niet mogelijk is.
PUT upsert werkt bestaande rij bij 200 Akkoord Absent
PUT met upsert wordt een nieuwe rij ingevoegd (geen If-Match) 201 Aangemaakt Mag worden weggelaten; vertrouw niet op Location
PATCH upsert werkt bestaande rij bij 200 Akkoord Absent
PATCH met upsert wordt een nieuwe rij ingevoegd (geen If-Match) 201 Aangemaakt Mag worden weggelaten; vertrouw niet op Location
PUT / PATCH met If-Match: * en rij ontbreekt 404 Niet gevonden Absent
Elke update (rij bestond) 200 Akkoord Absent

Gedrag

  • Samengestelde primaire sleutels worden bijvoorbeeld book_id/1/id/5001 weergegeven als geordende segmenten of categoryid/3/pieceid/1.
  • Kolomnaamtoewijzingen (aliassen) maken gebruik van de veldnamen die met REST beschikbaar zijn in het pad.

Voorbeeld: POST die een nieuw item maakt

Aanvraag

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

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

Reactie

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
}

Client kan nu GET http://localhost:50246/api/Books/id/123.

Voorbeeld: POST invoegen in een samengestelde sleuteltabel

Aanvraag

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

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

Reactie

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

Voorbeeld: PUT die bestaande rij bijwerkt (geen locatie)

Aanvraag

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

{
  "title": "Updated Title"
}

Reactie

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

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

(Geen Location koptekst.)

Voorbeeld: PUT die nieuwe rij invoegt

Aanvraag

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

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

Reactie

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

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

(Location koptekst kan hier worden weggelaten.)

Voorbeeld: PUT met If-Match en rij ontbreekt

Aanvraag

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

{
  "title": "Attempted Update"
}

Reactie

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

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

(Geen Location koptekst.)

Review

  • POST met het maken: Location is aanwezig met het primaire-sleutelpad.
  • PUT of PATCH met update: Nee Location.
  • PUT of PATCH met insert: Retourneert 201 CreatedLocation ; kan worden weggelaten (is niet afhankelijk van het).
  • Wanneer u deze opneemt If-Match: *, voert DAB alleen een update uit als de rij al bestaat. Als de rij ontbreekt, mislukt de aanvraag en 404 Not Found wordt er geen invoegbewerking uitgevoerd, dus er wordt geen Location header geretourneerd.