Sådan oprettes en API med Lambdas og API Gateway

Vil du få adgang til din database, kontrollere dit system eller udføre en kode fra et andet websted? En API kan gøre alt dette for dig, og de er overraskende nemme at konfigurere.

En API er en webadresse, som du kan udføre GET, PUT,POST , ogDELETEanmoder om at kontrollere en anden tjeneste. Hvis du selv laver en sådan, kan du oprette disse API'er til at gøre hvad du vil bag kulisserne. Almindelige anvendelser er levering af databasekontrol, udførelse af handlinger på tredjeparts-API'er (API-ception) eller styring af en anden tjeneste.

Hvorfor bruge en API?

Du kan spørge, hvorfor vi har brug for en API, når vi kan få adgang til databasen direkte eller køre koden på webstedet. Der er et par massive fordele ved API'er i forhold til at køre koden på dit websted.

Skjul dine adgangsnøgler og tokens

Dette er muligvis den vigtigste grund til at bruge en API. Hvis du får adgang til en database, skal du bruge databaseoplysningerne samt bruger- og adgangstoken / nøgledata.

Hvis du får adgang til databasen fra hjemmesiden, vil du have alle disse detaljer i kildekoden på dit websted. Dette er virkelig dårlig praksis, da enhver kan se på kildekontrollen og stjæle dine detaljer. Dette lyder ikke så dårligt, men hvad hvis dette er dine AWS- eller Google Cloud Compute-legitimationsoplysninger? Folk, der får adgang til dit websted, kan derefter bruge disse til at køre, hvad de vil på din konto, hvilket efterlader dig med en kæmpe regning.

At køre disse processer bag en API betyder, at ingen kan se nogen af ​​de private detaljer - de kan ikke stjæle dem til brug i deres egne projekter. Hvis du gemmer din websitekode i GitHub eller en anden offentlig kildekontrol, betyder det også, at de heller ikke er synlige der.

Kør koden et andet sted

Hvad hvis du ikke bruger andre tjenester og ikke bruger nogen hemmelige nøgler? Hvis du kører en stor eller kompleks bit kode, eller hvis du ikke vil have nogen anden, der læser din kode og opdager, hvordan den fungerer, kan du stadig bruge en API.

Kontroller, hvem der har adgang

Tilvejebringelse af en API giver dig også mulighed for at begrænse, hvem der er i stand til at få adgang til databasen eller køre koden. Du kan gøre dette ved at kræve en API-nøgle. Denne nøgle bruges til at identificere den bruger, der fremsætter anmodningen, og derefter tillade eller afvise anmodningen.

Dette kan bruges til kun at give få personer adgang til tjenesten eller endda skabe et niveausystem. Sådan fungerer mange betalte API'er. Alle får gratis, men begrænset adgang, og derefter tillader du betaling for adgang til overlegne dele af tjenesten eller bare en højere anmodningstakst.

Opbygning af API

Nu hvor vi kender nogle grunde til, at vi måske vil oprette en API, lad os netop gøre det. Vi skal bruge API Gateway og AWS Lambdas, fordi det er enklere end at køre en server. Sørg for, at du har en AWS-konto og er logget ind.

Opsætning af en API-gateway

Vi starter med at åbne API Gateway-tjenesten og klikke på "Kom i gang" . På den næste side skal vi vælge "Ny API"mulighed. Derefter giver vi vores API et navn og en beskrivelse og klikker på "Opret API".

Klik på "Opret API"får os ind på konfigurationssiden for API'en.

Den første ting, vi skal gøre, er at tilføje en ressource til API'en. Brug af ressourcer giver os mulighed for at gruppere lignende API-opkald sammen ved hjælp af indlejrede skråstreg. Vi skal oprette en API, som vi kan bruge til at komme med anbefalinger til, hvad vi skal se. Derfor kan vi have/tv-showsog /moviessom to basemetoder.

Klik på rullemenuen "Handlinger", og vælg "Opret ressource" . Navngiv dine ressourcer, og sørg for at de begge er i “/” stien.

Vi ønsker, at brugerne skal kunne gå til “/ film / horror” eller “/ tv-shows / komedie”, og vi kan gøre dette ved at tilføje stiparametre. Dette er variabler, som vi kan få adgang til i API'en. For at oprette en af ​​disse skal vi indstille ressourcen til {resourceName}som vist nedenfor. Dette kan gøres for “tv-shows” og “film”.

Nu hvor vi har længde og genre, kan vi oprette metoder til at hente og føje data til en tabel. Vælg en af {genre}ressourcerne, klik på "Handlinger", ogderefter " Opret metode" . Dette vil skabe et lille gråt felt under den ressource, som vi kan klikke på. Vi skal starte med enGETanmodning, så vælg det, og klik på afkrydsningsfeltet.

Det er her, vi får beslutte, hvordan anmodningen skal håndteres. Vi skal bruge AWS Lambdas, men vi er nødt til at oprette dem, før vi kan afslutte opsætningen af ​​metoderne.

Oprettelse af Lambdas

Vi er i stand til at svare på disse API-anmodninger ved hjælp af Lambdas, hvilket er fantastisk, da de kun kører, når vi har brug for dem. De er også rigtig nemme at skabe, så det er hvad vi vil gøre nu.

Klik på "Opret funktion" i Lambda-konsollen. Derefter kan vi navngive vores første API-funktion movieAPI, indstille den til at køre Node 8.10 og "Opret ny rolle fra skabelon (er)" . Vi navngiver vores nye rolle "tableAPI" og tilføjer "Simple Microservice-tilladelser" som den eneste skabelon.

Al kode kan findes på //github.com/SamWSoftware/Projects/tree/master/movieAPI

Ved at klikke på "Opret funktion" sendes os ind i Lambda-vinduet. Rul ned til afsnittet "Funktionskode", så ændrer vi koden. Den første ting, vi skal gøre, er at kontrollere, hvilken anmodningsmetode der blev brugt.

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

Vi starter med at skrive getMoviefunktionen. Denne funktion starter med at hente genrefra stiparametrene. Det er her, hvor sti-parametre kan gøre denne proces let.

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

Med den genre, som brugeren anmodede om, får vi en anbefalet film til dem. Jeg kopierede disse fra 25 topfilm fra hver genre og føjede dem til et objekt med genren som nøgle. Vi kan derefter få filmen ved at få værdien af ​​den anmodede genre.

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

Dette betyder, at titlen på filmen overføres til filmen donefungere. Denne funktion bruges, da API Gateway forventer, at dataene kommer tilbage i et meget specifikt format. Denne funktion forvandler en streng til det krævede format.

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

Vi kan gøre en meget lignende ting for en tv-showsAPIfunktion ved at genbruge det meste af koden. Du skal bare ændre funktionsnavne og filmforslag til tv-show.

Tilslutning af Lambdas til API Gateway

Tilbage i API Gateway kan vi tilføje vores nye Lambdas til de metoder, vi oprettede tidligere. Vi er nødt til at sikre, at "Brug 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

I den første del oprettede vi en API, der sendte anmodninger videre til en Lambda, som returnerede det bedste tv-show eller film ...

medium.com