Tutorial: Criar uma API REST com integração não proxy HTTP
Neste tutorial, você criará uma API do zero usando o console do Amazon API Gateway. Você pode pensar no console como um estúdio de design de API e usá-lo para definir o escopo dos recursos da API, testar seus comportamentos, criar a API e implantá-la em estágios.
Tópicos
Criar uma API com integração personalizada HTTP
Esta seção orienta você pelas etapas necessárias para criar recursos, expor métodos em um recurso, configurar um método para alcançar os comportamentos de API desejados e testar e implantar a API.
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Se esta for a primeira vez que você usa o API Gateway, você verá uma página com os recursos do serviço. Em REST API, escolha Build (Criar). Quando o pop-up Create Example API (Criar API de exemplo) for exibido, escolha OK.
Se essa não for a primeira vez que você usa o API Gateway, escolha Create API (Criar API). Em REST API, escolha Build (Criar).
Selecione New API (Nova API).
Digite um nome em API Name (Nome da API).
Se preferir, adicione uma breve descrição em Description (Descrição).
Selecione Create API (Criar API).
Como resultado, uma API vazia é criada. A árvore Resources (Recursos) mostra o recurso raiz (
/
) sem métodos. Neste exercício, criaremos a API com a integração HTTP personalizada do site da PetStore (http://petstore-demo-endpoint.execute-api.com/petstore/pets.) Para fins de ilustração, vamos criar um recurso/pets
como um filho da raiz e expor um método GET nesse recurso para um cliente recuperar uma lista de itens de animais de estimação disponíveis no site PetStore. -
Para criar o recurso
/pets
, selecione a raiz, escolha Actions (Ações) e depois escolha Create Resource (Criar recurso).Digite
Pets
no campo Resource Name (Nome do recurso), deixe o valor Resource Path (Caminho do recurso) como determinado e escolha Enable API Gateway CORS (Habilitar CORS do API Gateway) e depois clique em Create Resource (Criar recurso). -
Para expor um método GET no recurso
/pets
, escolha Actions (Ações) e Create Method (Criar método).Escolha GET na lista abaixo do nó de recurso /pets e escolha o ícone de marca de seleção para concluir a criação do método.
nota Outras opções para um método de API incluem:
-
POST, usado principalmente para criar recursos filho.
-
PUT, usado principalmente para atualizar recursos existentes (e, embora não seja recomendado, pode ser usado para criar recursos filho).
-
DELETE, usado para excluir recursos.
-
PATCH, usado para atualizar recursos.
-
HEAD, usado, principalmente em cenários de teste. É o mesmo que GET, mas não retorna a representação do recurso.
-
OPTIONS, que pode ser usado por autores de chamadas para obter informações sobre opções de comunicação disponíveis para o serviço de destino.
O método criado ainda não está integrado ao backend. A próxima etapa configurará isso.
-
-
No painel Setup (Configuração) do método, selecione HTTP para Integration type (Tipo de integração), selecione GET na lista suspensa HTTP method (Método HTTP), digite
http://petstore-demo-endpoint.execute-api.com/petstore/pets
como o valor Endpoint URL (URL do endpoint), deixe todas as outras configurações como padrão e escolha Save (Salvar).nota Para o HTTP method (Método HTTP) da solicitação de integração, você deve escolher um que seja compatível com o backend. Para
HTTP
ouMock integration
, faz sentido que a solicitação de método e a solicitação de integração usem o mesmo verbo HTTP. Para outros tipos de integração, a solicitação de método provavelmente usará um verbo HTTP diferente da solicitação de integração. Por exemplo, para chamar uma função do Lambda, a solicitação de integração deve usarPOST
para invocar a função, enquanto a solicitação de método pode usar qualquer verbo HTTP, dependendo da lógica da função do Lambda.Quando a configuração do método terminar, será exibido o painel Method Execution (Execução de método), no qual é possível configurar ainda mais a solicitação de método para adicionar uma string de consulta ou parâmetros de cabeçalho personalizados. Você também pode atualizar a solicitação de integração para mapear dados de entrada da solicitação de método para o formato exigido pelo backend.
O site PetStore permite que você recupere uma lista de itens
Pet
por tipo de animal de estimação (por exemplo, "Cão" ou "Gato") em uma determinada página. Ele usa os parâmetros de string de consultatype
epage
para aceitar essa entrada. Sendo assim, precisamos adicionar os parâmetros de string de consulta à solicitação de método e mapeá-los para as strings de consulta correspondentes da solicitação de integração. -
No painel Method Execution (Execução de método) do método GET, escolha Method Request (Solicitação de método), selecione
AWS_IAM
para Authorization (Autorização), expanda a seção URL Query String Parameters (Parâmetros de string de consulta da URL) e escolha Add query string (Adicionar string de consulta) para criar dois parâmetros de string de consulta denominadostype
epage
. Escolha o ícone de marca de seleção para salvar todos os parâmetros de string de consulta conforme você os adiciona.O cliente agora pode fornecer um tipo de animal de estimação e um número de página como parâmetros de string de consulta ao enviar uma solicitação. Esses parâmetros de entrada devem ser mapeados para parâmetros da sequência de consulta da integração para encaminhar os valores de entrada para nosso site PetStore no backend. Como o método usa
AWS_IAM
, você deve assinar a solicitação para invocá-lo. -
Na página Integration Request (Solicitação de integração) do método, expanda a seção URL Query String Parameters (Parâmetros de string de consulta da URL). Por padrão, os parâmetros da string de consulta da solicitação de método são mapeados para os parâmetros da string de consulta da solicitação de integração que possuem nomes semelhantes. Esse mapeamento padrão funciona para a nossa API de demonstração. Vamos deixá-los sem alterações. Para mapear um parâmetro de solicitação de método diferente para o parâmetro de solicitação de integração correspondente, escolha o ícone de lápis do parâmetro para editar a expressão de mapeamento, mostrada na coluna Mapped from (Mapeado de). Para mapear um parâmetro de solicitação de método para um parâmetro de solicitação de integração diferente, primeiro escolha o ícone de exclusão para remover o parâmetro de solicitação de integração existente e depois escolha Add query string (Adicionar string de consulta) para especificar um novo nome e a expressão desejada para o mapeamento de parâmetro de solicitação de método.
Isso conclui a construção da API de demonstração simples. É hora de testar essa API.
-
Para testar a API usando o console do API Gateway, escolha Test (Testar) no painel Method Execution (Execução de método) para o método
GET /pets
. No painel Method Test (Teste de método), digiteDog
e2
para as strings de consulta type (tipo) e page (página), respectivamente, e escolha Test (Testar).O resultado é mostrado da seguinte forma. (Talvez você precise rolar para baixo para ver o resultado do teste.)
Agora que o teste foi bem-sucedido, podemos implantar a API para torná-la disponível publicamente.
-
Para implantar a API, selecione-a e depois escolha Deploy API (Implantar API) no menu suspenso Actions (Ações).
Na caixa de diálogo Deploy API (Implantar API), escolha um estágio (ou
[New Stage]
para a primeira implantação da API), insira um nome (por exemplo, "test", "prod", "dev" etc.) no campo de entrada Stage name (Nome do estágio), forneça opcionalmente uma descrição em Stage description (Descrição do estágio) e/ou Deployment description (Descrição da implantação) e, em seguida, escolha Deploy (Implantar).Uma vez implantada, você pode obter as URLs de invocação (Invoke URL (Invocar URL)) dos endpoints da API.
Se o método GET oferecesse suporte para acesso aberto (se o tipo de autorização do método estivesse definido como
NONE
), você poderia clicar duas vezes no link Invoke URL (Invocar URL) para invocar esse método em seu navegador padrão. Se necessário, você também poderia anexar parâmetros de string de consulta necessários à URL de invocação. Com o tipo de autorizaçãoAWS_IAM
descrito aqui, você deve assinar a solicitação com um ID de chave de acesso e a chave secreta correspondente de um usuário do IAM da sua conta da AWS. Para fazer isso, você deve usar um cliente compatível com os protocolos Signature Version 4 (SigV4). Um exemplo desse cliente é um aplicativo que usa um dos SDKs da AWS ou o aplicativo Postmanou comandos cURL. Para chamar um método POST, PUT ou PATCH que aceitam uma carga, você também precisa usar esse cliente para lidar com a carga. Para invocar esse método de API no Postman, anexe os parâmetros da sequência de consulta à URL de invocação de método específica ao estágio (conforme mostra a imagem anterior) para criar a URL completa de solicitação de método:
https://
api-id
.execute-api.region
.amazonaws.com/test/pets?type=Dog&page=2Especifique essa URL na barra de endereços do navegador. Escolha GET como o verbo HTTP. Selecione AWS Signature (Assinatura da AWS) para a opção Type (Tipo) na guia Authorization (Autorização) e, então, especifique as seguintes propriedades necessárias antes de enviar a solicitação:
-
Em AccessKey, digite a chave de acesso da AWS do autor da chamada, provisionada pelo IAM da AWS.
-
Para SecretKey, digite a chave secreta da AWS do autor da chamada, provisionada pelo IAM da AWS quando a chave de acesso foi inicialmente criada.
-
Em Região da AWS, digite a Região da AWS de hospedagem de APIs, conforme especificado na URL de invocação.
-
Em Service Name (Nome do serviço), digite
execute-api
, para o serviço de execução do API Gateway.
Se você usar um SDK para criar um cliente, poderá chamar os métodos expostos pelo SDK para assinar a solicitação. Para obter detalhes da implementação, consulte o SDK da AWS
de sua escolha. nota Quando alterações são feitas na sua API, você deve reimplantá-la para disponibilizar os recursos novos ou atualizados antes de invocar novamente a URL da solicitação.
-
Mapear parâmetros de solicitação para uma API do API Gateway
Nesta demonstração, descrevemos como mapear parâmetros de solicitação de método para os parâmetros de solicitação de integração correspondentes de uma API do API Gateway. Criamos uma API demonstrativa com integração HTTP personalizada e a utilizamos para demonstrar como usar o API Gateway para mapear um parâmetro de solicitação de método ao parâmetro de solicitação de integração correspondente. Em seguida, acessamos o seguinte endpoint HTTP de acesso público:
http://petstore-demo-endpoint.execute-api.com/petstore/pets
Se você copiar o URL acima, colá-lo na barra de endereços de um navegador da web e pressionar Enter
ou Return
, obterá o seguinte corpo de resposta formatado em JSON:
[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]
O endpoint anterior pode usar dois parâmetros de consulta: type
e page
. Por exemplo, altere o URL para o seguinte:
http://petstore-demo-endpoint.execute-api.com/petstore/pets?type=cat&page=2
Você receberá a seguinte carga de resposta em formato JSON, exibindo a página 2 apenas dos gatos:
[ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]
Esse endpoint também oferece suporte ao uso de um ID de item, expresso por um parâmetro de caminho de URL. Por exemplo, navegue até o seguinte:
http://petstore-demo-endpoint.execute-api.com/petstore/pets/1
As seguintes informações em formato JSON sobre o item com um ID de 1 são exibidas:
{ "id": 1, "type": "dog", "price": 249.99 }
Além de oferecer suporte a operações GET, esse endpoint usa solicitações POST com uma carga. Por exemplo, use o Postman
http://petstore-demo-endpoint.execute-api.com/petstore/pets
inclua o cabeçalho Content-type: application/json
e o seguinte corpo de solicitação:
{ "type": "dog", "price": 249.99 }
Você receberá o seguinte objeto JSON no corpo da resposta:
{ "pet": { "type": "dog", "price": 249.99 }, "message": "success" }
Agora, expomos estes e outros recursos com a criação de uma API do API Gateway com a integração HTTP personalizada desse site PetStore. As tarefas incluem o seguinte:
-
Criar uma API com um recurso de
https://
atuando como um proxy para o endpoint HTTP demy-api-id
.execute-api.region-id
.amazonaws.com/test
/petstorewalkthrough/petshttp://petstore-demo-endpoint.execute-api.com/petstore/pets
. -
Permitir que a API aceite dois parâmetros de consulta de solicitação de método de
petType
epetsPage
, mapeá-los para os parâmetros de consultatype
epage
da solicitação de integração, respectivamente, e transmitir a solicitação ao endpoint HTTP. -
Oferecer suporte a um parâmetro de caminho de
{petId}
na URL da solicitação de método da API para especificar um ID de item, mapeá-lo para o parâmetro de caminho{id}
na URL da solicitação de integração e enviar a solicitação ao endpoint HTTP. -
Permitir que a solicitação de método aceite a carga JSON do formato definido pelo site de backend e passe a carga sem modificações por meio da solicitação de integração para o endpoint HTTP de backend.
Tópicos
Preste atenção à formatação de maiúsculas e minúsculas usada nas etapas deste passo-a-passo. Digitar uma letra minúscula em vez de uma maiúscula (ou vice-versa) pode causar erros mais adiante no processo.
Prerequisites
Antes de iniciar este passo-a-passo, você deve fazer o seguinte:
-
Conclua as etapas em Pré-requisitos para começar a usar o API Gateway, incluindo a atribuição da permissão de acesso ao API Gateway para o usuário do IAM.
-
Siga pelo menos as etapas em Tutorial: Criar uma API REST com integração não proxy HTTP para criar uma nova API denominada
MyDemoAPI
no console do API Gateway.
Etapa 1: Criar recursos
Nesta etapa, você cria três recursos que permitem que a API interaja com o endpoint HTTP.
Para criar o primeiro recurso
-
No painel Resources (Recursos), selecione a raiz do recurso, representada por uma única barra (
/
) e, em seguida, escolha Create Resource (Criar recurso) no menu suspenso Actions (Ações). -
Em Resource Name (Nome do recurso), digite
petstorewalkthrough
. -
Em Resource Path (Caminho do recurso), aceite o padrão /petstorewalkthrough e, depois, escolha Create Resource (Criar recurso).
Para criar o segundo recurso
-
No painel Resources (Recursos), escolha /petstorewalkthrough e, em seguida, Create Resource (Criar recurso).
-
Em Resource Name (Nome do recurso), digite
pets
. -
Em Resource Path (Caminho do recurso), aceite o padrão /petstorewalkthrough/pets e, depois, escolha Create Resource (Criar recurso).
Para criar o terceiro recurso
-
No painel Resources (Recursos), escolha /petstorewalkthrough/pets e, depois, escolha Create Resource (Criar recurso).
-
Em Resource Name (Nome do recurso), digite
petId
. Isso é mapeado para o ID do item no endpoint HTTP. -
Em Resource Path (Caminho do recurso), substitua petid por
{petId}
. Use chaves ({ }
)petId
para que /petstorewalkthrough/pets/ {petId} seja exibido e, depois, escolha Create Resource (Criar recurso).Isso é mapeado para
/petstore/pets/
no endpoint HTTP.my-item-id
Etapa 2: Criar e testar métodos
Nesta etapa, você integra os métodos aos endpoints HTTP de backend, mapeia os parâmetros de solicitação do método GET para os parâmetros de solicitação de integração correspondentes e testa os métodos.
Para configurar e testar o primeiro método GET
Este procedimento demonstra o seguinte:
-
Crie e integre a solicitação de método de
GET /petstorewalkthrough/pets
com a solicitação de integração deGET http://petstore-demo-endpoint.execute-api.com/petstore/pets
. -
Mapeie os parâmetros de consulta da solicitação de método de
petType
epetsPage
para os parâmetros de string de consulta da solicitação de integração detype
epage
, respectivamente.
-
No painel Resources (Recursos), escolha /petstorewalkthrough/pets, e Create Method (Criar método) no menu Actions (Ações) e, em seguida, escolha GET em /pets na lista suspensa de nomes de métodos.
-
No painel /petstorewalkthrough/pets - GET - Setup, escolha HTTP para Integration type (Tipo de integração) e escolha GET para HTTP method (Método HTTP).
-
Em Endpoint URL (URL do endpoint), digite
http://petstore-demo-endpoint.execute-api.com/petstore/pets
. -
Escolha Save (Salvar).
-
No painel Method Execution (Execução de método), escolha Method Request (Solicitação de método) e escolha a seta ao lado de URL Query String Parameters (Parâmetros de string de consulta de URL).
-
Escolha Add query string (Adicionar string de consulta).
-
Para Name (Nome), digite
petType
.Isso especifica o parâmetro de consulta
petType
na solicitação de método da API. -
Escolha o ícone de marca de seleção para terminar de criar o parâmetro de string de consulta da URL da solicitação de método.
-
Escolha Add query string (Adicionar string de consulta) novamente.
-
Para Name (Nome), digite
petsPage
.Isso especifica o parâmetro de consulta
petsPage
na solicitação de método da API. -
Escolha o ícone de marca de seleção para terminar de criar o parâmetro de string de consulta da URL da solicitação de método.
-
Escolha Method Execution (Execução de método), escolha Integration Request (Solicitação de integração) e escolha a seta ao lado de URL Query String Parameters (Parâmetros de string de consulta de URL).
-
Exclua a entrada
petType
mapeada demethod.request.querystring.petType
e a entradapetsPage
mapeada demethod.request.querystring.petsPage
. Realize esta etapa pois o endpoint exige parâmetros de string de consulta com os nomestype
epage
para o URL da solicitação, em vez dos valores padrão. -
Escolha Add query string (Adicionar string de consulta).
-
Para Name (Nome), digite
type
. Isso cria o parâmetro de string de consulta necessário para a URL da solicitação de integração. -
Em Mapped from (Mapeado de), digite
method.request.querystring.petType
.Isso mapeia o parâmetro de consulta
petType
da solicitação de método para o parâmetro de consultatype
da solicitação de integração. -
Escolha o ícone de marca de seleção para terminar de criar o parâmetro de string de consulta da URL da solicitação de integração.
-
Escolha Add query string (Adicionar string de consulta) novamente.
-
Para Name (Nome), digite
page
. Isso cria o parâmetro de string de consulta necessário para a URL da solicitação de integração. -
Em Mapped from (Mapeado de), digite
method.request.querystring.petsPage
.Isso mapeia o parâmetro de consulta
petsPage
da solicitação de método para o parâmetro de consultapage
da solicitação de integração. -
Escolha o ícone de marca de seleção para terminar de criar o parâmetro de string de consulta da URL da solicitação de integração.
-
Escolha Method Execution (Execução de método). Na caixa Client (Cliente), escolha TEST. Na área Query Strings (Strings de consulta), para petType, digite
cat
. Para petsPage, digite2
. -
Escolha Test (Testar). Se bem-sucedido, Response Body (Corpo da solicitação) exibe o seguinte:
[ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]
Para configurar e testar o segundo método GET
Este procedimento demonstra o seguinte:
-
Crie e integre a solicitação de método de
GET /petstorewalkthrough/pets/{petId}
com a solicitação de integração deGET http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}
. -
Mapeie os parâmetros de caminho da solicitação de método de
petId
para os parâmetros de caminho da solicitação de integração deid
.
-
Na lista Resources (Recursos), escolha /petstorewalkthrough/pets/{petId}, Create Method (Criar método) no menu suspenso Actions (Ações) e, em seguida, escolha GET como o verbo HTTP para o método.
-
No painel Setup (Configuração), escolha HTTP para Integration type (Tipo de integração) e escolha GET para HTTP method (Método HTTP).
-
Em Endpoint URL (URL do endpoint), digite
http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}
. -
Escolha Save (Salvar).
-
No painel Method Execution (Execução de método), escolha Integration Request (Solicitação de integração) e escolha a seta próxima a URL Path Parameters (Parâmetros de caminho de URL).
-
Escolha Add path (Adicionar caminho).
-
Para Name (Nome), digite
id
. -
Em Mapped from (Mapeado de), digite
method.request.path.petId
.Isso mapeia o parâmetro de caminho da solicitação de método de
petId
para o parâmetro de caminho da solicitação de integração deid
. -
Escolha o ícone de marca de seleção para terminar de criar o parâmetro de caminho da URL.
-
Escolha Method Execution (Execução de método) e, na caixa Client (Cliente), escolha TEST. Na área Path (Caminho), em petId, digite
1
. -
Escolha Test (Testar). Se bem-sucedido, Response Body (Corpo da solicitação) exibe o seguinte:
{ "id": 1, "type": "dog", "price": 249.99 }
Para configurar e testar o método POST
Este procedimento demonstra o seguinte:
-
Crie e integre a solicitação de método de
POST /petstorewalkthrough/pets
com a solicitação de integração dePOST http://petstore-demo-endpoint.execute-api.com/petstore/pets
. -
Transmita a carga JSON da solicitação de método para a carga da solicitação de integração sem modificação.
-
No painel Resources (Recursos), escolha /petstorewalkthrough/pets, Create Method (Criar método) no menu suspenso Actions (Ações) e, em seguida, escolha POST como o verbo HTTP para o método.
-
No painel Setup (Configuração), escolha HTTP para Integration type (Tipo de integração) e escolha POST para HTTP method (Método HTTP).
-
Em Endpoint URL (URL do endpoint), digite
http://petstore-demo-endpoint.execute-api.com/petstore/pets
. -
Escolha Save (Salvar).
-
No painel Method Execution (Execução de método), na caixa Client (Cliente), escolha TEST. Expanda Request Body (Corpo da solicitação) e digite o seguinte:
{ "type": "dog", "price": 249.99 }
-
Escolha Test (Testar). Se bem-sucedido, Response Body (Corpo da solicitação) exibe o seguinte:
{ "pet": { "type": "dog", "price": 249.99 }, "message": "success" }
Etapa 3: implantar a API
Nesta etapa, você implantará a API para poder começar a chamá-la fora do console do API Gateway.
Para implantar a API
-
No painel Resources (Recursos), escolha Deploy API (Implantar API).
-
Em Deployment stage (Estágio de implantação), selecione
.test
nota A entrada deve ser texto codificado UTF-8 (ou seja, não localizado).
-
For Deployment description (Descrição da implantação), digite
Calling HTTP endpoint walkthrough
. -
Escolha Deploy (Implantar).
Etapa 4: testar a API
Nesta etapa, você sairá do console do API Gateway e usará sua API para acessar o endpoint HTTP.
-
No painel Stage Editor (Editor de estágio), ao lado de Invoke URL (Invocar URL), copie a URL na área de transferência. A aparência será semelhante à seguinte:
https://
my-api-id
.execute-api.region-id
.amazonaws.com/test
-
Cole esta URL na caixa de endereço de uma nova guia do navegador.
-
Acrescente
/petstorewalkthrough/pets
para obter a seguinte aparência:https://
my-api-id
.execute-api.region-id
.amazonaws.com/test
/petstorewalkthrough/petsNavegue até a URL. As seguintes informações devem ser exibidas:
[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]
-
Depois de
petstorewalkthrough/pets
, digite?petType=cat&petsPage=2
para que fique semelhante a isto:https://
my-api-id
.execute-api.region-id
.amazonaws.com/test
/petstorewalkthrough/pets?petType=cat&petsPage=2 -
Navegue até a URL. As seguintes informações devem ser exibidas:
[ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]
-
Depois de
petstorewalkthrough/pets
, substitua?petType=cat&petsPage=2
por/1
para que fique semelhante a isto:https://
my-api-id
.execute-api.region-id
.amazonaws.com/test
/petstorewalkthrough/pets/1 -
Navegue até a URL. As seguintes informações devem ser exibidas:
{ "id": 1, "type": "dog", "price": 249.99 }
-
Usando uma ferramenta de proxy de depuração da Web ou a ferramenta de linha de comando cURL, envie uma solicitação de método POST à URL do procedimento anterior. Acrescente
/petstorewalkthrough/pets
para obter a seguinte aparência:https://
my-api-id
.execute-api.region-id
.amazonaws.com/test
/petstorewalkthrough/petsAnexe o seguinte cabeçalho:
Content-Type: application/json
Adicione o seguinte código ao corpo da solicitação:
{ "type": "dog", "price": 249.99 }
Por exemplo, se você usar a ferramenta de linha de comando cURL, execute um comando semelhante ao seguinte:
curl -H "Content-Type: application/json" -X POST -d "{\"type\": \"dog\",\"price\": 249.99}" https://
my-api-id
.execute-api.region-id
.amazonaws.com/test
/petstorewalkthrough/petsAs seguintes informações devem ser retornadas no corpo da resposta:
{ "pet": { "type": "dog", "price": 249.99 }, "message": "success" }
Você chegou ao final deste passo a passo.
Mapear carga da resposta
Nesta demonstração, mostraremos como usar modelos e modelos de mapeamento no API Gateway para transformar a saída de uma chamada de API de um esquema de dados para outro. Este passo-a-passo baseia-se nas instruções e nos conceitos em Conceitos básicos do API Gateway e Mapear parâmetros de solicitação para uma API do API Gateway. Se você ainda não completou esses tutoriais passo-a-passo, sugerimos que faça isso primeiro.
Esta demonstração usa o API Gateway para obter dados de exemplo de um endpoint HTTP publicamente acessível e de uma função do AWS Lambda criada por você. Tanto o endpoint HTTP quanto a função do Lambda retornam os mesmos dados demonstrativos:
[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]
Você usará modelos e modelos de mapeamento para transformar esses dados em um ou mais formatos de saída. No API Gateway, um módulo define o formato, também conhecido como o esquema ou forma, de alguns dados. No API Gateway, um modelo do mapeamento é usado para transformar alguns dados de um formato em outros. Para obter mais informações, consulte Trabalhar com modelos e modelos de mapeamento.
O primeiro modelo e o modelo de mapeamento são usados para renomear id
como number
, type
como class
e price
como salesPrice
, da seguinte maneira:
[ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]
O segundo modelo e modelo de mapeamento são usados para combinar id
e type
em description
e para renomear price
como askingPrice
, da seguinte maneira:
[ { "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 terceiro modelo e modelo de mapeamento são usados para combinar id
, type
e price
em um conjunto de listings
, da seguinte maneira:
{ "listings": [ "Item 1 is a dog. The asking price is 249.99.", "Item 2 is a cat. The asking price is 124.99.", "Item 3 is a fish. The asking price is 0.99." ] }
Tópicos
Etapa 1: Criar modelos
Nesta etapa, você cria quatro modelos. Os três primeiros modelos representam os formatos de saída de dados para uso com o endpoint HTTP e a função do Lambda. O último modelo representa o esquema de entrada de dados para uso com a função do Lambda.
Para criar o primeiro modelo de saída
-
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Se MyDemoAPI for exibido, escolha Models (Modelos).
-
Escolha Create (Criar).
-
Em Model name (Nome do modelo), digite
PetsModelNoFlatten
. -
Em Content type (Tipo de conteúdo)
application/json
, digite . -
Em Model description (Descrição do modelo), digite
Changes id to number, type to class, and price to salesPrice
. -
Em Model schema (Esquema do modelo), digite a seguinte definição compatível com o Esquema JSON:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelNoFlatten", "type": "array", "items": { "type": "object", "properties": { "number": { "type": "integer" }, "class": { "type": "string" }, "salesPrice": { "type": "number" } } } }
-
Escolha Create model (Criar modelo).
Para criar o segundo modelo de saída
-
Escolha Create (Criar).
-
Em Model name (Nome do modelo), digite
PetsModelFlattenSome
. -
Em Content type (Tipo de conteúdo)
application/json
, digite . -
Em Model description (Descrição do modelo), digite
Combines id and type into description, and changes price to askingPrice
. -
Em Model schema (Esquema do modelo), digite o seguinte:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelFlattenSome", "type": "array", "items": { "type": "object", "properties": { "description": { "type": "string" }, "askingPrice": { "type": "number" } } } }
-
Escolha Create model (Criar modelo).
Para criar o terceiro modelo de saída
-
Escolha Create (Criar).
-
Em Model name (Nome do modelo), digite
PetsModelFlattenAll
. -
Em Content type (Tipo de conteúdo)
application/json
, digite . -
Em Model description (Descrição do modelo), digite
Combines id, type, and price into a set of listings
. -
Em Model schema (Esquema do modelo), digite o seguinte:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelFlattenAll", "type": "object", "properties": { "listings": { "type": "array", "items": { "type": "string" } } } }
-
Escolha Create model (Criar modelo).
Para criar o modelo de entrada
-
Escolha Create (Criar).
-
Em Model name (Nome do modelo), digite
PetsLambdaModel
. -
Em Content type (Tipo de conteúdo)
application/json
, digite . -
Em Model description (Descrição do modelo), digite
GetPetsInfo model
. -
Em Model schema (Esquema do modelo), digite o seguinte:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsLambdaModel", "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer" }, "type": { "type": "string" }, "price": { "type": "number" } } } }
-
Escolha Create model (Criar modelo).
Etapa 2: Criar recursos
Nesta etapa, você cria quatro recursos. Os três primeiros recursos permitem que você obtenha os dados de exemplo do endpoint HTTP nos três formatos de saída. O último recurso permite que você obtenha os dados demonstrativos da função do Lambda no esquema de saída que combina id
e type
em description
e altera o nome de price
para askingPrice
.
Para criar o primeiro recurso
-
Na lista de links, escolha Resources (Recursos).
-
No painel Resources (Recursos), escolha /petstorewalkthrough e, em seguida, Create Resource (Criar recurso).
-
Em Resource Name (Nome do recurso), digite
NoFlatten
. -
Em Resource Path (Caminho do recurso), aceite o padrão de /petstorewalkthrough/noflatten e, depois, escolha Create Resource (Criar recurso).
Para criar o segundo recurso
-
No painel Resources (Recursos), escolha /petstorewalkthrough novamente e, em seguida, Create Resource (Criar recurso).
-
Em Resource Name (Nome do recurso), digite
FlattenSome
. -
Em Resource Path (Caminho do recurso), aceite o padrão de /petstorewalkthrough/flattensome e, depois, escolha Create Resource (Criar recurso).
Para criar o terceiro recurso
-
No painel Resources (Recursos), escolha /petstorewalkthrough novamente e, em seguida, Create Resource (Criar recurso).
-
Em Resource Name (Nome do recurso), digite
FlattenAll
. -
Em Resource Path (Caminho do recurso), aceite o padrão de /petstorewalkthrough/flattenall e, depois, escolha Create Resource (Criar recurso).
Para criar o quarto recurso
-
No painel Resources (Recursos), escolha /petstorewalkthrough novamente e, em seguida, Create Resource (Criar recurso).
-
Em Resource Name (Nome do recurso), digite
LambdaFlattenSome
. -
Em Resource Path (Caminho do recurso), aceite o padrão de /petstorewalkthrough/lambdaflattensome e, depois, escolha Create Resource (Criar recurso).
Etapa 3: Criar métodos GET
Nesta etapa, você cria um método GET para cada um dos recursos que criou na etapa anterior.
Para criar o primeiro método GET
-
Na lista Resources (Recursos), escolha /petstorewalkthrough/flattenall novamente e, depois, Create Method (Criar método).
-
Na lista suspensa, escolha GET e, em seguida, escolha o ícone de marca de seleção para salvar sua opção.
-
No painel de configuração, selecione HTTP para o Integration type (Tipo de integração) e GET para HTTP method (Método HTTP), digite
http://petstore-demo-endpoint.execute-api.com/petstore/pets
em Endpoint URL (URL do endpoint) e escolha Save (Salvar).
Para criar o segundo método GET
-
Na lista Resources (Recursos), escolha /petstorewalkthrough/lambdaflattensome e, depois, Create Method (Criar método).
-
Na lista suspensa, escolha GET e, em seguida, escolha a marca de seleção para salvar sua opção.
-
No painel de configuração, escolha Lambda Function (Função do Lambda) para o Integration type (Tipo de integração), escolha a região em que a função GetPetsInfo do Lambda foi criada na lista suspensa Lambda Region (Região do Lambda), escolha
GetPetsInfo
em Lambda Function (Função do Lambda) e selecione Save (Salvar). Escolha OK quando solicitado a adicionar permissão para a função do Lambda.
Para criar o terceiro método GET
-
Na lista Resources (Recursos), escolha /petstorewalkthrough/flattensome e, depois, Create Method (Criar método).
-
Na lista suspensa, escolha GET e, em seguida, escolha o ícone de marca de seleção para salvar sua opção.
-
No painel de configuração, selecione HTTP para o Integration type (Tipo de integração) e GET para HTTP method (Método HTTP), digite
http://petstore-demo-endpoint.execute-api.com/petstore/pets
em Endpoint URL (URL do endpoint) e, em seguida, escolha Save (Salvar).
Para criar o quarto método GET
-
Na lista Resources (Recursos), escolha /petstorewalkthrough/noflatten e, depois, Actions (Ações), Create Method (Criar método).
-
Na lista suspensa, escolha GET e, em seguida, escolha o ícone de marca de seleção para salvar sua opção.
-
No painel de configuração, selecione HTTP para o Integration type (Tipo de integração) e GET para HTTP method (Método HTTP), digite
http://petstore-demo-endpoint.execute-api.com/petstore/pets
em Endpoint URL (URL do endpoint) e, em seguida, escolha Save (Salvar).
Etapa 4: Criar uma função do Lambda
Nesta etapa, você criará uma função do Lambda que retornará os dados demonstrativos.
Como criar a função do Lambda
Abra o console do AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Execute um destes procedimentos:
-
Se uma página de boas-vindas for exibida, escolha Get Started Now (Comece a usar agora).
-
Se a página Lambda: Function list (Lambda: lista de funções) for exibida, escolha Create a Lambda function (Criar uma função do Lambda).
-
-
Para Name (Nome), digite
GetPetsInfo
. -
Em Description (Descrição), digite
Gets information about pets
. -
Em Code template (Modelo de código), escolha None (Nenhum).
-
Digite o seguinte código:
console.log('Loading event'); exports.handler = function(event, context, callback) { callback(null, [{"id": 1, "type": "dog", "price": 249.99}, {"id": 2, "type": "cat", "price": 124.99}, {"id": 3, "type": "fish", "price": 0.99}]); // SUCCESS with message };
dica No código anterior, escrito em Node.js, o
console.log
grava informações em um Amazon CloudWatch log. Oevent
contém a entrada da função do Lambda. Ocontext
contém o contexto de chamada. Ocallback
retorna o resultado. Para obter mais informações sobre como escrever o código da função do Lambda, consulte a seção “Modelo de programação” em AWS Lambda: Como funciona e as instruções de exemplo no Guia do desenvolvedor do AWS Lambda. -
Em Handler name (Nome do handler), deixe o padrão de
index.handler
. -
Em Role (Função), escolha a função de execução do Lambda, APIGatewayLambdaExecRole criada em Criar uma API REST do API Gateway com integração do Lambda.
-
Escolha Create Lambda function.
-
Na lista de funções, escolha GetPetsInfo para mostrar os detalhes da função.
-
Anote a região da AWS na qual você criou essa função. Você precisará disso mais tarde.
-
Na lista pop-up, escolha Edit or test function (Editar ou testar função).
-
Em Sample event (Evento de exemplo), substitua qualquer código exibido pelo seguinte:
{ }
dica As chaves vazias significam que não há valores de entrada para essa função do Lambda. Essa função simplesmente retorna o objeto JSON que contém as informações sobre animais de estimação, portanto, esses pares de valores-chave não são necessários aqui.
-
Escolha Invoke (Invocar). Execution result (Resultado da execução) mostra
[{"id":1,"type":"dog","price":249.99},{"id":2,"type":"cat","price":124.99},{"id":3,"type":"fish","price":0.99}]
, que também é gravado nos arquivos de log do CloudWatch Logs. -
Escolha Go to function list (Ir para a lista de funções).
Etapa 5: Configurar e testar os métodos
Nessa etapa, você configurará as respostas de método, as solicitações de integração e as respostas de integração para especificar os esquemas (ou modelos) de dados de entrada e saída para os métodos GET associados ao endpoint HTTP e à função do Lambda. Você também aprenderá a testar a chamada desses métodos usando o console do API Gateway.
Para configurar a integração para o primeiro método GET e testá-lo em seguida
-
Na árvore Resources (Recursos) da API, escolha GET no nó /petstorewalkthrough/flattenall.
-
No painel Method Execution (Execução de método), escolha Method Response (Resposta de método) e escolha a seta ao lado de 200.
-
Na área Response Models for 200 (Modelos de resposta para 200), para application/json, escolha o ícone de lápis para começar a configurar o modelo para a saída do método. Em Models (Modelos), escolha PetsModelFlattenAll e, depois, escolha o ícone de marca de seleção para salvar a configuração.
-
Escolha Method Execution (Execução de método), Integration Response (Resposta de integração) e escolha a seta ao lado de 200.
-
Expanda a seção Mapping Templates (Modelos de mapeamento) e selecione application/json (aplicação/json) em Content-Type (Tipo de conteúdo).
-
Em Generate template from model (Gerar modelo a partir do modelo), escolha PetsModelFlattenAll para exibir um modelo de mapeamento após o modelo
PetsModelFlattenAll
como um ponto de partida. -
Modifique o código do modelo de mapeamento da seguinte maneira:
#set($inputRoot = $input.path('$')) { "listings" : [ #foreach($elem in $inputRoot) "Item number $elem.id is a $elem.type. The asking price is $elem.price."#if($foreach.hasNext),#end #end ] }
-
Escolha Save (Salvar).
-
Escolha Method Execution (Execução de método) e na caixa Client (Cliente), escolha TEST e selecione Test (Testar). Se bem-sucedido, Response Body (Corpo da solicitação) exibe o seguinte:
{ "listings" : [ "Item number 1 is a dog. The asking price is 249.99.", "Item number 2 is a cat. The asking price is 124.99.", "Item number 3 is a fish. The asking price is 0.99." ] }
Para configurar a integração para o segundo método GET e testá-lo em seguida
-
Na árvore Resources (Recursos) da API, escolha GET no nó /petstorewalkthrough/lambdaflattensome .
-
Em Method Execution (Execução de método), selecione Method Response (Resposta de método). Em seguida, escolha a seta ao lado de 200 para expandir a seção.
-
Na área Response Models for 200 (Modelos de resposta para 200), escolha o ícone de lápis na linha para o tipo de conteúdo de aplicativo/json. Escolha PetsModelFlattenSome para Models (Modelos) e, depois, escolha o ícone de marca de seleção para salvar a escolha.
-
Volte para Method Execution (Execução de método). Escolha Integration Response (Resposta de integração) e, em seguida, selecione a seta ao lado de 200.
-
Na seção Mapping Templates (Modelos de mapeamento), selecione application/json (aplicação/json) em Content-Type (Tipo de conteúdo).
-
Em Generate template (Gerar modelo), escolha PetsModelFlattenSome para exibir o modelo de script de mapeamento para a saída desse método.
-
Modifique o código da seguinte maneira e escolha Save (Salvar):
#set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description" : "Item $elem.id is a $elem.type.", "askingPrice" : $elem.price }#if($foreach.hasNext),#end #end ]
-
Escolha Method Execution (Execução de método) e na caixa Client (Cliente), escolha TEST e selecione Test (Testar). Se bem-sucedido, Response Body (Corpo da solicitação) exibe o seguinte:
[ { "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 } ]
Para configurar a integração para o terceiro método GET e testá-lo em seguida
-
Na árvore Resources (Recursos) da API, escolha GET no nó /petstorewalkthrough/flattensome.
-
No painel Method Execution (Execução de ), selecione Method Response (Resposta de método).
-
Escolha a seta ao lado de 200.
-
Na área Response Models for 200 (Modelos de resposta para 200), para application/json, escolha o ícone de lápis. Em Models (Modelos), escolha PetsModelFlattenSome e, depois, escolha o ícone de marca de seleção para salvar a escolha.
-
Volte para Method Execution (Execução de método) e escolha Integration Response (Resposta de integração).
-
Escolha a seta ao lado de 200 para expandir a seção.
-
Expanda a área Mapping Templates (Modelos de mapeamento). Escolha application/json para Content-Type (Tipo de conteúdo). Em Generate template (Gerar modelo), escolha PetsModelFlattenSome para exibir um modelo de script de mapeamento para a saída desse método.
-
Modifique o código da seguinte maneira:
#set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description": "Item $elem.id is a $elem.type.", "askingPrice": $elem.price }#if($foreach.hasNext),#end #end ]
-
Escolha Save (Salvar).
-
Volte para Method Execution (Execução de método) e escolha TEST na caixa Client (Cliente). Em seguida, escolha Test (Testar). Se bem-sucedido, Response Body (Corpo da solicitação) exibe o seguinte:
[ { "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 } ]
Para configurar a integração para o quarto método GET e testá-lo em seguida
-
Na árvore Resources (Recursos) da API, escolha GET no nó /petstorewalkthrough/noflatten.
-
No painel Method Execution (Execução de método), escolha Method Response (Resposta de método) e depois expanda a seção 200.
-
Na área Response Models for 200 (Modelos de resposta para 200), para application/json, escolha o ícone de lápis para atualizar o modelo de resposta para esse método.
-
Escolha PetsModelNoFlatten como o modelo para o tipo de conteúdo de application/json e escolha o ícone de marca de verificação para salvar a escolha.
-
Escolha Method Execution (Execução de método), Integration Response (Resposta de integração) e escolha a seta ao lado de 200 para expandir a seção.
-
Expanda a seção Mapping Templates (Modelos de mapeamento). Escolha application/json para Content-Type (Tipo de conteúdo). Em Generate templates (Gerar modelos), escolha PetsModelNoFlatten para exibir um modelo de script de mapeamento para a saída desse método.
-
Modifique o código da seguinte maneira:
#set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "number": $elem.id, "class": "$elem.type", "salesPrice": $elem.price }#if($foreach.hasNext),#end #end ]
-
Escolha Save (Salvar).
-
Volte para Method Execution (Execução de método) e, na caixa Client (Cliente), escolha TEST e selecione Test (Testar). Se bem-sucedido, Response Body (Corpo da solicitação) exibe o seguinte:
[ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]
Etapa 6: implantar a API
Nesta etapa, você implantará a API para poder começar a chamá-la fora do console do API Gateway.
Para implantar a API
-
No painel Resources (Recursos), escolha Deploy API (Implantar API).
-
Em Deployment stage (Estágio de implantação), selecione
test
. -
For Deployment description (Descrição da implantação), digite
Using models and mapping templates walkthrough
. -
Escolha Deploy (Implantar).
Etapa 7: testar a API
Nesta etapa, você sairá do console do API Gateway para interagir com o endpoint HTTP e com a função do Lambda.
-
No painel Stage Editor (Editor de estágio), ao lado de Invoke URL (Invocar URL), copie a URL na área de transferência. A aparência será semelhante à seguinte:
https://
my-api-id
.execute-api.region-id
.amazonaws.com/test
-
Cole esta URL na caixa de endereço de uma nova guia do navegador.
-
Acrescente
/petstorewalkthrough/noflatten
para obter a seguinte aparência:https://
my-api-id
.execute-api.region-id
.amazonaws.com/test
/petstorewalkthrough/noflattenNavegue até a URL. As seguintes informações devem ser exibidas:
[ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]
-
Depois de
petstorewalkthrough/
, substituanoflatten
porflattensome
. -
Navegue até a URL. As seguintes informações devem ser exibidas:
[ { "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 } ]
-
Depois de
petstorewalkthrough/
, substituaflattensome
porflattenall
. -
Navegue até a URL. As seguintes informações devem ser exibidas:
{ "listings" : [ "Item number 1 is a dog. The asking price is 249.99.", "Item number 2 is a cat. The asking price is 124.99.", "Item number 3 is a fish. The asking price is 0.99." ] }
-
Depois de
petstorewalkthrough/
, substituaflattenall
porlambdaflattensome
. -
Navegue até a URL. As seguintes informações devem ser exibidas:
[ { "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 } ]
Etapa 8: Limpar
Se você não precisar mais da função do Lambda criada para esta demonstração, poderá excluí-la agora. Você também pode excluir os recursos do IAM que o acompanham.
Se você excluir uma função do Lambda da qual dependem as suas APIs, elas deixarão de funcionar. A exclusão de uma função do Lambda não pode ser desfeita. Se quiser usar a função do Lambda novamente, você deverá recriar essa função.
Se você excluir um recurso do IAM do qual depende uma função do Lambda, ela deixará de funcionar, juntamente com as APIs que dependem dela. A exclusão de um recurso do IAM não pode ser desfeita. Se quiser usar o recurso do IAM novamente, você deverá recriá-lo. Se você planeja continuar a testar os recursos criados para esta e outras demonstrações, não exclua a função de invocação do Lambda nem a função de execução do Lambda.
Como excluir a função do Lambda
-
Faça login no AWS Management Console e abra o console AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Na página Lambda: Function list (Lambda: lista de funções), escolha o botão ao lado de GetPetsInfo e, depois, escolha Actions (Ações), Delete (Excluir). Quando solicitado, escolha Delete (Excluir) novamente.
Como excluir os recursos do IAM associados
-
Abra o console do IAM em https://console.aws.amazon.com/iam/
. -
Na área Details (Detalhes), escolha Roles (Funções).
-
Selecione APIGatewayLambdaExecRole e, depois, escolha Role Actions (Ações da função), Delete Role (Excluir função). Quando solicitado, escolha Yes, Delete (Sim, excluir).
-
Na área Details (Detalhes), escolha Policies (Políticas).
-
Selecione APIGatewayLambdaExecPolicy e, depois, escolha Policy Actions (Ações da política), Delete (Excluir). Quando solicitado, escolha Delete (Excluir).
Você chegou ao final deste passo a passo.