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
$schemarepresenta 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
requiredexige otypee opricepara validação básica da solicitação. -
As
propertiesdo modelo sãoid,typeeprice. Cada objeto tem propriedades que são descritas no modelo. -
O objeto
typepode ter somente os valoresdog,catoufish. -
O objeto
priceé um número e está limitado aominimumde 25 e aomaximumde 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
$schemarepresenta 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
requiredexige otypee opricepara validação básica da solicitação. -
Nas linhas 6 a 17, as
propertiesdo modelo sãoid,typeeprice. Cada objeto tem propriedades que são descritas no modelo. -
Na linha 12, o objeto
typepode ter somente os valoresdog,catoufish. -
Nas linhas 14 a 17, o objeto
priceé um número e está limitado aominimumde 25 e aomaximumde 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 Transformações de modelo de mapeamento para APIs REST no API Gateway.
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:
-
Consulte mais informações sobre modelos de mapeamento e transformação de dados em Transformações de modelo de mapeamento para APIs REST no API Gateway.