Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A REST-végpontok esetében a fejlesztők gyakran szeretnék szabályozni, hogy a frissítések új rekordokat hoznak-e létre, vagy csak a meglévőket módosítják. A If-Match HTTP-fejléc biztosítja ezt a vezérlőt a Data API Builderben (DAB).
Alapértelmezés szerint a DAB a következő műveleteket kezeli PUT és PATCH végzi el :
Ha az erőforrás létezik: frissítve van.
Ha nem létezik, akkor beszúrja.
-
PUT→ teljes upsert (erőforrás helyett). -
PATCH→ növekményes upsert (részleges frissítést alkalmaz).
-
Ezt If-Match: * a viselkedést módosítja a csak frissítési szemantikához.
Mit If-Match a DAB-ban?
If-Match csak helyettesítő karakterrel *támogatott.
| Fejléc értéke | Magatartás |
|---|---|
If-Match: * |
Csak akkor végezze el a frissítést, ha az erőforrás létezik; ha hiányzik → 404 Nem található. |
If-Match: <any other> |
Elutasította; 400 Hibás kérelem (Etags not supported, use '*'). |
| (hiányzik) | Upsert viselkedés (beszúrás, ha nem található, egyébként frissítés). |
Viselkedés áttekintése
- A DAB nem implementálja a rekordonkénti ETag vagy verzióegyezést.
- Nem történik egyidejűségi jogkivonat kiértékelése.
*csak azt állítja, hogy "léteznie kell". - Csak a REST-ra vonatkozik, a GraphQL-ra nem.
- A DELETE műveletek esetében jelenleg nem értelmezhető.
If-Match használata a PUT használatával
Nélküle If-Matcha PUT beszúrja, ha az erőforrás nem létezik (visszaadja 201 Created).
Csak frissítési példa
Kérelem
PUT /api/Books/id/1
If-Match: *
Content-Type: application/json
{
"title": "The Return of the King"
}
Siker (rekord már létezik)
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"title": "The Return of the King"
}
Hiba (a rekord hiányzik)
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "No Update could be performed, record not found"
}
Upsert insert example (nincs If-Match és a rekord nem létezik)
Kérelem
PUT /api/Books/id/500
Content-Type: application/json
{
"title": "Inserted via PUT",
"publisher_id": 7
}
Válasz
HTTP/1.1 201 Created
Location: id/500
Content-Type: application/json
{
"id": 500,
"title": "Inserted via PUT",
"publisher_id": 7
}
If-Match használata a PATCH használatával
PATCH hasonlóan viselkedik. Anélkül If-Matchnövekményes upsertet hajt végre. Ezzel If-Match: *csak a meglévő sorokat frissíti.
Kérelem
PATCH /api/Books/id/1
If-Match: *
Content-Type: application/json
{
"title": "The Two Towers"
}
Válasz sikeresség esetén
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"title": "The Two Towers"
}
Válasz, ha nem található
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "No Update could be performed, record not found"
}
Érvénytelen If-Match használat
A rendszer nem (beleértve az idézett sztringeket) bármilyen értéket * elutasít.
Kérelem
PUT /api/Books/id/1
If-Match: "abc123"
Content-Type: application/json
{
"title": "To Kill a Mockingbird"
}
Válasz
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "Etags not supported, use '*'"
}
Felülvizsgálat
- Kihagyja
If-Matchaz upsert (insert-or-update) szemantikát. - Szigorú frissítési szemantikához használható
If-Match: *(ha az elem hiányzik, 404). - Ne használjon más értéket. A valós ETag-egyeztetés nincs megvalósítva.