Modelos de dados para APIs REST
No API Gateway, um modelo define a estrutura de dados de uma carga. No API Gateway, modelos são definidos usando o esquema JSON rascunho 4
{ "id": 1, "type": "dog", "price": 249.99 }
Os dados contêm o id
, o type
e o price
do animal de estimação. Um modelo desses dados possibilita que você:
Use a validação básica da solicitação.
Crie modelos de mapeamento para transformação de dados.
Crie um tipo de dados definido pelo usuário (UDT) ao gerar um SDK.
Neste modelo:
-
O objeto
$schema
representa um identificador de versão do Esquema JSON válido. Esse esquema é o rascunho do JSON Schema v4. -
O objeto
title
é um identificador humanamente legível para o modelo. Esse título éPetStoreModel
. -
A palavra-chave de validação
required
exige otype
e oprice
para validação básica da solicitação. -
As
properties
do modelo sãoid
,type
eprice
. Cada objeto tem propriedades que são descritas no modelo. -
O objeto
type
pode ter somente os valoresdog
,cat
oufish
. -
O objeto
price
é um número e está limitado aominimum
de 25 e aomaximum
de 500.
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 }
Neste modelo:
-
Na linha 2, o objeto
$schema
representa um identificador de versão do JSON Schema válido. Esse esquema é o rascunho do JSON Schema v4. -
Na linha 3, o objeto
title
é um identificador legível para o modelo. Esse título éPetStoreModel
. -
Na linha 5, a palavra-chave de validação
required
exige otype
e oprice
para validação básica da solicitação. -
Nas linhas 6 a 17, as
properties
do modelo sãoid
,type
eprice
. Cada objeto tem propriedades que são descritas no modelo. -
Na linha 12, o objeto
type
pode ter somente os valoresdog
,cat
oufish
. -
Nas linhas 14 a 17, o objeto
price
é um número e está limitado aominimum
de 25 e aomaximum
de 500.
Criar modelos mais complexos
É possível usar o $ref
primitivo para criar definições reutilizáveis para modelos mais longos. Por exemplo, você pode criar uma definição chamada Price
na seção definitions
que descreve o objeto price
. O valor de $ref
é a definição Price
.
{ "$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 } } }
Você também pode referenciar outro esquema de modelo definido em um arquivo de modelo externo. Defina o valor da propriedade $ref
para a localização do modelo. No exemplo a seguir, o modelo Price
é definido no modelo PetStorePrice
na API a1234
.
{ "$schema" : "http://json-schema.org/draft-04/schema#", "title" : "PetStorePrice", "type": "number", "minimum": 25, "maximum": 500 }
O modelo mais longo pode referenciar o modelo PetStorePrice
.
{ "$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" } } }
Usar modelos de dados de saída
Se você transformar seus dados, poderá definir um modelo de carga útil na resposta de integração. Um modelo de carga útil pode ser usado quando você gera um SDK. Para linguagens de tipo forte, como Java, Objective-C ou Swift, o objeto corresponde a um tipo de dados definido pelo usuário (UDT). O API Gateway cria um UDT se você fornecê-lo com um modelo de dados ao gerar um SDK. Para ter mais informações sobre transformações de dados, consulte Modelos de mapeamento para APIs REST.
O exemplo a seguir são dados de saída de uma resposta de integração.
{ [ { "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 } ] }
O exemplo a seguir é um modelo de payload que descreve os dados de saída.
{ "$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 } } }
Com esse modelo, você pode chamar um SDK para recuperar os valores de propriedades description
e askingPrice
, lendo as propriedades PetStoreOutputModel[i].description
e PetStoreOutputModel[i].askingPrice
. Se nenhum modelo for fornecido, o API Gateway usará o modelo vazio para criar um UDT padrão.
Próximas etapas
-
Esta seção fornece recursos que você pode usar para ter mais conhecimento sobre os conceitos apresentados neste tópico.
É possível seguir os tutoriais de validação da solicitação:
-
Você pode ter mais informações sobre modelos de mapeamento e transformação de dados, Modelos de mapeamento para APIs REST.
-
Você também pode ver modelos de dados mais complicados. Consulte Exemplo de modelos de dados e modelos de mapeamento para o API Gateway.