Zum Hauptinhalt springen

Appendix B. Implementation Notes (Implementierungshinweise)

Dieser Anhang bietet praktische Ratschläge und Best Practices zur Implementierung von RFC 8941.


Generische Implementierungsarchitektur​

Generische Implementierungen sollten (SHOULD) serialize (Abschnitt 4.1) und parse (Abschnitt 4.2) Funktionen der obersten Ebene bereitstellen.

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

// Objektorientierte API
const parser = new StructuredFieldParser();
const result = parser.parseList(input);

Vollständigkeit und Konsistenz​

Für Interoperabilität müssen (MUST) generische Implementierungen vollständig sein und strikt den Algorithmen folgen (Abschnitt 1.1).

Community-Testsuite​

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

Abdeckung: Serialisierung, Parsing, Grenzfälle, Fehlerbedingungen, Interoperabilitätstests.


Geordnete Abbildungen​

Dictionaries und Parameters sind ordnungserhaltende Abbildungen. Implementierungen sollten (SHOULD) diese Reihenfolge beibehalten.

// ✓ Gut - erhält Reihenfolge
class OrderedDict {
constructor() {
this.items = []; // [{key, value}, ...]
}
}

// ✗ Schlecht - garantiert keine Reihenfolge
const dict = {};

Token vs. String Unterscheidung​

Implementierungen sollten (SHOULD) die Unterscheidung zwischen Token und String beibehalten.

// ✓ Gut - behält Typ
const value = {type: 'token', value: 'text/html'};
const value2 = {type: 'string', value: 'text/html'};

Fehlerbehandlung​

Bei Parse-Fehler müssen (MUST) Implementierungen das gesamte Feld ignorieren.

function parseStructuredField(input, type) {
try {
return parse(input, type);
} catch (error) {
return null; // Gesamtes Feld ignorieren
}
}

Sicherheitscheckliste​

  • Maximale Feldgröße begrenzen
  • Anzahl der List/Dictionary-Mitglieder begrenzen
  • String-Länge begrenzen
  • Alle Typen strikt validieren
  • Doppelte Schlüssel ablehnen
  • Bei Fehler korrekt fehlschlagen

Test-Best-Practices​

  1. Community-Testsuite verwenden
  2. Grenzfälle testen
  3. Fehlerfälle testen
  4. Roundtrip-Tests: serialize(parse(x)) == x
  5. Interoperabilitätstests

Wichtige Punkte​

  1. Algorithmen folgen: Strikt an Spezifikation halten
  2. Testsuite verwenden: Mit Community-Tests validieren
  3. Reihenfolge bewahren: Dictionary- und Parameter-Reihenfolge beibehalten
  4. Typen unterscheiden: Token vs. String
  5. Korrekt fehlschlagen: Gesamtes Feld bei Fehler ignorieren
  6. Sicherheitsgrenzen: Vernünftige Größengrenzen implementieren