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
-
Instanziieren des SDKs:
var AWS = require('aws-sdk'); AWS.config.region = 'us-west-2'; var apig = new AWS.APIGateway({apiVersion: '2015/07/09'});
-
Rufen Sie die Funktion
createRestApi
zum Einrichten derRestApi
-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. -
Rufen Sie die Funktion
getResources
auf, um die Stammressourcen-ID derRestApi
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. -
Rufen Sie die Funktion
createResource
zum Einrichten der/pets
-Ressource für die API auf, welche die Stammressourcen-ID (s4fb0trnk0
) in derparentId
-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 folgendecreateResource
-Funktion auf, welche die neu erstellte/pets
-Ressource (8sxa2j
) in derparentId
-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-ID8sxa2j
angeben und die/pets/{petId}
-Ressource, indem Sie die Ressourcen-IDau5df2
angeben. -
Rufen Sie die Funktion
putMethod
zum Hinzufügen derGET
-HTTP-Methode zur/pets
-Ressource (8sxa2j
) auf. Dies richtet dieGET /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-MethodeGET /pets/{petId}
mit offenem Zugriff einrichtet, rufen Sie dieputMethod
-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 bereitgestelltenpetId
-Wert zuzuweisen und an den Backend weiterzuleiten. -
Rufen Sie die Funktion
putMethodResponse
auf, um eine Methodenantwort für dieGET /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 FunktionputMethodResponse
auf, welche die/pets/{petId}
-Ressourcen-ID (au5df2
) in derresourceId
-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); } })
-
Rufen Sie die Funktion
putIntegration
auf, um dieIntegration
mit einem bestimmten HTTP-Endpunkt für dieGET /pets
-Methode einzurichten und übergeben Sie die/pets
-Ressourcen-ID (8sxa2j
) derparentId
-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-Endpunkthttp://perstore-demo-endpoint.execute-api.com/pets/{id}
des Backends einzurichten, rufen Sie die folgendeputIntegration
-Funktion auf und übergeben die API-/pets/{petId}
-Ressourcen-ID (au5df2
) derparentId
-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" } }
-
Rufen Sie die Funktion
putIntegrationResponse
auf, um die "200 OK"-Integration für dieGET /pets
-Methode einzurichten, welche die API-/pets
-Ressourcen-ID (8sxa2j
) in derresourceId
-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 FunktionputIntegrationResponse
auf, welche die API-/pets/{petId}
-Ressourcen-ID (au5df2
) in derresourceId
-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); })
-
Es ist empfehlenswert, den Aufruf der API vor der Bereitstellung zu testen. Um einen Testaufruf für die
GET /pets
-Methode durchzuführen, rufen SietestInvokeMethod
auf, welche die/pets
-Ressourcen-ID (8sxa2j
) in derresourceId
-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 SietestInvokeMethod
auf, welche die/pets/{petId}
-Ressourcen-ID (au5df2
) in derresourceId
-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); } })
-
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); } })