I den forrige veiledningen lærte vi hva REST-arkitekturen er, de seks ledende begrensningene til REST, hvordan man forstår HTTP-forespørselsmetoder og deres responskoder og anatomien til et RESTful API-endepunkt.
I denne opplæringen oppretter vi en server for at API-en vår skal leve videre. Du kan bygge en API med et hvilket som helst programmeringsspråk og serverprogramvare, men vi vil bruke Node.js, som er back-end implementering av JavaScript, og Express, et populært, minimalt rammeverk for Node.
Vår første forutsetning er å sørge for at Node.js og npm installeres globalt på datamaskinen. Vi kan teste begge med -v
flagg, som vil vise versjonen. Åpne kommandoprompten din og skriv inn følgende.
node -v && npm -v
v10.8.0 6.2.0
Dine versjoner kan være litt annerledes enn mine, men så lenge begge er der, kan vi komme i gang.
La oss lage et prosjektkatalog som heter express-api
og flytte til den.
mkdir express-api og CD-express-api
Nå som vi er i vår nye katalog, kan vi initialisere prosjektet vårt med init-kommandoen.
npm init
Denne kommandoen vil be deg om å svare på noen spørsmål om prosjektet, som du kan velge å fylle ut eller ikke. Når oppsettet er fullført, har du en package.json fil som ser slik ut:
"navn": "express-api", "versjon": "1.0.0", "beskrivelse": "Node.js og Express REST API", "main": "index.js", "scripts" "test": "echo" Feil: ingen test oppgitt \ "&& avslutte 1", "forfatter": "Tania Rascia", "lisens": "MIT"
Nå som vi har vår package.json, Vi kan installere de avhengighetene som kreves for vårt prosjekt. Heldigvis krever vi ikke for mange avhengigheter, bare disse fire oppført nedenfor.
Vi bruker installere
kommando etterfulgt av hver avhengighet for å fullføre oppsettet av prosjektet vårt.
npm installere body-parser express mysql-forespørsel
Dette vil skape en pakke-lock.json fil og a node_modules katalog og vår package.json vil bli oppdatert for å se noe slikt ut:
"navn": "express-api", "versjon": "1.0.0", "beskrivelse": "Node.js og Express REST API", "main": "index.js", "scripts" "test": "echo" Feil: ingen test spesifisert \ "&& avslutte 1", "forfatter": "Tania Rascia", "lisens": "MIT", "avhengigheter": "avhengigheter" -parser ":" ^ 1.18.3 "," uttrykk ":" ^ 4.16.3 "," mysql ":" ^ 2.16.0 "," forespørsel ":" ^ 2.88.0 "
Før vi begynner å sette opp en Express-server, vil vi raskt sette opp en HTTP-server med Node-innebygd http
modul, for å få en ide om hvordan en enkel server fungerer.
Opprett en fil som heter hallo-server.js. Last inn i http
modul, sett et portnummer (jeg valgte 3001
), og opprett serveren med createServer ()
metode.
// Bygg en server med nodens HTTP-modul const http = krever ('http'); const port = 3001; const server = http.createServer ();
I den innledende REST-artikkelen diskuterte vi hvilke forespørsler og svar som er med hensyn til en HTTP-server. Vi skal sette serveren vår til å håndtere en forespørsel og vise nettadressen som er forespurt på server siden, og vise en Hei, server! melding til klienten på responssiden.
server ** på ("forespørsel" ** (forespørsel, svar) => console.log ('URL: $ request.url'); response.end ('Hei, server!'))
Til slutt vil vi fortelle serveren hvilken port å lytte på, og vise en feil hvis det er en.
// Start server server.listen (port, (error) => hvis (feil) returnerer console.log ('Feil: $ error'); console.log ('Server lytter på port $ port '))
Nå kan vi starte serveren vår med node
etterfulgt av filnavnet.
node hei-server.js
Du vil se dette svaret i terminalen:
Serveren lytter på port 3001
For å sjekke at serveren faktisk kjører, gå til http: // localhost: 3001 /
i nettleserens adressefelt. Hvis alt fungerer som det skal, bør du se Hei, server! på siden. I terminalen din vil du også se nettadressene som ble forespurt.
URL: / URL: /favicon.ico
Hvis du skulle navigere til http: // localhost: 3001 / hallo
, du ville se URL: / hei
.
Vi kan også bruke cURL på vår lokale server, som viser oss de eksakte overskriftene og kroppen som blir returnert.
krølle -i http: // localhost: 3001
HTTP / 1.1 200 OK Dato: Ons, 15 Aug 2018 22:14:23 GMT Tilkobling: Keep-Alive Innholdslengde: 14 Hei, server!
Hvis du lukker terminalvinduet når som helst, vil serveren gå bort.
Nå som vi har en ide om hvordan serveren, forespørselen og svaret alle virker sammen, kan vi omskrive dette i Express, som har et enda enklere grensesnitt og utvidede funksjoner.
Vi skal lage en ny fil, app.js, som vil være inngangspunktet til vårt egentlige prosjekt. Akkurat som med den opprinnelige http-serveren, krever vi en modul og sett en port for å starte.
Lag en app.js fil og legg inn følgende kode i den.
// Krev pakker og sett port const express = kreve ('express'); const port = 3002; const app = express ();
Nå, i stedet for å lete etter alle forespørsler, vil vi eksplisitt si at vi leter etter en FÅ
forespørsel på roten til serveren (/
). Når /
mottar en forespørsel, vi vil vise den forespurte nettadressen og "Hello, Server!" budskap.
app.get ('/', (forespørsel, svar) => console.log ('URL: $ request.url'); response.send ('Hei, Server!'););
Endelig starter vi serveren på porten 3002
med lytte()
metode.
// Start server const server = app.listen (port, (error) => hvis (feil) returnerer console.log ('Feil: $ error'); console.log ('Server lytter på port $ server.address (). port '););
Vi kan starte serveren med node app.js
som vi gjorde før, men vi kan også endre skript
eiendom i vårt package.json fil for å kjøre denne spesifikke kommandoen automatisk.
"skript": "start": "node app.js",
Nå kan vi bruke npm start
for å starte serveren, og vi ser vår servermelding i terminalen.
Server lytter på port 3002
Hvis vi kjører a krølle -i
På URL-adressen vil vi se at den drives av Express nå, og det er noen ekstra overskrifter som Innholdstype
.
krølle -i http: // localhost: 3002
HTTP / 1.1 200 OK X-Powered-By: Express Content-Type: tekst / html; charset = utf-8 Innholds lengde: 14 ETag: W / "e-gaHDsc0MZK + LfDiTM4ruVL4pUqI" Dato: ons, 15 aug 2018 22:38:45 GMT Tilkobling: fortsettende Hei, Server!
For å enkelt håndtere POST
og SETTE
forespørsler til vår API, vil vi legge til kroppsparsing mellomvare. Det er her vår body-parser
modulen kommer inn. body-parser
vil trekke hele kroppen av en innkommende forespørsel og analysere den i et JSON-objekt som vi kan jobbe med.
Vi krever bare modulen øverst i filen vår. Legg til følgende krever
uttalelse til toppen av din app.js fil.
const bodyParser = krever ('body-parser'); ...
Da forteller vi at vår Express-app skal brukes body-parser
, og se etter JSON.
// Bruk Node.js body parsing middleware app.use (bodyParser.json ()); app.use (bodyParser.urlencoded (extended: true,));
La oss også endre vårt budskap for å sende et JSON-objekt som et svar i stedet for ren tekst.
response.send (message: 'Node.js og Express REST API');
Følgende er vår fulle app.json filen som den står nå.
// Krev pakker og sett port const express = kreve ('express'); const port = 3002; const bodyParser = krever ('body-parser'); const app = express (); // Bruk Node.js body parsing middleware app.use (bodyParser.json ()); app.use (bodyParser.urlencoded (extended: true,)); app.get ('/', (request, response) => response.send (melding: 'Node.js og Express REST API');); // Start server const server = app.listen (port, (error) => hvis (feil) returnerer console.log ('Feil: $ error'); console.log ('Server lytter på port $ server.address (). port '););
Hvis du sender en krølle -i
til serveren, ser du at overskriften nå kommer tilbake Innholdstype: application / json; charset = utf-8
.
Så langt har vi bare en FÅ
rute til roten (/
), men vår API skal kunne håndtere alle fire store HTTP-forespørselsmetoder på flere nettadresser. Vi skal sette opp en ruter og lage noen falske data som skal vises.
La oss lage en ny katalog som heter ruter, og en fil innenfor kalt routes.js. Vi kobler til det øverst på app.js.
const ruter = krever ('./ ruter / ruter');
Legg merke til at .js
forlengelse er ikke nødvendig i kravet. Nå flytter vi vår app FÅ
lytter til routes.js. Skriv inn følgende kode i routes.js.
const router = app => app.get ('/', (request, response) => response.send (melding: 'Node.js og Express REST API'););
Endelig eksportere router
så vi kan bruke den i vår app.js fil.
// Eksporter ruteren module.exports = ruteren;
I app.js, erstatte app.get ()
kode du hadde før med et anrop til ruter ()
:
ruter (app);
Du bør nå kunne gå til http: // localhost: 3002
og se det samme som før. (Ikke glem å starte serveren på nytt!)
Når det er satt opp og fungerer som det skal, serverer vi noen JSON-data med en annen rute. Vi bruker bare falske data for nå, siden databasen vår ikke er konfigurert.
La oss lage en brukere
variabel i routes.js, med noen falske brukerdata i JSON-format.
const users = [id: 1, navn: "Richard Hendricks", epost: "[email protected]",, id: 2, navn: "Bertram Gilfoyle", epost: "[email protected]" ,];
Vi legger til en annen FÅ
rute til ruteren vår, / brukere
, og send brukerdataene gjennom.
app.get ('/ users', (request, response) => response.send (brukere););
Etter at du har startet serveren, kan du nå navigere til http: // localhost: 3002 / brukere
og se alle våre data vises.
Merk: Hvis du ikke har en JSON viewer-utvidelse i nettleseren din, anbefaler jeg deg å laste ned en, for eksempel JSONView for Chrome. Dette vil gjøre dataene mye enklere å lese!
Besøk vår GitHub Repo for å se den fullførte koden for dette innlegget, og sammenlign det med ditt eget.
I denne veiledningen lærte vi å sette opp en innebygd HTTP-server og en Express-server i knutepunkt, ruteforespørsler og nettadresser, og konsumere JSON-data med få forespørsler.
I den siste delen av RESTful API-serien vil vi koble opp vår Express-server til MySQL for å opprette, vise, oppdatere og slette brukere i en database, fullføre API-funksjonaliteten.