Aller au contenu principal

Appendix B. Implementation Notes (Notes d'implémentation)

Cette annexe fournit des conseils pratiques et des meilleures pratiques pour implémenter RFC 8941.


Architecture d'implémentation générique​

Les implémentations génériques devraient (SHOULD) exposer des fonctions serialize (section 4.1) et parse (section 4.2) de niveau supérieur.

// API fonctionnelle
const result = parseList(input);
const output = serializeDict(dict);

// API orientée objet
const parser = new StructuredFieldParser();
const result = parser.parseList(input);

Complétude et cohérence​

Pour l'interopérabilité, les implémentations génériques doivent (MUST) être complètes et suivre strictement les algorithmes (section 1.1).

Suite de tests communautaire​

URL: https://github.com/httpwg/structured-field-tests

Couvre : sérialisation, analyse, cas limites, conditions d'erreur, tests d'interopérabilité.


Mappages ordonnés​

Les Dictionaries et Parameters sont des mappages préservant l'ordre. Les implémentations devraient (SHOULD) maintenir cet ordre.

// ✓ Bon - préserve l'ordre
class OrderedDict {
constructor() {
this.items = []; // [{key, value}, ...]
}
}

// ✗ Mauvais - ne garantit pas l'ordre
const dict = {};

Distinction Token vs String​

Les implémentations doivent (SHOULD) maintenir la distinction entre Token et String.

// ✓ Bon - préserve le type
const value = {type: 'token', value: 'text/html'};
const value2 = {type: 'string', value: 'text/html'};

Gestion des erreurs​

En cas d'échec d'analyse, les implémentations doivent (MUST) ignorer le champ entier.

function parseStructuredField(input, type) {
try {
return parse(input, type);
} catch (error) {
return null; // Ignorer le champ entier
}
}

Liste de contrôle de sécurité​

  • Limiter la taille maximale des champs
  • Limiter le nombre de membres List/Dictionary
  • Limiter la longueur des chaînes
  • Valider strictement tous les types
  • Rejeter les clés en double
  • Échouer correctement sur erreur

Bonnes pratiques de test​

  1. Utiliser la suite de tests communautaire
  2. Tester les cas limites
  3. Tester les cas d'erreur
  4. Tests aller-retour : serialize(parse(x)) == x
  5. Tests d'interopérabilité

Points clés​

  1. Suivre les algorithmes : Adhérer strictement à la spécification
  2. Utiliser la suite de tests : Valider avec les tests communautaires
  3. Préserver l'ordre : Maintenir l'ordre Dictionary et Parameter
  4. Distinguer les types : Token vs String
  5. Échouer correctement : Ignorer le champ entier en cas d'erreur
  6. Limites de sécurité : Implémenter des limites de taille raisonnables