Aller au contenu principal

Appendix A. Frequently Asked Questions (Foire aux questions)

A.1 Why Not JSON? (Pourquoi pas JSON?)​

Les premières propositions de champs structurés étaient basées sur JSON [RFC8259]. Cependant, contraindre son utilisation pour l'adapter aux champs d'en-tête HTTP nécessitait que les expéditeurs et les destinataires implémentent un traitement supplémentaire spécifique.

Problèmes avec JSON​

1. Problèmes de canonisation

  • Grands nombres (dépassent la plage sûre de JavaScript)
  • Objets avec membres en double (comportement non défini)

2. Chaînes Unicode

  • Problèmes potentiels d'interopérabilité dans les comparaisons
  • Différentes représentations Unicode pour le même caractère

3. Profondeur de imbrication arbitraire

  • Engagements mémoire inappropriés
  • Nécessité de limiter d'une manière ou d'une autre
  • Les implémentations JSON existantes n'ont pas de telles limites

4. Tentation d'implémentation

  • Difficile d'imposer des contraintes supplémentaires
  • Les gens ont tendance à utiliser des parseurs JSON sur des valeurs de champ

Conclusion​

Ces préoccupations ont conduit à l'adoption d'un format nécessitant des parseurs et sérialiseurs dédiés, car l'objectif principal était d'améliorer l'interopérabilité et de simplifier l'implémentation.


Tableau comparatif​

FonctionnalitéJSONRFC 8941
Plage numériqueIndéfinieClairement définie (15 chiffres)
Précision décimaleIndéfinie3 chiffres
UnicodePar défautASCII uniquement
ProfondeurIllimitéeLimitée à 2 niveaux
Clés en doubleNon définiExplicitement interdit
Adaptation HTTPMauvaiseExcellente

Exemple pratique​

Approche JSON (problématique)​

Example-Header: {"priority": 1, "timeout": 3.14159, "enabled": true}

Approche RFC 8941 (recommandée)​

Example-Header: priority=1, timeout=3.142, enabled

Avantages: Définition de type claire, comportement prévisible, s'adapte naturellement à HTTP.