Einrichten einer Edge-optimierten API mit dem AWS SDK for Node.js - Amazon API Gateway

Einrichten einer Edge-optimierten API mit dem AWS SDK for Node.js

Zur Veranschaulichung verwenden wir AWS SDK für Node.js, um zu beschreiben, wie Sie ein AWS SDK für die Erstellung einer API-Gateway-API verwenden können. Weitere Informationen zur Verwendung eines AWS SDK, einschließlich wie die Entwicklungsumgebung eingerichtet wird, finden Sie unter AWS SDKs.

Das Einrichten einer API mithilfe des AWS SDK für Node.js umfasst das Aufrufen der Funktionen createRestApi, createResource oder getResources, putMethod, putMethodResponse, putIntegration und putIntegrationResponse.

Im folgenden Verfahren werden die grundlegenden Schritte zur Verwendung dieser SDK-Befehle zur Einrichtung einer einfachen PetStore-API, welche die Methoden GET /pets und GET /pets/{petId} unterstützt, erklärt.

So richten Sie eine einfache PetStore-API mit dem AWS SDK for Node.js ein
  1. Instanziieren des SDKs:

    var AWS = require('aws-sdk'); AWS.config.region = 'us-west-2'; var apig = new AWS.APIGateway({apiVersion: '2015/07/09'});
  2. Rufen Sie die Funktion createRestApi zum Einrichten der RestApi-Entität auf.

    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); } });

    Die Funktion gibt eine Ausgabe zurück, die folgendermaßen aussieht:

    { 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: [ '*' ] }

    Die resultierende API-ID lautet iuo308uaq7. Sie müssen dies bereitstellen, um mit der Einrichtung der API fortzufahren.

  3. Rufen Sie die Funktion getResources auf, um die Stammressourcen-ID der RestApi abzurufen.

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

    Diese Funktion gibt eine Ausgabe zurück, die folgendermaßen aussieht:

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

    Die Stammressourcen-ID lautet s4fb0trnk0. Dies ist der Ausgangspunkt für Sie, um die API-Ressourcenstruktur zu erstellen, was Sie als Nächstes tun.

  4. Rufen Sie die Funktion createResource zum Einrichten der /pets-Ressource für die API auf, welche die Stammressourcen-ID (s4fb0trnk0) in der parentId-Eigenschaft angibt.

    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); } })

    Das erfolgreiche Ergebnis lautet folgendermaßen:

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

    Um die /pets/{petId}-Ressource einzurichten, rufen Sie folgende createResource-Funktion auf, welche die neu erstellte /pets-Ressource (8sxa2j) in der parentId-Eigenschaft angibt.

    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); } })

    Das erfolgreiche Ergebnis gibt den neu erstellten Ressourcen-id-Wert zurück:

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

    In dieser Prozedur verweisen Sie auf die /pets-Ressource, indem Sie die Ressourcen-ID 8sxa2j angeben und die /pets/{petId}-Ressource, indem Sie die Ressourcen-ID au5df2 angeben.

  5. Rufen Sie die Funktion putMethod zum Hinzufügen der GET-HTTP-Methode zur /pets-Ressource (8sxa2j) auf. Dies richtet die GET /pets-Method mit einem offenen Zugriff ein.

    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); } })

    Diese Funktion gibt eine Ausgabe zurück, die folgendermaßen aussieht:

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

    Um die GET-HTTP-Methode der /pets/{petId}-Ressource (au5df2) hinzuzufügen, welche die API-Methode GET /pets/{petId} mit offenem Zugriff einrichtet, rufen Sie die putMethod-Funktion wie folgt auf.

    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); } })

    Diese Funktion gibt eine Ausgabe zurück, die folgendermaßen aussieht:

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

    Wie im vorherigen Beispiel dargestellt, müssen Sie die requestParameters-Eigenschaft festlegen, um den vom Client bereitgestellten petId-Wert zuzuweisen und an den Backend weiterzuleiten.

  6. Rufen Sie die Funktion putMethodResponse auf, um eine Methodenantwort für die GET /pets-Methode einzurichten.

    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); } })

    Diese Funktion gibt eine Ausgabe zurück, die folgendermaßen aussieht:

    { "statusCode": "200" }

    Um die "200 OK"-Antwort der GET /pets/{petId}-Methode festzulegen, rufen Sie die Funktion putMethodResponse auf, welche die /pets/{petId}-Ressourcen-ID (au5df2) in der resourceId-Eigenschaft angibt.

    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. Rufen Sie die Funktion putIntegration auf, um die Integration mit einem bestimmten HTTP-Endpunkt für die GET /pets-Methode einzurichten und übergeben Sie die /pets-Ressourcen-ID (8sxa2j) der parentId-Eigenschaft.

    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); } })

    Diese Funktion gibt eine Ausgabe zurück, die folgendermaßen aussieht:

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

    Um die Integration der GET /pets/{petId}-Methode mit den HTTP-Endpunkt http://perstore-demo-endpoint.execute-api.com/pets/{id} des Backends einzurichten, rufen Sie die folgende putIntegration-Funktion auf und übergeben die API-/pets/{petId}-Ressourcen-ID (au5df2) der parentId-Eigenschaft.

    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); } })

    Diese Funktion gibt eine erfolgreiche Ausgabe zurück, die folgendermaßen aussieht:

    { "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. Rufen Sie die Funktion putIntegrationResponse auf, um die "200 OK"-Integration für die GET /pets-Methode einzurichten, welche die API-/pets-Ressourcen-ID (8sxa2j) in der resourceId-Eigenschaft angibt.

    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); })

    Diese Funktion wird eine Ausgabe zurückgeben, die folgendermaßen aussieht:

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

    Um eine "200 OK"-Integrationsantwort der GET /pets/{petId}-Methode einzurichten, rufen Sie die Funktion putIntegrationResponse auf, welche die API-/pets/{petId}-Ressourcen-ID (au5df2) in der resourceId-Eigenschaft angibt.

    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. Es ist empfehlenswert, den Aufruf der API vor der Bereitstellung zu testen. Um einen Testaufruf für die GET /pets-Methode durchzuführen, rufen Sie testInvokeMethod auf, welche die /pets-Ressourcen-ID (8sxa2j) in der resourceId-Eigenschaft angibt.

    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); } })

    Um einen Testaufruf für die GET /pets/{petId}-Methode durchzuführen, rufen Sie testInvokeMethod auf, welche die /pets/{petId}-Ressourcen-ID (au5df2) in der resourceId-Eigenschaft angibt.

    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. Schließlich können Sie die API für Ihre Kunden bereitstellen.

    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); } })