So erstellen Sie eine API mit Lambdas und API Gateway

Möchten Sie auf Ihre Datenbank zugreifen, Ihr System steuern oder Code von einer anderen Website ausführen? Eine API kann all dies für Sie erledigen und sie sind überraschend einfach einzurichten.

Eine API ist eine URL , die Sie ausführen können GET, PUT,POST , undDELETEfordert an, einen anderen Dienst zu steuern. Wenn Sie selbst eine erstellen, können Sie diese APIs erstellen, um hinter den Kulissen alles zu tun, was Sie wollen. Häufige Verwendungszwecke sind die Datenbanksteuerung, das Ausführen von Aktionen für APIs von Drittanbietern (API-Annahme) oder das Steuern eines anderen Dienstes.

Warum eine API verwenden?

Sie fragen sich möglicherweise, warum wir eine API benötigen, wenn wir direkt auf die Datenbank zugreifen oder den Code auf der Website ausführen können. APIs bieten einige massive Vorteile gegenüber der Ausführung des Codes auf Ihrer Website.

Verstecken Sie Ihre Zugangsschlüssel und Token

Dies ist möglicherweise der wichtigste Grund für die Verwendung einer API. Wenn Sie auf eine Datenbank zugreifen, benötigen Sie die Datenbankdetails sowie Benutzer- und Zugriffstoken- / Schlüsseldaten.

Wenn Sie von der Website aus auf die Datenbank zugreifen, werden alle diese Details im Quellcode Ihrer Website enthalten sein. Dies ist eine wirklich schlechte Praxis, da jeder in die Quellcodeverwaltung schauen und Ihre Daten stehlen kann. Das hört sich nicht schlecht an, aber was ist, wenn dies Ihre AWS- oder Google Cloud Compute-Anmeldeinformationen sind? Die Personen, die auf Ihre Website zugreifen, können diese dann verwenden, um auf Ihrem Konto alles auszuführen, was sie möchten, und Ihnen eine riesige Rechnung hinterlassen.

Das Ausführen dieser Prozesse hinter einer API bedeutet, dass niemand die privaten Details sehen kann - sie können sie nicht stehlen, um sie in ihren eigenen Projekten zu verwenden. Wenn Sie Ihren Website-Code in GitHub oder einem anderen öffentlichen Quellcodeverwaltungsprogramm speichern, bedeutet dies auch, dass diese dort auch nicht sichtbar sind.

Führen Sie den Code an einer anderen Stelle aus

Was ist, wenn Sie keine anderen Dienste und keine geheimen Schlüssel verwenden? Wenn Sie ein großes oder komplexes Stück Code ausführen oder wenn Sie nicht möchten, dass jemand anderes Ihren Code liest und herausfindet, wie er funktioniert, können Sie trotzdem eine API verwenden.

Kontrollieren Sie, wer Zugriff hat

Durch die Bereitstellung einer API können Sie auch einschränken, wer auf die Datenbank zugreifen oder den Code ausführen kann. Sie können dies tun, indem Sie einen API-Schlüssel benötigen. Dieser Schlüssel wird verwendet, um den Benutzer zu identifizieren, der die Anfrage stellt und die Anfrage dann zulässt oder ablehnt.

Dies kann verwendet werden, um nur wenigen Personen den Zugriff auf den Dienst zu ermöglichen oder sogar um ein Schichtsystem zu erstellen. So funktionieren viele kostenpflichtige APIs. Jeder hat freien, aber eingeschränkten Zugang, und dann erlauben Sie die Zahlung für den Zugang zu übergeordneten Teilen des Dienstes oder nur für eine höhere Anzahl von Anfragen.

Erstellen der API

Nachdem wir einige Gründe kennen, warum wir möglicherweise eine API erstellen möchten, lassen Sie uns genau das tun. Wir werden API Gateway und AWS Lambdas verwenden, da dies einfacher ist als das Ausführen eines Servers. Stellen Sie sicher, dass Sie ein AWS-Konto haben und angemeldet sind.

Einrichten eines API-Gateways

Zunächst öffnen wir den API-Gateway-Dienst und klicken auf "Erste Schritte" . Auf der nächsten Seite müssen wir die "Neue API" auswählen.Möglichkeit. Dann geben wir unserer API einen Namen und eine Beschreibung und klicken auf "API erstellen".

Klicken Sie auf "API erstellen".bringt uns auf die Konfigurationsseite für die API.

Als erstes müssen wir der API eine Ressource hinzufügen. Durch die Verwendung von Ressourcen können wir ähnliche API-Aufrufe mithilfe verschachtelter Schrägstriche gruppieren. Wir werden eine API erstellen, mit der wir Empfehlungen abgeben können, was zu sehen ist. Deshalb können wir haben/tv-showsund /moviesals zwei Basismethoden.

Klicken Sie auf die Dropdown-Liste "Aktionen" und wählen Sie "Ressource erstellen" . Benennen Sie Ihre Ressourcen und stellen Sie sicher, dass sich beide im Pfad "/" befinden.

