2016-03-29 4 views
0

Bei der Entwicklung einer Client-Anwendung, die einen unserer vorhandenen REST-Services verwendet, kann ich JSON- oder XML-Antworten verwenden. Die XML-Antworten werden durch XSD-Dateien mit Schemainformationen beschrieben.Wie kennt ein Client den Datentyp von JSON RestResponse

Mit diesen XML-Schemas kann ich bestimmen, welcher Datentyp ein bestimmtes Ergebnis sein muss, und der Client kann diese Informationen verwenden, wenn er die Daten dem Benutzer präsentiert oder wenn der Client den Benutzer auffordert, eine Eigenschaft zu ändern. (Wie ist quit eine andere Frage btw, wie ich keine Multiplattform-Delphi-Implementierung von XML finden kann, die XSD-Schemas unterstützt ... aber wie gesagt: das ist eine andere Frage).

Die Alternative besteht darin, einen JSON-Antworttyp zu verwenden, aber dann kann der Client den spezifischen Datentyp einer Eigenschaft nicht ermitteln, da alles als Zeichenfolge gesendet wird.

Wie würde ein Client wissen, dass eine dieser Eigenschaften ein Index von einem Aufzählungstyp oder eine Ganzzahl oder eine Menge oder ein Verweis auf ein anderes Objekt ist, anhand seiner ID? (Dies sind nur Beispiele) Ich würde denken, dass der Client sollte nicht "hardcoded" Informationen über die Struktur der Antwort enthalten, oder bin ich falsch bei der Annahme, dass?

+2

Die "hardcoded" Info ist der Kontext, den Ihre Anwendung kennen sollte. Was ist der Vorteil der Info, dass 42 eine Aufzählung von HumptiDumpti ist, ohne zu wissen, was HumptiDumpti ist? Wenn Sie eine Antwort erhalten, sollten Sie die Frage und den Kontext kennen. –

Antwort

3

JSON verfügt nicht über ein Rich-Type-System wie XML, und JSON verfügt nicht über ein Schemasystem zur Beschreibung von Dingen wie Enumerationen und Referenzen wie XML. Aber JSON hat nur wenige Datentypen und die allgemeine Formatierung des JSON ist selbsterklärend in Bezug auf welchen Datentyp jedes gegebene Wert wird (siehe die offizielle JSON spec für weitere Details):

  1. einen String immer in Anführungszeichen gewickelt ist:

    "fieldname": "fieldvalue" 
    
  2. ein numerischer Wert Ziffer Zeichen ohne Zitate:

    "fieldname": 12345 
    
  3. ein OB jekt wird immer in geschweiften Klammern eingewickelt:

    "fieldname": { ... object data ... } 
    
  4. eine Anordnung immer in eckigen Klammern eingewickelt:

    "fieldname": [ ... array data ... ] 
    
  5. Ein boolescher ist immer ein true oder false ohne Zitate fixed:

    "name": true 
    

    "name": false 
    
  6. eine Null ist immer ein festes null ohne Zitate:

    "name": null 
    

Alles darüber hinaus wird die Kunden benötigen externe Kenntnis der Daten zu haben, die (wie ein Schema in XML gesendet wird, da XML selbst beschreibt überhaupt keine Datentypen).

Verwandte Themen