json rfc rfc6901 rfc6902 rfc7396 api-design standards

Guide des standards JSON : RFC 6901 (Pointer), 6902 (Patch) et 7396 (Merge Patch)

Maîtrisez les standards de manipulation JSON. Comprenez comment les RFC 6901, 6902 et 7396 normalisent le pointage et la modification des données JSON.

2026-04-11

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.
  • /foo pointe vers la valeur de la clé "foo".
  • /foo/0 pointe vers le premier élément du tableau "foo".
  • ~1 est utilisé pour représenter un caractère / littéral.
  • ~0 est 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