web:api

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
web:api [2023/03/04 15:57] – [Principes REST] jcheronweb:api [2023/04/25 02:42] (Version actuelle) – [Liens] jcheron
Ligne 1: Ligne 1:
 ====== APIs web ====== ====== APIs web ======
 ===== REST ===== ===== REST =====
-REST (Representational State Transfer) ou RESTful permet de construire des api (Application Programming Interface ou Web Service), pour permettre la communication entre applications.+REST (Representational State Transfer) ou RESTful permet de construire des api (Application Programming Interface ou Web Service), pour permettre la communication entre applications.\\
 REST est fondé sur un ensemble de conventions et de bonnes pratiques à respecter et non sur une technologie à part entière. L’architecture REST utilise les spécifications du protocole HTTP, plutôt que de réinventer une surcouche (comme le font SOAP ou XML-RPC par exemple). REST est fondé sur un ensemble de conventions et de bonnes pratiques à respecter et non sur une technologie à part entière. L’architecture REST utilise les spécifications du protocole HTTP, plutôt que de réinventer une surcouche (comme le font SOAP ou XML-RPC par exemple).
  
Ligne 12: Ligne 12:
   - un paramètre comme jeton d’authentification   - un paramètre comme jeton d’authentification
  
-=== URI ===+=== 1- URI ===
  
 REST se base sur les URI pour identifier une ressource. Une API doit définir ses URI (et donc ses URL) de manière précise, en tenant compte des contraintes de lisibilité de REST, en prenant en compte la hiérarchie des ressources et la sémantique des URL : REST se base sur les URI pour identifier une ressource. Une API doit définir ses URI (et donc ses URL) de manière précise, en tenant compte des contraintes de lisibilité de REST, en prenant en compte la hiérarchie des ressources et la sémantique des URL :
Ligne 20: Ligne 20:
  
 **Liste des clients** **Liste des clients**
-<sxh>+<sxh ;gutter:false>
 NOK : https://myapi.com/client NOK : https://myapi.com/client
 OK : https://myapi.com/clients OK : https://myapi.com/clients
 </sxh> </sxh>
 +
 +**Liste des clients avec filtre et tri**
 +<sxh ;gutter:false>
 +NOK : https://myapi.com/clients/filtre/caen/tri/asc
 +OK : https://myapi.com/clients?filtre=caen&tri=asc
 +</sxh>
 +
 +**Affichage d'un client**
 +<sxh ;gutter:false>
 +NOK : https://myapi.com/clients/display/87
 +OK : https://myapi.com/clients/87
 +</sxh>
 +
 +**Commandes d'un client**
 +<sxh ;gutter:false>
 +NOK : https://myapi.com/clients/commands/87
 +OK : https://myapi.com/clients/87/commands
 +</sxh>
 +
 +**Une Commande d'un client**
 +<sxh ;gutter:false>
 +NOK : https://myapi.com/clients/commands/87/1568
 +OK : https://myapi.com/clients/87/commands/1568
 +</sxh>
 +
 +=== 2 - Méthodes HTTP ===
 +Utilisation des verbes HTTP existants (méthodes) plutôt que d’inclure l’opération dans l’URI de la ressource.
 +
 +^Action ^ Méthode (verbe) ^
 +|Créer (create) | POST |
 +|Afficher (read) | GET |
 +|Mettre à jour (update) | PUT |
 +|Supprimer (delete) | DELETE |
 +
 +
 +**Créer un client**
 +<sxh ;gutter:false>
 +NOK : GET https://myapi.com/clients/create
 +OK : POST https://myapi.com/clients
 +</sxh>
 +
 +**Afficher un client**
 +<sxh ;gutter:false>
 +NOK : GET https://myapi.com/clients/display/87
 +OK : GET https://myapi.com/clients/87
 +</sxh>
 +
 +**Mettre à jour un client**
 +<sxh ;gutter:false>
 +NOK : POST https://myapi.com/clients/update/87
 +OK : PUT https://myapi.com/clients/87
 +</sxh>
 +
 +**Supprimer un client**
 +<sxh ;gutter:false>
 +NOK : GET https://myapi.com/clients/delete/87
 +OK : DELETE https://myapi.com/clients/87
 +</sxh>
 +
 +=== 3 - Représentation de ressources ===
 +
 +La réponse HTTP reçue est une représentation de ressource, et non la ressource elle même :
 +
 +En fonction de la requête effectuée et de son en-tête **Accept**, plusieurs formmats de réponses sont envisageables :
 +  * JSON
 +  * XML
 +  * HTML
 +  * CSV
 +  * etc...
 +
 +**Exemple**
 +
 +<sxh ;gutter:false>
 +GET /clients
 +Host: myapi.com
 +Accept: application/xml
 +</sxh>
 +
 +
 +=== 4 - Liens = relation entre ressources ===
 +Les liens d'une ressource indiquent les relations qu'elle peut avoir avac d'autres. Pour indiquer la nature de la relation, l’attribut **rel** doit être spécifié sur tous les liens.
 +L’IANA donne une liste de relation parmi lesquelles :
 +
 +  * contents
 +  * edit
 +  * next
 +  * last
 +  * payment
 +  * etc...
 +
 +[[https://www.iana.org/assignments/link-relations/link-relations.xhtml|Liste complète sur le site de l’IANA]]
 +
 +=== 5 - Authentification par jeton ===
 +
 +REST étant par principe **stateless** (pas de session HTTP par exemple), l'authentification se fait par jeton d’authentification.
 +
 +Chaque requête est envoyée avec un jeton (token) passé en paramètre **GET** de la requête ou dans les headers. Ce jeton temporaire est obtenu en envoyant une première requête d’authentification puis en le combinant avec les requêtes.
 +
 +[[https://jwt.io/|JWT]] est l'un des standards d'authentification les plus utilisés.
 +
 +===== Liens =====
 +  * [[https://api-platform.com/|API Platform]]
 +  * [[https://jamstack.org/|JamStack]]
 +  * [[https://www.openapis.org/|OpenAPI]]
 +  * [[https://graphql.org/|GraphQL]]
 +  * [[https://strapi.io/|Headless CMS Strapi]]
  
  • web/api.1677941848.txt.gz
  • Dernière modification : il y a 2 ans
  • de jcheron