Guide des standards JSON : RFC 6901, 6902 et 7396
JSON est devenu le standard de fait pour l'échange de données sur le Web. Cependant, à mesure que les API deviennent plus complexes, les simples objets JSON ne suffisent souvent plus. Les développeurs ont besoin de méthodes standardisées pour référencer des parties spécifiques d'un document JSON et pour décrire les modifications apportées à ces documents. C'est là qu'interviennent les normes RFC 6901 (JSON Pointer), RFC 6902 (JSON Patch) et RFC 7396 (JSON Merge Patch).
Que sont JSON Pointer et Patch ?
- RFC 6901 (JSON Pointer) : Définit une syntaxe de chaîne pour identifier une valeur spécifique dans un document JSON. C'est comme une "adresse" pour une donnée.
- RFC 6902 (JSON Patch) : Définit une structure de document JSON pour exprimer une séquence d'opérations à appliquer à un document JSON. C'est comme un "diff" ou un "journal de transactions".
- RFC 7396 (JSON Merge Patch) : Fournit une méthode plus simple pour décrire les changements en envoyant un document "patch" qui ressemble au document cible mais ne contient que les champs modifiés.
1. RFC 6901 : JSON Pointer
JSON Pointer utilise une syntaxe séparée par des barres obliques (/) pour naviguer dans la hiérarchie d'un objet JSON.
Règles de syntaxe :
/représente la racine./foopointe vers la valeur de la clé "foo"./foo/0pointe vers le premier élément du tableau "foo".~1est utilisé pour représenter un caractère/littéral.~0est utilisé pour représenter un caractère~littéral.
Exemple :
{
"biscuits": [
{ "name": "Digestive" },
{ "name": "Choco" }
]
}
Le pointeur /biscuits/1/name se résoudrait en "Choco".
2. RFC 6902 : JSON Patch
JSON Patch est un tableau d'objets d'opération. Chaque objet doit avoir un champ op.
Opérations :
- add : Ajoute une valeur au chemin spécifié.
- remove : Supprime la valeur au chemin indiqué.
- replace : Remplace la valeur au chemin indiqué.
- move : Déplace une valeur d'un chemin à un autre.
- copy : Copie une valeur d'un chemin à un autre.
- test : Vérifie que la valeur à un chemin est celle attendue.
Exemple de Patch :
[
{ "op": "replace", "path": "/biscuits/0/name", "value": "Oatmeal" },
{ "op": "add", "path": "/biscuits/-", "value": { "name": "Ginger" } }
]
Le - dans /biscuits/- signifie "la fin du tableau".
3. RFC 7396 : JSON Merge Patch
JSON Merge Patch est beaucoup plus simple que la RFC 6902. Vous envoyez simplement un objet JSON qui représente l'état final souhaité des champs que vous souhaitez modifier.
Règles :
- Si le patch contient un champ avec une valeur non nulle, ce champ est mis à jour ou ajouté.
- Si le patch contient un champ avec une valeur
null, ce champ est supprimé de la cible. - Il n'est pas adapté pour patcher des tableaux (il remplace tout le tableau).
Exemple :
Cible :
{ "a": "b", "c": "d" }
Patch :
{ "a": "z", "c": null, "e": "f" }
Résultat :
{ "a": "z", "e": "f" }
Comparaison : Patch vs Merge Patch
| Caractéristique | RFC 6902 (Patch) | RFC 7396 (Merge Patch) |
|---|---|---|
| Complexité | Élevée (Tableau d'ops) | Faible (Basé sur les objets) |
| Efficacité | Très élevée (Chirurgical) | Modérée (Niveau champ) |
| Support Tableaux | Complet | Faible (Remplace tout le tableau) |
| Opérations atomiques | Oui (op test) | Non |
| Idéal pour | Changements d'état complexes | Mises à jour simples de propriétés |
FAQ
Q : Lequel dois-je utiliser pour mon API ? R : Utilisez JSON Merge Patch (7396) pour des mises à jour de ressources simples où vous ne vous souciez pas d'une manipulation précise des tableaux. Utilisez JSON Patch (6902) pour des ressources complexes, des exigences de performance élevées ou lorsque vous avez besoin d'opérations atomiques "test-and-set".
Q : Puis-je utiliser JSON Pointer dans mon URL ?
R : Oui, il est courant d'utiliser des JSON Pointers dans les fragments d'URI (ex: example.com/schema.json#/definitions/user).
Q : Comment gérer les caractères spéciaux dans les clés ?
R : Utilisez ~1 pour / et ~0 pour ~. Par exemple, une clé nommée a/b est référencée comme /a~1b.
Outils connexes
- Formateur et validateur JSON - Utilisez-le pour valider vos documents Patch ou Merge Patch.
- Convertisseur JSON en CSV - Aplatissez vos données JSON pour l'analyse.