In de vorige zelfstudie hebben we geleerd wat de REST-architectuur is, de zes leidende beperkingen van REST, hoe HTTP-verzoekmethoden en hun responscodes te begrijpen, en de anatomie van een RESTful API-eindpunt.
In deze zelfstudie zetten we een server in waarop onze API kan worden gebruikt. Je kunt een API bouwen met elke programmeertaal en serversoftware, maar we zullen Node.js gebruiken, de back-end-implementatie van JavaScript, en Express, een populair, minimaal framework voor Node..
Onze eerste vereiste is ervoor te zorgen dat Node.js en npm globaal op de computer zijn geïnstalleerd. We kunnen beide testen met behulp van de -v
vlag, die de versie zal weergeven. Open uw opdrachtprompt en typ het volgende.
node -v && npm -v
v10.8.0 6.2.0
Uw versies kunnen enigszins afwijken van de mijne, maar zolang beide beschikbaar zijn, kunnen we aan de slag.
Laten we een projectmap maken met de naam express-api
en ga er naartoe.
mkdir express-api && cd express-api
Nu we ons in onze nieuwe directory bevinden, kunnen we ons project initialiseren met de opdracht init.
npm init
Deze opdracht zal u vragen om enkele vragen over het project te beantwoorden, die u kunt kiezen om in te vullen of niet. Zodra de installatie is voltooid, hebt u een package.json bestand dat er zo uitziet:
"name": "express-api", "version": "1.0.0", "description": "Node.js en Express REST API", "main": "index.js", "scripts": "test": "echo \" Fout: geen test opgegeven \ "&& exit 1", "auteur": "Tania Rascia", "licentie": "MIT"
Nu dat we onze hebben package.json, we kunnen de afhankelijkheden die nodig zijn voor ons project installeren. Gelukkig hebben we niet te veel afhankelijkheden nodig, alleen deze vier hieronder.
We zullen de gebruiken installeren
opdracht gevolgd door elke afhankelijkheid om het opzetten van ons project te voltooien.
npm install body-parser express mysql request
Dit zal een maken pakket-lock.json bestand en een node_modules directory en onze package.json wordt bijgewerkt om er ongeveer zo uit te zien:
"name": "express-api", "version": "1.0.0", "description": "Node.js en Express REST API", "main": "index.js", "scripts": "test": "echo \" Fout: geen test opgegeven \ "&& exit 1", "auteur": "Tania Rascia", "license": "MIT", "dependencies": "dependencies": "body -parser ":" ^ 1.18.3 "," express ":" ^ 4.16.3 "," mysql ":" ^ 2.16.0 "," request ":" ^ 2.88.0 "
Voordat we aan de slag gaan met het opzetten van een Express-server, zullen we snel een HTTP-server opzetten met ingebouwde Node http
module, om een idee te krijgen van hoe een eenvoudige server werkt.
Maak een bestand met de naam hello-server.js. Laad in de http
module, stel een poortnummer in (ik kies 3001
) en maak de server met de createServer ()
methode.
// Bouw een server met Node's HTTP-module const http = require ('http'); const port = 3001; const server = http.createServer ();
In het inleidende REST-artikel hebben we besproken wat verzoeken en antwoorden zijn met betrekking tot een HTTP-server. We gaan onze server instellen om een verzoek af te handelen en de gevraagde URL weergeven aan de serverzijde en a weergeven Hallo, server! bericht aan de klant aan de responszijde.
server ** aan ('request' ** (request, response) => console.log ('URL: $ request.url'); response.end ('Hallo, server!'))
Ten slotte zullen we de server vertellen op welke poort hij moet luisteren en een fout weergeven als die er is.
// Start de server server.listen (poort, (fout) => if (error) return console.log ('Fout: $ error'); console.log ('Server luistert op poort $ poort '))
Nu kunnen we onze server starten met knooppunt
gevolgd door de bestandsnaam.
knoop hello-server.js
U ziet dit antwoord in de terminal:
De server luistert op poort 3001
Ga naar om te controleren of de server daadwerkelijk actief is http: // localhost: 3001 /
in de adresbalk van uw browser. Als alles goed werkt, zou je het moeten zien Hallo, server! op de pagina. In uw terminal ziet u ook de URL's die zijn aangevraagd.
URL: / URL: /favicon.ico
Als je zou navigeren naar http: // localhost: 3001 / hello
, je zult zien URL: / hallo
.
We kunnen ook cURL gebruiken op onze lokale server, die ons de exacte headers en body zal tonen die worden geretourneerd.
krul -i http: // localhost: 3001
HTTP / 1.1 200 OK Datum: wo, 15 aug 2018 22:14:23 GMT Verbinding: keep-alive Inhoud-lengte: 14 Hallo, server!
Als u het terminalvenster op elk gewenst moment sluit, verdwijnt de server.
Nu we een idee hebben hoe de server, het verzoek en de reactie allemaal samenwerken, kunnen we dit herschrijven in Express, dat een nog eenvoudiger interface en uitgebreide functies heeft.
We gaan een nieuw bestand maken, app.js, wat het toegangspunt tot ons eigenlijke project zal zijn. Net als bij de oorspronkelijke http-server, hebben we een module nodig en een poort om te starten.
Creëer een app.js bestand en plaats de volgende code erin.
// Vereist pakketten en stel de port const express in = require ('express'); const port = 3002; const app = express ();
Nu, in plaats van naar alle verzoeken te zoeken, zullen we expliciet aangeven dat we op zoek zijn naar een KRIJGEN
aanvraag op de root van de server (/
). Wanneer /
ontvangt een aanvraag, we zullen de gevraagde URL en de "Hallo, Server!" bericht.
app.get ('/', (request, response) => console.log ('URL: $ request.url'); response.send ('Hello, Server!'););
Ten slotte starten we de server op poort 3002
met de luister()
methode.
// Start de server const server = app.listen (poort, (fout) => if (error) return console.log ('Fout: $ error'); console.log ('Server luisteren op poort $ server.address (). port '););
We kunnen de server starten met knooppunt app.js
zoals we eerder deden, maar we kunnen ook de scripts
eigendom in onze package.json bestand om dit specifieke commando automatisch uit te voeren.
"scripts": "start": "node app.js",
Nu kunnen we gebruiken npm start
om de server te starten en we zullen ons serverbericht in de terminal zien.
Server luistert op poort 3002
Als we een krul -i
op de URL zullen we zien dat deze nu wordt aangedreven door Express en er zijn enkele extra headers zoals Content-Type
.
krul -i http: // localhost: 3002
HTTP / 1.1 200 OK X-Powered-By: Express-inhoudstype: text / html; charset = utf-8 Inhoud-lengte: 14 ETag: W / "e-gaHDsc0MZK + LfDiTM4ruVL4pUqI" Datum: wo, 15 aug 2018 22:38:45 GMT Verbinding: keep-alive Hallo, server!
Om gemakkelijk mee om te gaan POST
en LEGGEN
verzoeken aan onze API, voegen we body parsing middleware toe. Dit is waar onze body-parser
module komt binnen. body-parser
zal het hele lichaam van een binnenkomend verzoek extraheren en het in een JSON-object ontleden waarmee we kunnen werken.
We zullen gewoon de module bovenaan ons bestand nodig hebben. Voeg het volgende toe vereisen
verklaring naar de top van uw app.js het dossier.
const bodyParser = require ('body-parser'); ...
Dan vertellen we onze Express-app om te gebruiken body-parser
, en zoek naar JSON.
// Gebruik Node.js body parsing middleware app.use (bodyParser.json ()); app.use (bodyParser.urlencoded (extended: true,));
Laten we ook onze boodschap wijzigen om een JSON-object als antwoord te verzenden in plaats van platte tekst.
response.send (message: 'Node.js en Express REST API');
Het volgende is ons vol app.json bestand zoals het er nu uitziet.
// Vereist pakketten en stel de port const express in = require ('express'); const port = 3002; const bodyParser = require ('body-parser'); const app = express (); // Gebruik Node.js body parsing middleware app.use (bodyParser.json ()); app.use (bodyParser.urlencoded (extended: true,)); app.get ('/', (request, response) => response.send (message: 'Node.js en Express REST API');); // Start de server const server = app.listen (poort, (fout) => if (error) return console.log ('Fout: $ error'); console.log ('Server luisteren op poort $ server.address (). port '););
Als u een verzendt krul -i
naar de server, zult u zien dat de header nu terugkeert Inhoudstype: toepassing / json; charset = UTF-8
.
Tot nu toe hebben we alleen een KRIJGEN
route naar de root (/
), maar onze API moet in staat zijn om alle vier de belangrijkste HTTP-verzoekmethoden op meerdere URL's af te handelen. We gaan een router opzetten en een aantal nep-gegevens maken om weer te geven.
Laten we een nieuwe map maken met de naam routes, en een bestand binnen geroepen routes.js. We zullen er bovenaan naar linken app.js.
const routes = vereisen ('./ routes / routes');
Merk op dat de .js
uitbreiding is niet nodig in de behoefte. Nu gaan we onze app's verplaatsen KRIJGEN
luisteraar routes.js. Voer de volgende code in routes.js.
const router = app => app.get ('/', (request, response) => response.send (message: 'Node.js en Express REST API'););
Exporteer tenslotte de router
zodat we het kunnen gebruiken in onze app.js het dossier.
// Exporteer de router module.exports = router;
In app.js, vervang de app.get ()
code die je eerder had met een oproep naar routes ()
:
routes (app);
Je zou nu naar toe kunnen gaan http: // localhost: 3002
en zie hetzelfde als voorheen. (Vergeet niet om de server opnieuw te starten!)
Zodra dat allemaal is ingesteld en correct werkt, serveren we sommige JSON-gegevens met een andere route. We zullen voorlopig alleen valse gegevens gebruiken, omdat onze database nog niet is opgezet.
Laten we een maken gebruikers
variabele in routes.js, met enkele nepgebruikersgegevens in JSON-indeling.
const users = [id: 1, name: "Richard Hendricks", email: "[email protected]",, id: 2, name: "Bertram Gilfoyle", email: "[email protected]", ,];
We voegen er nog een toe KRIJGEN
route naar onze router, / gebruikers
, en stuur de gebruikersgegevens door.
app.get ('/ users', (request, response) => response.send (users););
Na het opnieuw opstarten van de server, kunt u nu naar navigeren http: // localhost: 3002 / gebruikers
en zie al onze gegevens weergegeven.
Opmerking: als u geen JSON viewer-extensie in uw browser hebt, raad ik u aan er een te downloaden, zoals JSONView voor Chrome. Dit maakt de gegevens veel gemakkelijker te lezen!
Bezoek onze GitHub Repo om de voltooide code voor dit bericht te zien en te vergelijken met die van jou.
In deze zelfstudie leerden we hoe we een ingebouwde HTTP-server en een Express-server in het knooppunt, routeaanvragen en URL's konden instellen en JSON-gegevens met get-verzoeken consumeren.
In het laatste deel van de RESTful API-serie koppelen we onze Express-server aan MySQL om gebruikers in een database aan te maken, te bekijken, bij te werken en te verwijderen, waardoor de functionaliteit van onze API wordt afgerond.