AWS Lambda est un service informatique sans serveur fourni par Amazon Web Services (AWS) qui vous permet d’exécuter du code sans provisionner ni gérer de serveurs. Node.js est un runtime JavaScript basé sur le moteur JavaScript V8 de Chrome. Ensemble, AWS Lambda et Node.js peuvent être utilisés pour créer une API RESTful qui peut être déclenchée par des événements tels qu’une requête HTTP.
Conditions préalables
Avant de créer une API RESTful avec Express.js, vous devez disposer des éléments suivants :
- Comme Express.js est un framework JavaScript, vous aurez besoin de Node.js installé pour l’exécuter. Vous pouvez télécharger Node.js depuis le site officiel.
- Éditeur de texte ou environnement de développement intégré (IDE) : pour écrire et modifier votre code API, vous aurez besoin d’un éditeur de texte ou d’un IDE. Des exemples d’éditeurs de texte populaires sont Sublime Text et Visual Studio Code, tandis que les IDE populaires sont WebStorm et Visual Studio.
- Pour écrire votre API, vous devez avoir une compréhension de base de JavaScript, car Express.js est écrit en JavaScript.
- Une familiarité avec Express.js : Express.js est un framework Web pour Node.js qui vous aide à créer rapidement et facilement des applications Web et des API.
- Les API RESTful utilisent HTTP pour la communication, vous devez donc être familiarisé avec le protocole. Il est nécessaire d’avoir une compréhension de base des méthodes HTTP (GET, POST, PUT, DELETE) et de leurs utilisations prévues, des codes d’état et du format des requêtes et des réponses HTTP.
- Pour suivre les modifications apportées à votre base de code, une bonne connaissance des systèmes de contrôle de version (VCS) tels que Git est utile.
Dès que ces conditions préalables sont en place, vous pouvez commencer à créer votre API RESTful avec Express.js.
Ajout du code
1. Créez un AWS_Node dossier à l’aide du mkdir
commande dans le terminal et cd
dans le répertoire.
mkdir aws-lambda-express-demo
cd aws-lambda-express-demo
2. Créez un app.js
fichier dans votre AWS_Node dossier.
touch app.js
Bibliothèques
1. Nous utiliserons npm
pour télécharger la dernière version du package express à partir du npm
registre et stockez-le dans le node_modules dossier dans le répertoire racine de votre projet. Les dépendances du paquet y seront également installées et stockées.
npm install express
2. Ensuite, nous allons installer un framework compatible middleware appelé serverless-http
, une bibliothèque pour créer des applications sans serveur. AWS Lambda vous permet d’écrire votre application normalement, puis de l’envelopper autour d’une fonction qui est exportée et exécutée à l’aide d’une requête HTTP. Outre Azure, Google Cloud et autres, il est également compatible avec les fournisseurs sans serveur.
npm install serverless-http
Vous pouvez installer le package globalement en exécutant npm install -g serverless-http
.
Voici un exemple d’API RESTful implémentée à l’aide de Node.js avec le framework Express.js qui implémente le GET
, POST
, DELETE
et PUT
méthodes :
Ce code crée une application Express.js et ajoute des itinéraires pour le GET
, POST
, DELETE
et PUT
méthodes. Il utilise un tableau d’éléments en mémoire pour stocker des données et utilise le find
et findIndex
méthodes pour récupérer et mettre à jour les éléments en fonction de l’identifiant fourni dans l’URL. A noter que pour le POST
et PUT
routes, vous devrez analyser le corps de la requête, ce que vous pouvez faire avec un middleware tel que body-parser.
const express = require('express');
const app = express();
const serverless = require('serverless-http');
const users = [ { id: 1, name: 'John', company: "ABC Company" }, { id: 2, name: 'Frank', company: "XYZ Inc." }, { id: 3, name: 'Ashley', company: "123 Company" }, ];app.get('/users', (req, res) => { res.json(users); });app.get('/users/:id', (req, res) => { const user = users.find(user => user.id === parseInt(req.params.id)); if (!user) res.status(404).json({ message: 'User not found' }); res.json(user); });app.post('/users', (req, res) => { const user = { id: users.length + 1, name: req.body.name, company: req.body.company, }; users.push(user); res.json(user); });app.delete('/users/:id', (req, res) => { const userIndex = users.findIndex(user => user.id === parseInt(req.params.id)); if (userIndex === -1) res.status(404).json({ message: 'User not found' }); users.splice(userIndex, 1); res.json({ message: 'User deleted' }); });app.put('/users/:id', (req, res) => { let user = users.find(user => user.id === parseInt(req.params.id)); if (!user) res.status(404).json({ message: 'User not found' }); user.name = req.body.name; user.company = req.body.company; res.json(user); }); const handler = serverless(app);const startServer = async () => { app.listen(3000, () => { console.log("listening on port 3000!"); }); }startServer();module.exports.handler = (event, context, callback) => { const response = handler(event, context, callback); return response; };
Nous écrirons la ligne console.log("listening on port 3000!");
pour indiquer que votre API est opérationnelle. Enfin, module.exports.handler
est une fonction qui prend en compte event
, context
et callback
arguments, et appelle le handler
fonction passant dans le event
, context
et callback
arguments.
Exécuter et tester le code
Démarrez le serveur en exécutant ce qui suit :
node app.js
Maintenant, notre API est opérationnelle. Vous pouvez envoyer une requête HTTP de test via Postman. En envoyant une requête à localhost:3000/users, vous devriez voir un code d’état 200 OK. Pour ce test, aucun corps de requête n’est nécessaire pour la requête entrante.
