Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.