Datenmodelle für REST-APIs
In API Gateway definiert ein Modell die Datenstruktur eines Payloads. In API Gateway werden Modelle unter Verwendung des JSON-Schemaentwurfs 4
{ "id": 1, "type": "dog", "price": 249.99 }
Die Daten enthalten die id
, den type
und den price
des Haustiers. Ein Modell dieser Daten ermöglicht Ihnen Folgendes:
Verwenden der grundlegenden Anforderungsvalidierung.
Erstellen von Zuweisungsvorlagen für die Datentransformation.
Erstellen eines benutzerdefinierten Datentyps (UDT), wenn Sie ein SDK generieren.
In diesem Modell gilt:
-
Das Objekt
$schema
stellt eine gültige JSON-Schema-Versionskennung dar. Dieses Schema ist der JSON-Schemaentwurf v4. -
Das Objekt
title
ist eine lesbare Kennung des Modells. Dieser Titel istPetStoreModel
. -
Das
required
-Validierungsschlüsselwort erforderttype
undprice
für die grundlegende Anforderungsvalidierung. -
Die
properties
des Modells sindid
,type
undprice
. Jedes Objekt hat Eigenschaften, die im Modell beschrieben werden. -
Das Objekt
type
kann nur die Wertedog
,cat
oderfish
haben. -
Das Objekt
price
ist eine Zahl und auf einenminimum
-Wert von 25 und einenmaximum
-Wert von 500 beschränkt.
1 { 2 "$schema": "http://json-schema.org/draft-04/schema#", 3 "title": "PetStoreModel", 4 "type" : "object", 5 "required" : [ "price", "type" ], 6 "properties" : { 7 "id" : { 8 "type" : "integer" 9 }, 10 "type" : { 11 "type" : "string", 12 "enum" : [ "dog", "cat", "fish" ] 13 }, 14 "price" : { 15 "type" : "number", 16 "minimum" : 25.0, 17 "maximum" : 500.0 18 } 19 } 20 }
In diesem Modell gilt:
-
In Zeile 2 stellt das Objekt
$schema
eine gültige JSON-Schema-Versionskennung dar. Dieses Schema ist der JSON-Schemaentwurf v4. -
In Zeile 3 ist das Objekt
title
eine lesbare Kennung des Modells. Dieser Titel istPetStoreModel
. -
In Zeile 5 erfordert das
required
Validierungsschlüsselworttype
undprice
für die grundlegende Anforderungsvalidierung. -
In den Zeilen 6 bis 17 sind die
properties
des Modellsid
,type
undprice
. Jedes Objekt hat Eigenschaften, die im Modell beschrieben werden. -
In Zeile 12
type
kann das Objekt nur die Wertedog
,cat
oderfish
haben. -
In den Zeilen 14 bis 17 ist das Objekt
price
eine Zahl und durch einenminimum
-Wert von 25 und einenmaximum
-Wert von 500 eingeschränkt.
Erstellen komplexerer Modelle
Sie können das $ref
-Primitiv verwenden, um wiederverwendbare Definitionen für längere Modelle zu erstellen. Sie können beispielsweise eine Definition mit der Bezeichnung Price
im definitions
-Abschnitt zur Beschreibung des price
-Objekts erstellen. Der Wert von $ref
ist die Price
-Definition.
{ "$schema" : "http://json-schema.org/draft-04/schema#", "title" : "PetStoreModelReUsableRef", "required" : ["price", "type" ], "type" : "object", "properties" : { "id" : { "type" : "integer" }, "type" : { "type" : "string", "enum" : [ "dog", "cat", "fish" ] }, "price" : { "$ref": "#/definitions/Price" } }, "definitions" : { "Price": { "type" : "number", "minimum" : 25.0, "maximum" : 500.0 } } }
Sie können auch auf ein anderes Modellschema verweisen, das in einer externen Modelldatei definiert ist. Stellen Sie den Wert der $ref
-Eigenschaft auf die Position des Modells ein. Im folgenden Beispiel ist das Price
-Modell im PetStorePrice
-Modell in der API a1234
definiert.
{ "$schema" : "http://json-schema.org/draft-04/schema#", "title" : "PetStorePrice", "type": "number", "minimum": 25, "maximum": 500 }
Das längere Modell kann auf das PetStorePrice
-Modell verweisen.
{ "$schema" : "http://json-schema.org/draft-04/schema#", "title" : "PetStoreModelReusableRefAPI", "required" : [ "price", "type" ], "type" : "object", "properties" : { "id" : { "type" : "integer" }, "type" : { "type" : "string", "enum" : [ "dog", "cat", "fish" ] }, "price" : { "$ref": "https://apigateway.amazonaws.com/restapis/a1234/models/PetStorePrice" } } }
Verwendung von Ausgabedatenmodellen
Wenn Sie Ihre Daten umwandeln, können Sie in der Integrationsantwort ein Nutzlastmodell definieren. Ein Nutzlastmodell kann verwendet werden, wenn Sie ein SDK generieren. Bei stark typisierten Sprachen wie Java, Objective-C oder Swift entspricht das Objekt einem benutzerdefinierten Datentyp (UDT). API Gateway erstellt eine UDT, wenn Sie ihm bei der Generierung eines SDK ein Datenmodell zur Verfügung stellen. Weitere Informationen zu Datentransformationen finden Sie unter Zuweisungsvorlagen für REST-APIs.
Im folgenden Beispiel sehen Sie die Ausgabedaten einer Integrationsantwort.
{ [ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ] }
Im folgenden Beispiel sehen Sie ein Payload-Modell, das die Ausgabedaten beschreibt.
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetStoreOutputModel", "type" : "object", "required" : [ "description", "askingPrice" ], "properties" : { "description" : { "type" : "string" }, "askingPrice" : { "type" : "number", "minimum" : 25.0, "maximum" : 500.0 } } }
Mit diesem Modell können Sie ein SDK aufrufen, um die Eigenschaftswerte description
und askingPrice
durch Lesen der Eigenschaften PetStoreOutputModel[i].description
und PetStoreOutputModel[i].askingPrice
abzurufen. Wenn kein Modell zur Verfügung gestellt wird, verwendet API Gateway das leere Modell zur Erstellung einer Standard-UDT.
Nächste Schritte
-
In diesem Abschnitt finden Sie Ressourcen, die Sie verwenden können, um mehr über die in diesem Thema vorgestellten Konzepte zu erfahren.
Sie können den Tutorials zur Validierung von Anfragen folgen:
-
Weitere Informationen zu Datenumwandlungs- und Zuweisungsvorlagen finden Sie unter Zuweisungsvorlagen für REST-APIs.
-
Hier sehen Sie auch kompliziertere Datenmodelle. Siehe Beispiele für Datenmodelle und Zuweisungsvorlagen für API Gateway.