Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
För REST-slutpunkter vill utvecklare ofta ha kontroll över om uppdateringar skapar nya poster eller bara ändrar befintliga.
If-Match HTTP-huvudet innehåller den kontrollen i Data API Builder (DAB).
Som standard behandlar PUT DAB och PATCH som driftstoppsåtgärder :
Om resursen finns: den uppdateras.
Om den inte finns infogas den.
-
PUT→ fullständig upsert (ersätter resursen). -
PATCH→ inkrementell upsert (gäller partiell uppdatering).
-
Om du lägger till If-Match: * ändringar i det här beteendet till endast uppdateringssemantik.
Vad If-Match gör i DAB
If-Match stöds endast med jokertecknets värde *.
| Rubrikvärde | Beteende |
|---|---|
If-Match: * |
Utför endast uppdatering om resursen finns. om det saknas → 404 hittades inte. |
If-Match: <any other> |
Avvisad; 400 Felaktig begäran (Etags not supported, use '*'). |
| (frånvarande) | Upsert-beteende (infoga om det inte hittas, annars uppdatera). |
Beteendeöversikt
- DAB implementerar inte ETag eller versionsmatchning per post.
- Ingen samtidighetstoken utvärderas.
*hävdar bara att "måste finnas". - Gäller endast FÖR REST, inte GraphQL.
- Inte meningsfullt för DELETE-åtgärder för närvarande.
Använda If-Match med PUT
Utan If-Matchinfogar PUT när resursen inte finns (returnerar 201 Created).
Endast uppdateringsexempel
Begäran
PUT /api/Books/id/1
If-Match: *
Content-Type: application/json
{
"title": "The Return of the King"
}
Lyckades (posten fanns)
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"title": "The Return of the King"
}
Fel (posten saknas)
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "No Update could be performed, record not found"
}
Upsert Insert-exempel (ingen If-Match och posten fanns inte)
Begäran
PUT /api/Books/id/500
Content-Type: application/json
{
"title": "Inserted via PUT",
"publisher_id": 7
}
Svar
HTTP/1.1 201 Created
Location: id/500
Content-Type: application/json
{
"id": 500,
"title": "Inserted via PUT",
"publisher_id": 7
}
Använda If-Match med PATCH
PATCH beter sig på liknande sätt. Utan If-Matchutför den en inkrementell upsert. Med If-Match: *uppdaterar den bara befintliga rader.
Begäran
PATCH /api/Books/id/1
If-Match: *
Content-Type: application/json
{
"title": "The Two Towers"
}
Svar när det lyckades
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"title": "The Two Towers"
}
Svar när Hittades inte
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "No Update could be performed, record not found"
}
Ogiltig användning av If-Match
Alla andra värden än * (inklusive angivna strängar) avvisas.
Begäran
PUT /api/Books/id/1
If-Match: "abc123"
Content-Type: application/json
{
"title": "To Kill a Mockingbird"
}
Svar
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "Etags not supported, use '*'"
}
Review
-
If-MatchUtelämna för upsert-semantik (insert-or-update). - Använd
If-Match: *för strikt endast uppdateringssemantik (404 om objektet saknas). - Använd inget annat värde. Verklig ETag-matchning implementeras inte.