From b303276454f326a4cf4e7115cb026490ded515de Mon Sep 17 00:00:00 2001
From: Anthony Perso <borghi.ant@gmail.com>
Date: Thu, 6 Jul 2023 22:25:41 +0200
Subject: [PATCH] ajout doc API Rest

---
 source/concept/rest/general.md           | 120 +++++++++++++++++++++++
 source/concept/rest/images/archi-api.png | Bin 0 -> 28046 bytes
 source/concept/rest/index.rst            |  14 +++
 3 files changed, 134 insertions(+)
 create mode 100644 source/concept/rest/general.md
 create mode 100644 source/concept/rest/images/archi-api.png
 create mode 100644 source/concept/rest/index.rst

diff --git a/source/concept/rest/general.md b/source/concept/rest/general.md
new file mode 100644
index 0000000..38d7653
--- /dev/null
+++ b/source/concept/rest/general.md
@@ -0,0 +1,120 @@
+# Introduction
+
+## Qu'est ce qu'une API ?
+
+En réalité, l’API ou Application Program Interface est, comme son nom l’indique, une interface servant à communiquer entre deux ou plusieurs applications (appareils, services, etc.) distinctes. Elle permet d’effectuer une requête spécifique et de recevoir une réponse, formulée sous un format établi.
+
+Elle se base donc sur une architecture client-serveur, sur laquelle le client est celui qui effectue la demande et le serveur, celui qui traite et renvoie la réponse. Le client n’a pas à se soucier de la manière dont ce traitement est fait, mais récupère juste ce qu’il a demandé. Le programme du côté du serveur peut donc être élaboré et écrit en n’importe quel langage. Cela n’affectera pas la réponse obtenue par le client, et ce, quelles que soient les technologies utilisées par celui-ci. Il suffit que ces technologies puissent interpréter le résultat communiqué et le tour est joué.
+
+Grâce à cette interface, les développeurs diminuent le volume de code à produire en n’effectuant que les liens entre les différentes APIs nécessaires pour leurs programmes et adaptés à leurs besoins et à ceux de l’entreprise.
+
+Les API permettent également de réutiliser à mainte reprise la même ressource, ce qui offre une flexibilité importante à chaque ressource.
+
+## Qu'est ce qu'une API REST ? 
+
+Le mot REST est l’abréviation de Representational State Transfer. Une API est dite RESTful lorsqu’elle répond à certaines contraintes architecturales. En gros, c’est un ensemble de règles à respecter afin de rendre l’interaction entre le client et le serveur le plus flexible, le plus simple et le plus rapide possible. C’est pour cela que les entreprises la préfèrent aux autres manières de faire appel à des APIs.
+
+Elle se base essentiellement sur le protocole HTTP pour l’envoi de requêtes relatives au CRUD (création, récupération, modification ou suppression). L’interaction avec les ressources basées sur un serveur s’effectue à partir d’un URI. 
+
+Il existe plusieurs formats dans lesquels ces dernières peuvent être retournées, à savoir : JSON, XML, XLT, YAML ou HTML.
+
+Le rôle premier d’une API REST est de servir d’intermédiaire entre le client et le serveur. C’est-à-dire que c’est elle qui réceptionne les requêtes émises par le client, le transmet à l’entité demandée au serveur, prend les réponses données par ce dernier puis les retransmettent au client.
+
+![archi_api](./images/archi-api.png)
+
+## Principes clés
+
+### L'URI comme identifiant de la ressource
+
+L'URI (ou le endpoint) permet d'identifier clairement un ressources.
+
+Exemple : **/rest/vx/clients** Permet d'agir sur la ressource gérant les clients.
+
+L'URI permet également de percevoir les relation entre les objets.
+
+Exemple : **/rest/vx/clients/{id}/commandes** Permet d'agir sur la ressource gérant les commandes d'un client spécifique.
+
+### Les verbes HTTP Pour identifier les opérations
+
+La seconde règle d’une architecture REST est d’utiliser les verbes HTTP existants plutôt que d’inclure l’opération dans l’URI de la ressource. Ainsi, généralement pour une ressource, il y a 4 opérations possibles (CRUD) :
+
+- Créer (create)
+- Afficher (read)
+- Mettre à jour (update)
+- Supprimer (delete)
+
+HTTP propose les verbes correspondant :
+
+- Créer (create) => POST
+- Afficher (read) => GET
+- Mettre à jour (update) => PUT
+- Supprimer (delete) => DELETE
+
+### Les réponses HTTP comme représentation de la ressource
+
+Il est important d’avoir à l’esprit que la réponse envoyée n’est pas une ressource, c’est la représentation d’une ressource. Ainsi, une ressource peut avoir plusieurs représentations dans des formats divers : HTML, XML, CSV, JSON, etc.
+
+C’est au client de définir quel format de réponse il souhaite reçevoir via l’entêteAccept. Il est possible de définir plusieurs formats.
+
+### L'utilisation du header authorization pour le jeton de connexion
+
+ il est primordial de sécuriser une API REST. En effet, nous ne sommes jamais à l’abri d’une personne malveillante souhaitant dérober des données que nous exposons, surtout à travers le web. Plusieurs manières sont envisageables et à mettre en place pour qu’une API soit le moins vulnérable possible :
+
+- Utiliser le protocole HTTPS permet de chiffrer les échanges entre les deux parties, à savoir le client et le serveur ;
+- Mettre en place un système d’authentification limite les personnes pouvant échanger avec l’API. Vous pouvez pour cela utiliser, par exemple, Json Web Token (JWT). JWT sert à identifier un utilisateur et à lui donner l’accès à l’API sur une durée déterminée. OAuth2 est également un excellent moyen d’authentifier un client pour lui prodiguer les autorisations nécessaires pour la consommation de l’API.
+- Utiliser une clé d’API ainsi qu’une clé secrète permet de reconnaitre les applications accédant à l’API. Cela permet également de signer les requêtes effectuées par celles-ci.
+
+## REST vs SOAP
+
+La première raison pour laquelle ces deux APIs sont comparées est sans doute que pendant très longtemps, avant l’apparition de l’API REST, SOAP a été la référence en termes d’utilisation des interfaces. En effet, ayant vu le jour en 1998, c’est un protocole se basant sur XML permettant d’interagir avec de nombreuses sortes d’autres protocoles tels que HTTP, UDP, TCP, etc.
+
+Cependant, malgré cette puissance qu’il détient, SOAP a tendance à occuper plus de bande passante et par conséquent de devenir assez lent. De plus, il nécessite l’apprentissage du XML et une certaine coordination entre le concepteur du code client et serveur afin d’éviter les erreurs qui peuvent être fatales pour chacun d’eux. Il n’est donc pas assez flexible pour que les applications actuelles puissent évoluer.
+
+C’est à cause de tout cela que, de nos jours, la plupart des développeurs privilégient l’utilisation d’une API RESTful.
+
+# Conception d'une API REST
+
+## Ressources
+
+La première étape consiste à identifier les ressources exploitables à travers l'API et comment elles sont exploitables.
+
+Cette étape est à mettre en lien avec les droits sur la Base de données ou les droits sur le système de fichier.
+
+## Endpoint et opération
+
+Il faut ensuite définir les endpoints, c'est à dire les ressources et les relations à mettre en place, à partir de là les endpoint devrait apparaitre de manière trés simple.
+
+Les opérations seront quant à elles le prolongement direct des droits sur votre base de onnées pour chacune des ressources.
+
+## Requêtes 
+
+Reste à mettre en place les contraintes techniques lié au développement d'un API REST : 
+
+- Format consommable en entrée : 
+  - Query parameters
+  - Headers
+  - Content-type acceptables en entrée
+- Format de donnée délivrable en sortie
+- Authentification
+- Headers de sécurité
+
+# Spécificité d'une API Vitis
+
+L'API PHP de Vitis va vous permettre de définir vos ressources et des les rendre exploitables facilement.
+
+Au niveau des spécificté s des requêtes : 
+- En entrée sont pris en compte 
+  - les query parameters
+  - Les body dont le content-type est de type 
+    - Multipart/Form-data
+    - application/x-www-urlencode
+    - application/json
+- Le header accpet permet de définir le format de récupération de la donnée, deux valeur possible : 
+  - application/json
+  - application/xml
+- Un token JWE ou systéme custom équivalent est utilisé pour gérer l'authentification.
+
+
+Une bonne partie de la sécurité est géré en flux commun avant l'arrivée dans votre code.
+
+Le tout s'appuyant sur le framework Symfony.
\ No newline at end of file
diff --git a/source/concept/rest/images/archi-api.png b/source/concept/rest/images/archi-api.png
new file mode 100644
index 0000000000000000000000000000000000000000..0438d03e8d6a564d345e4d779ff96dd450985149
GIT binary patch
literal 28046
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
Dvi2Ze

literal 0
HcmV?d00001

diff --git a/source/concept/rest/index.rst b/source/concept/rest/index.rst
new file mode 100644
index 0000000..3bfa1a2
--- /dev/null
+++ b/source/concept/rest/index.rst
@@ -0,0 +1,14 @@
+API REST
+============================================
+
+
+Nous allons parler ici de la conception d'une API REST. 
+
+A quoi ça sert, pourquoi l'utiliser, comment ça fonctionne ?
+
+============================================
+
+.. toctree::
+   :maxdepth: 2
+
+   general.md
\ No newline at end of file
-- 
GitLab