Wie wird NULL in der HTTP-Abfragezeichenfolge gesendet?

8

Ich entwickle eine API, die die drei wichtigsten Datentypen als Werte für die Abfrage von String-Parametern akzeptiert: boolean , string & amp; numeric ( integer oder float ). Standardmäßig wird alles als String abgerufen (ich glaube nicht, dass es einen Weg dafür gibt), aber die Parameter sind mit einem Typ konfiguriert, so dass ich sie in den richtigen Typ umwandle.

Ich muss jetzt anfangen, NULL als Wert für alle drei Datentypen zu akzeptieren, aber ich bin mir nicht sicher, was der beste Weg ist.

Einige Leute scheinen keinen Wert als NULL zu akzeptieren ( ?param , ohne = ), aber das funktioniert nicht ganz für mich:

  1. Ich akzeptiere das bereits als true für booleans, obwohl das geändert werden könnte.
  2. Es wird als leere Zeichenfolge empfangen, was ein gültiger Wert für den Datentyp string ist.

Also, hier sind die einzigen zwei Möglichkeiten, die ich sehen kann, von denen keine für mich arbeiten:

  1. Verwenden Sie eine Konstante wie "NULL" oder "~" . Das funktioniert für booleans & amp; Zahlen, aber nicht für Strings, da dies der gewünschte String-Wert sein könnte.
  2. Verwenden Sie einen leeren Wert. Auch dies kann für booleans & amp; Zahlen, aber nicht für Strings, da dies der gewünschte String-Wert sein könnte.

Scheint so, als ob die Verwendung einer Konstanten meine einzige Wahl wäre, und um Probleme zu vermeiden, kann diese Konstante von Strings verboten werden. Aber ist das wirklich die einzig gangbare Option? Ich wünschte, es gäbe einen besseren Weg. : (

Bearbeiten : Ich hatte gerade eine andere Idee, die funktionieren könnte, aber ich bin mir nicht sicher, wie es wahrgenommen werden würde. Ich denke, dass es definitiv Standards bricht, und viele Leute würden es wahrscheinlich nicht mögen, aber würde mein Problem besser beheben als jede andere Lösung bisher. Im Grunde wäre die Idee, JSON zu verwenden, das native Datentypen unterstützt. Ich habe dieses Problem nicht mit POST-Anfragen, weil sie JSON verwenden.

Die Idee wäre also, JSON in die Abfragezeichenfolge aufzunehmen, was im Grunde eine alternative Abfragezeichenfolge erlaubt, die die Standard-HTTP-Zeichenfolge überschreiben würde. So etwas wie: ?_json={"foo":"bar","param":null} anstelle von ?foo=bar&param=~ . Oder vielleicht sogar die Abfragezeichenfolge vollständig übernehmen: ?{"foo":"bar","param":null} .

    
Marco Roy 06.07.2015, 19:53
quelle

1 Antwort

9

Senden Sie einen URLEncoded NUL-Wert (% 00) für alle Objekte, die Sie speziell auf null setzen. Es sollte korrekt URL-Dekodierung sein.

    
Kylar 06.07.2015, 20:37
quelle

Tags und Links