Configurar uma API otimizada para bordas usando o AWS SDK para Node.js - Amazon API Gateway

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar uma API otimizada para bordas usando o AWS SDK para Node.js

Como ilustração, usamos o AWS SDK for Node.js para descrever como você pode usar um AWS SDK para criar uma API do API Gateway. Para obter mais informações sobre como usar um AWS SDK, incluindo como configurar o ambiente de desenvolvimento, consulte AWS SDKs.

A configuração de uma API usando o AWS SDK para Node.js envolve chamar as putIntegrationResponse funções createResource ou createRestApi getResources putMethodputMethodResponse,putIntegration,, e.

Os procedimentos a seguir orientam você pelas etapas essenciais para usar esses comandos do SDK para configurar uma PetStore API simples que ofereça suporte aos GET /pets/{petId} métodos GET /pets e.

Para configurar uma PetStore API simples usando o AWS SDK para Node.js
  1. Instancie o SDK:

    var AWS = require('aws-sdk'); AWS.config.region = 'us-west-2'; var apig = new AWS.APIGateway({apiVersion: '2015/07/09'});
  2. Chame a função createRestApi para configurar a entidade RestApi.

    apig.createRestApi({ name: "Simple PetStore (node.js SDK)", binaryMediaTypes: [ '*' ], description: "Demo API created using the AWS SDK for node.js", version: "0.00.001" }, function(err, data){ if (!err) { console.log(data); } else { console.log('Create API failed:\n', err); } });

    A função retorna uma saída semelhante ao seguinte resultado:

    { id: 'iuo308uaq7', name: 'PetStore (node.js SDK)', description: 'Demo API created using the AWS SDK for node.js', createdDate: 2017-09-05T19:32:35.000Z, version: '0.00.001', binaryMediaTypes: [ '*' ] }

    O identificador da API resultante é iuo308uaq7. Você precisa fornecer isso para continuar a configuração da API.

  3. Chame a função getResources para recuperar o identificador de recurso raiz da RestApi.

    apig.getResources({ restApiId: 'iuo308uaq7' }, function(err, data){ if (!err) { console.log(data); } else { console.log('Get the root resource failed:\n', err); } })

    Essa função retorna uma saída semelhante ao seguinte resultado:

    { "items": [ { "path": "/", "id": "s4fb0trnk0" } ] }

    O identificador de recurso raiz é s4fb0trnk0. Esse é o ponto de partida para construir a árvore de recursos de API, o que você verá em seguida.

  4. Chame a função createResource para configurar o recurso /pets para a API, especificando o identificador de recurso raiz (s4fb0trnk0) na propriedade parentId.

    apig.createResource({ restApiId: 'iuo308uaq7', parentId: 's4fb0trnk0', pathPart: 'pets' }, function(err, data){ if (!err) { console.log(data); } else { console.log("The '/pets' resource setup failed:\n", err); } })

    O resultado bem-sucedido é o seguinte:

    { "path": "/pets", "pathPart": "pets", "id": "8sxa2j", "parentId": "s4fb0trnk0'" }

    Para configurar o recurso /pets/{petId}, chame a seguinte função createResource, especificando o recurso /pets recém-criado (8sxa2j) na propriedade parentId.

    apig.createResource({ restApiId: 'iuo308uaq7', parentId: '8sxa2j', pathPart: '{petId}' }, function(err, data){ if (!err) { console.log(data); } else { console.log("The '/pets/{petId}' resource setup failed:\n", err); } })

    O resultado bem-sucedido retorna o valor de id recém-criado:

    { "path": "/pets/{petId}", "pathPart": "{petId}", "id": "au5df2", "parentId": "8sxa2j" }

    Durante esse procedimento, consulte o recurso /pets, especificando seu ID de recurso de 8sxa2j e o recurso /pets/{petId} especificando seu ID de recurso de au5df2.

  5. Chame a função putMethod para adicionar o método HTTP GET no recurso /pets (8sxa2j). Isso configura o GET /pets Method com acesso aberto.

    apig.putMethod({ restApiId: 'iuo308uaq7', resourceId: '8sxa2j', httpMethod: 'GET', authorizationType: 'NONE' }, function(err, data){ if (!err) { console.log(data); } else { console.log("The 'GET /pets' method setup failed:\n", err); } })

    Essa função retorna uma saída semelhante ao seguinte resultado:

    { "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE" }

    Para adicionar o método HTTP GET ao recurso /pets/{petId} (au5df2), que configura o método de API de GET /pets/{petId} com acesso aberto, chame a função putMethod da seguinte forma.

    apig.putMethod({ restApiId: 'iuo308uaq7', resourceId: 'au5df2', httpMethod: 'GET', authorizationType: 'NONE', requestParameters: { "method.request.path.petId" : true } }, function(err, data){ if (!err) { console.log(data); } else { console.log("The 'GET /pets/{petId}' method setup failed:\n", err); } })

    Essa função retorna uma saída semelhante ao seguinte resultado:

    { "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE", "requestParameters": { "method.request.path.petId": true } }

    Você precisa definir a propriedade requestParameters como mostrado no exemplo anterior para mapear e passar o valor petId fornecido pelo cliente para o backend.

  6. Chame a função putMethodResponse para configurar uma resposta para o método GET /pets.

    apig.putMethodResponse({ restApiId: 'iuo308uaq7', resourceId: "8sxa2j", httpMethod: 'GET', statusCode: '200' }, function(err, data){ if (!err) { console.log(data); } else { console.log("Set up the 200 OK response for the 'GET /pets' method failed:\n", err); } })

    Essa função retorna uma saída semelhante ao seguinte resultado:

    { "statusCode": "200" }

    Para definir a resposta 200 OK do método GET /pets/{petId}, chame a função putMethodResponse especificando o identificador de recurso /pets/{petId} (au5df2) na propriedade resourceId.

    apig.putMethodResponse({ restApiId: 'iuo308uaq7', resourceId: "au5df2", httpMethod: 'GET', statusCode: '200' }, function(err, data){ if (!err) { console.log(data); } else { console.log("Set up the 200 OK response for the 'GET /pets/{petId}' method failed:\n", err); } })
  7. Chame a função putIntegration para configurar a Integration com um endpoint HTTP especificado para o método GET /pets, fornecendo o identificador de recurso /pets (8sxa2j) na propriedade parentId.

    apig.putIntegration({ restApiId: 'iuo308uaq7', resourceId: '8sxa2j', httpMethod: 'GET', type: 'HTTP', integrationHttpMethod: 'GET', uri: 'http://perstore-demo-endpoint.execute-api.com/pets' }, function(err, data){ if (!err) { console.log(data); } else { console.log("Set up the integration of the 'GET /' method of the API failed:\n", err); } })

    Essa função retorna uma saída semelhante à seguinte:

    { "httpMethod": "GET", "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "type": "HTTP", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets", "cacheNamespace": "8sxa2j" }

    Para configurar a integração do método GET /pets/{petId} com o endpoint HTTP de http://perstore-demo-endpoint.execute-api.com/pets/{id} do backend, chame a seguinte função putIntegration, fornecendo o identificador de recurso /pets/{petId} da API (au5df2) na propriedade parentId.

    apig.putIntegration({ restApiId: 'iuo308uaq7', resourceId: 'au5df2', httpMethod: 'GET', type: 'HTTP', integrationHttpMethod: 'GET', uri: 'http://perstore-demo-endpoint.execute-api.com/pets/{id}', requestParameters: { "integration.request.path.id": "method.request.path.petId" } }, function(err, data){ if (!err) { console.log(data); } else { console.log("The 'GET /pets/{petId}' method integration setup failed:\n", err); } })

    Essa função retorna uma saída bem-sucedida semelhante ao seguinte:

    { "httpMethod": "GET", "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "type": "HTTP", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}", "cacheNamespace": "au5df2", "requestParameters": { "integration.request.path.id": "method.request.path.petId" } }
  8. Chame a função putIntegrationResponsepara configurar a resposta de integração 200 OK para o método GET /pets especificando o identificador de recurso /pets da API (8sxa2j) na propriedade resourceId.

    apig.putIntegrationResponse({ restApiId: 'iuo308uaq7', resourceId: '8sxa2j', httpMethod: 'GET', statusCode: '200', selectionPattern: '' }, function(err, data){ if (!err) { console.log(data); } else console.log("The 'GET /pets' method integration response setup failed:\n", err); })

    Essa função retornará uma saída semelhante ao seguinte resultado:

    { "selectionPattern": "", "statusCode": "200" }

    Para configurar a resposta de integração 200 OK do método GET /pets/{petId}, chame a função putIntegrationResponse especificando o identificador de recurso /pets/{petId} da API (au5df2) na propriedade resourceId.

    apig.putIntegrationResponse({ restApiId: 'iuo308uaq7', resourceId: 'au5df2', httpMethod: 'GET', statusCode: '200', selectionPattern: '' }, function(err, data){ if (!err) { console.log(data); } else console.log("The 'GET /pets/{petId}' method integration response setup failed:\n", err); })
  9. Como boa prática, experimente chamar a API antes de implantá-la. Para tentar invocar o método GET /pets, chame o testInvokeMethod especificando o identificador de recurso /pets (8sxa2j) na propriedade resourceId:

    apig.testInvokeMethod({ restApiId: 'iuo308uaq7', resourceId: '8sxa2j', httpMethod: "GET", pathWithQueryString: '/' }, function(err, data){ if (!err) { console.log(data) } else { console.log('Test-invoke-method on 'GET /pets' failed:\n', err); } })

    Para tentar invocar o método GET /pets/{petId}, chame o testInvokeMethod especificando o identificador de recurso /pets/{petId} (au5df2) na propriedade resourceId:

    apig.testInvokeMethod({ restApiId: 'iuo308uaq7', resourceId: 'au5df2', httpMethod: "GET", pathWithQueryString: '/' }, function(err, data){ if (!err) { console.log(data) } else { console.log('Test-invoke-method on 'GET /pets/{petId}' failed:\n', err); } })

  10. Por fim, você pode implantar a API para seus clientes chamarem.

    apig.createDeployment({ restApiId: 'iuo308uaq7', stageName: 'test', stageDescription: 'test deployment', description: 'API deployment' }, function(err, data){ if (err) { console.log('Deploying API failed:\n', err); } else { console.log("Deploying API succeeded\n", data); } })