Introduction
Application full-stack
Lorsque vous accédez à un site web via votre navigateur vous utilisez une url. Basiquement, cette url permet une communication entre ordinateurs le votre et celui où le site est hébergé. On appelle ces deux parties le client et le serveur.
Côté client (FRONTEND)
Le client c'est vous. Ce qui est chargé du côté de votre navigateur, comme les interactions avec la page. Les langages dit serveur (comme PHP, Ruby) ne traite pas les informations de ce côté, c'est plutôt du ressort des langages client comme Javascript.
Côté serveur (BACKEND)
C'est la partie qui nous intéresse. Les ordinateurs côté serveurs sont différent des ordinateurs que les clients utilisent. Il s'agit d'ordinateur assez puissant, qui tournent nuit et jour et ne servent globalement qu'à stocker et faire tourner des applications sur le web. Dans le cas d'une application web, elle va appeler via des requêtes API différents scripts qui vont s'exécuter de ce côté. Il peut s'agir d'appels à une base de données, de traitements reçus par le client à vérifier ou alors de données à lui renvoyer.
Fonctionnement
Dans le cas d'un site dynamique, contrairement au statique ou le site est envoyé en totalité au client et ce sans nécessiter de modifier la page en temps réel, le site dynamique lui va permettre une certaine interaction. En effet lorsque le client va exécuter des actions précises, comme par exemple valider un formulaire d'inscription, ces informations de connexion vont être envoyé au serveur, être vérifié et une réponse va ensuite être renvoyé côté client pour faire un affichage différent en fonction du cas d'une connexion réussie ou non.
NodeJS
Javascript permet à la base la création de site web dynamique. NodeJS est une bibliothèque se basant sur javascript mais offrant la possibilité de gérer un backend. En d'autre terme il est interprété côté serveur et non plus côté client (navigateur). Bien que Node possède ses propres caractéristiques il peut-être en partie comparée à des langages tel que PHP ou Ruby.
NodeJS permet principalement de gérer des interactions backend (côté serveur). Et l'une de ses spécificités et notamment de gérer très bien les requêtes multiples asynchrones (qui n'ont pas lieu en même temps).
Différences clés
Caractéristique | JavaScript (dans un navigateur) | Node.js |
---|---|---|
Contexte d'exécution | Navigateur (Chrome, Firefox, etc.) | Côté serveur |
Modules intégrés | Aucune, sauf via des APIs du DOM | Oui (fs, http, path, etc.) |
Gestion des fichiers | Non | Oui (via le module fs ) |
Modules tiers | Non | Oui, via npm |
Utilisation principale | Interaction utilisateur, DOM, animations | Backend, API, tâches système |
NodeJS vs les autres
Les plates-formes web traditionnelles utilisent en général un système de multi-threading (plusieurs thread en parallèles) pour gérer la concurrence en leur sein, pour chaque requête au serveur un thread se charge de la gérer, et il n’est libéré qu’une fois que les opérations demandées par la requête en question sont achevées, le thread est donc bloqué. Une grande parti des opérations web sont des appels à la base de données ou appel à une api externe ry dony très consommateur de temps et de ressources. Ainsi le serveur se retrouve donc dans l’obligation de créer autant de thread que de connexion.
Dans un contexte où le nombre de requêtes peut rapidement grimper (des milliers de connections en simultané), le multi-threading atteint rapidement ses limites, en effet il faut savoir que le serveur ne peut dépasser un certain nombre de thread en simultané, et donc à un moment donné faute de thread disponible, les nouvelles requêtes ne pourront plus être prise en charge, et vont donc devoir se mettre en attente, ce qui impactera drastiquement les performance de l’application
Node.js en revanche est single-threaded, un seul et unique thread peut tourner à la fois, ça peut sembler inefficient à première vu compte tenu de l’infrastructure multi coeurs que nous avons à disposition aujourd’hui, mais ce qu’il faut savoir, c’est qu’en contrepartie la plupart des opérations sont non bloquantes, la nature asynchrone de ces derniers élimine le besoin d’attente et permet ainsi au serveur de gérer des milliers et des milliers de connexions simultané sans que cela impacte les performances de l’application.
Les API
Qu'est-ce qu'une API ?
Une API (Application Programming Interface, ou interface de programmation d'applications) est un ensemble de règles et de conventions qui permet à des applications logicielles de communiquer entre elles. Elle agit comme un intermédiaire, facilitant l'échange d'informations ou de services entre différents systèmes.
Composantes clés d'une API :
- Interface
- Une API définit comment une application peut interagir avec une autre, souvent via des points d'accès ou des endpoints.
- Exemple : Une application web peut utiliser une API pour demander des données d'un serveur.
- Requête et réponse
- Les interactions avec une API impliquent des requêtes envoyées par un client et des réponses fournies par le serveur.
- Exemple : Une requête GET à une API peut récupérer des données, tandis qu'une requête POST peut envoyer des informations.
- Protocole de communication
- Les API modernes utilisent souvent le protocole HTTP/HTTPS.
- Format des données
- Les API utilisent des formats standardisés pour échanger des données, comme :
- JSON (JavaScript Object Notation).
- XML (Extensible Markup Language).
- Les API utilisent des formats standardisés pour échanger des données, comme :
Types d'API
- API web
- Permet à une application d'accéder à des fonctionnalités ou des données via Internet.
- Exemple : L'API de Google Maps fournit des données de cartographie.
- API système
- Fournit un accès aux fonctionnalités du système d'exploitation.
- Exemple : Une API système peut permettre d'accéder au système de fichiers.
- API de bibliothèque/framework
- Fournit des fonctionnalités prêtes à l'emploi dans des bibliothèques ou des frameworks.
- Exemple : L'API DOM pour manipuler des éléments HTML.