Wir möchten, dass Benutzer zu „/ movies / horror“ oder „/ tv-show / komisch“ wechseln können, und dies können wir durch Hinzufügen von Pfadparametern tun. Dies sind Variablen, auf die wir innerhalb der API zugreifen können. Um eine davon zu erstellen, müssen wir die Ressource {resourceName}wie unten gezeigt einstellen . Dies kann für "TV-Shows" und "Filme" erfolgen.

Jetzt, da wir Länge und Genre haben, können wir Methoden zum Abrufen und Hinzufügen von Daten zu einer Tabelle erstellen. Wählen Sie eine der {genre}Ressourcen aus, klicken Sie auf "Aktionen" unddann " Methode erstellen" . Dadurch wird ein kleines graues Feld unter der Ressource erstellt, auf das wir klicken können. Wir werden mit einem beginnenGETAnfrage, also wählen Sie das aus und klicken Sie auf das Häkchen.

Hier können wir entscheiden, wie die Anfrage bearbeitet werden soll. Wir werden AWS Lambdas verwenden, aber wir müssen sie erstellen, bevor wir die Einrichtung der Methoden abschließen können.

Die Lambdas erschaffen

Wir sind in der Lage, auf diese API-Anfragen mit Lambdas zu antworten. Dies ist großartig, da sie nur ausgeführt werden, wenn wir sie benötigen. Sie sind auch sehr einfach zu erstellen, also werden wir das jetzt tun.

Klicken Sie in der Lambda-Konsole auf "Funktion erstellen". Anschließend können wir unsere erste API-Funktion benennen movieAPI, Knoten 8.10 ausführen und "Neue Rolle aus Vorlage (n) erstellen" . Wir werden unsere neue Rolle "tableAPI" nennen und "Simple Microservice-Berechtigungen" als einzige Vorlage hinzufügen.

Der gesamte Code ist unter //github.com/SamWSoftware/Projects/tree/master/movieAPI zu finden

Wenn Sie auf "Funktion erstellen" klicken, gelangen Sie in das Lambda-Fenster. Scrollen Sie zum Abschnitt „Funktionscode“ und wir ändern den Code. Als erstes müssen wir überprüfen, welche Anforderungsmethode verwendet wurde.

exports.handler = async (event) => { console.log(event); if (event.httpMethod === 'PUT'){ let response = putMovie(event) return done(response); } else if (event.httpMethod === 'GET'){ let response = getMovie(event); return done(response); } };

Wir beginnen mit dem Schreiben der getMovieFunktion. Diese Funktion beginnt mit dem Abrufen der genrePfadparameter. Hier kann die Verwendung von Pfadparametern diesen Prozess vereinfachen.

const getMovie = event => { let genre = event.pathParameters.genre; return; }

With the genre that the user requested, we are going to get a recommended movie for them. I copied these from 25 Top Films From Each Genre and added them to an object with the genre as the key. We can then get the film by getting the value of the genre requested.

const movies = { action: 'Desperado (1995)', fantasy: 'Inception (2010)', ... horror: 'Black Swan (2010)' } const getMovie = event => { let genre = event.pathParameters.genre; return movies[genre]; }

This means that the title of the movie is being passed into the donefunction. This function is used, as API Gateway expects the data to come back in a very specific format. This function turns a string into that required format.

const done = response => { return { statusCode: '200', body: JSON.stringify(response), headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Methods': '*', 'Access-Control-Allow-Origin': '*' } } }

We can do a very similar thing for a tv-showsAPI function, reusing most of the code. Just change the function names and the movie suggestions to tv show.

Connecting the Lambdas to API Gateway

Back in API Gateway, we can add our new Lambdas to the methods we created earlier. We need to make sure that “Use Lambda Proxy integration”is selected and that we are pointing at the correct Lambda. Clicking “Save” will ask you for permissions to access this Lambda, to which we can give the “OK”.

Do this for the GETmethods on both resources and we can start to test. Selecting the methods should now show a method execution diagram. This sounds complicated but the only bit we need is the “TEST”section.

Clicking “TEST” will open a new section where we can try out the API. There are lots of things you can set here, but the only one we care about is the Path {genre}. We need to set this to the genre we’re requesting. Entering “western” as the genre and hitting the “Test” button gets a response like this:

We got our API working! Now we need to make sure that other people can access it. There are two steps to this.

  1. We enable CORS — Select the “{genre}”resource and then click “Actions”and “Enable CORS”. Leave everything as defaults and, when asked, click “Yes, replace existing values”.
  2. Deploy our API — Click on “Actions”andDeploy API”. Set the deployment stage to “[New Stage]” and then give your stage a name like “production”orpublic”.

Once your API has deployed you should get a URL like this. This is the base of your API. You can add /movies/western to access your API.

//{uniqueCode}.execute-api.eu-west-1.amazonaws.com/production

Your API URL might end up something like:

//fds1fe31fes476s.execute-api.eu-west-1.amazonaws.com/production/movies/western

That’s all for this article. In the next one we’ll connect this API to Dynamo tables and let users vote on their favourite movies in each genre. You can read that article below.

Building an API with Lambdas and API Gateway — Part 2

In the first part we created an API which passed requests through to a Lambda which returned the top tv show or movie…

medium.com