Comment bien concevoir ses API

Publié le 07 Feb 2024
pexels-realtoughcandycom-11035364.jpg

“Application Programming Interface” ou API, désigne la méthode de communication entre différents services.

Qu'est-ce qu'une API ?

Il existe différents protocoles : 

  • SOAP : Prend en charge un large éventail de protocoles de communication utilisés sur Internet, tels que HTTP, SMTP et TCP. Bien qu'il soit très répandu, il devient petit à petit obsolète,
  • RPC : Le protocole RPC (remote procedural call) envoie plusieurs paramètres et reçoit des résultats. Il est le moins utilisé parmi ces protocoles, 
  • WebSocket : Permet d'échanger des données entre un navigateur et un serveur par le biais d'une connexion persistante. Il peut être dangereux pour les utilisateurs si il est utilisés à des fins de récupérations de données,
  • REST - repose sur une approche client/serveur qui sépare les parties avant et arrière de l'API et offre une flexibilité considérable en matière de développement et de mise en œuvre.

La plupart de nos développements utilisent ou créent des API REST.

Il permet de communiquer entre différentes interfaces ou services pour permettre à nos clients et aux utilisateurs de pouvoir envoyer et recevoir des données. 

Notre enjeux est de réaliser des flux de données les plus légers possibles, avec les informations nécessaires seulement.  

La méthode standard de communication entre les systèmes passe par les API.

Il est donc essentiel de créer des API REST correctement afin d'éviter tout problème à l'avenir.

Une API bien définie doit être facile à utiliser, concise et difficile à utiliser à mauvais escient.

Les 4 méthodes généralement utilisées

Un point important à prendre en compte est que nous utilisons généralement 4 méthodes HTTP :

  • GET,
  • POST,
  • PATCH,
  • DELETE.

Il est donc inutile d'avoir un appel getAllBooks et setAllBooks, nous pourrons le gérer via l'appel de méthode HTTP.

Nos conseils pour créer et maintenir une API performantes

1. Codes d'état propres à l'utilisateur

Il existe de nombreux codes d'état HTTP, mais nous n'en utilisons généralement que quelques-uns.

N'en utilisez pas trop, mais utilisez les mêmes codes d'état pour les mêmes résultats dans l'API, par exemple,

  • 200 pour un succès général.
  • 201 pour une création réussie (POST).
  • 202 pour une demande réussie.
  • 204 pour l'absence de contenu.
  • 30X pour un contenu redirigé.
  • 400 pour les mauvaises demandes.
  • 401 pour les demandes non autorisées.
  • 403 pour les permissions manquantes.
  • 404 pour manque de ressources.
  • 5xx pour les erreurs internes.

2. Utiliser des noms simples plutôt que des phrases 

Les phrases ne doivent pas être utilisés dans les chemins d'accès.

Au lieu de cela, le chemin doit contenir les noms qui identifient l'objet auquel le point de terminaison auquel nous accédons ou que nous modifions appartient.

Par exemple, au lieu d'utiliser /getAllBooks pour récupérer tous les livres, utilisez /books.

3. Utiliser des noms de ressources au pluriel

Utilisez le pluriel pour les noms de ressources, car cela convient à tous les types de points d'accès.

Par exemple, au lieu d'utiliser /book/:id/, utilisez /books/:id/.

4. Être cohérent

Lorsque nous disons qu'il faut être cohérent, cela signifie qu'il faut être prévisible.

Lorsqu'un point de terminaison est défini, les autres doivent se comporter de la même manière. Ainsi, utilisez le même cas pour les ressources, les mêmes méthodes d'authentification pour tous les points de terminaison, les mêmes en-têtes, les mêmes codes d'état, ...

5. Rester simple

Nous devrions faire en sorte que la dénomination de tous les points de terminaison soit orientée vers les ressources, comme elles le sont.

Si nous voulons définir une API pour les livres, nous la décrirons comme suit :

/books

/books/111

Ainsi, la première API récupère tous les livres, et la seconde un livre spécifique.

6. Traiter correctement les erreurs

Il s'agit ici d'éliminer toute confusion lorsqu'une erreur se produit.

Nous devons gérer les erreurs correctement et renvoyer un code de réponse indiquant ce qui s'est passé (des erreurs 400 à 5xx).

Nous devons renvoyer certains détails dans le corps de la réponse en même temps qu'un code d'état et non pas marquer "ERROR" par exemple.

8. Sécurité ! Sécurité ! Sécurité !

Un flux doit être sécurisé, c'est à dire :

1/ Nous voulons que toutes les communications entre un client et un serveur soient protégées, ce qui signifie que nous devons toujours utiliser SSL/TLS, sans aucune exception.

2/ Il faut également autoriser l'authentification par des clés API, qui doivent être transmises à l'aide d'un en-tête HTTP personnalisé avec une date d'expiration.

9. Utiliser la pagination

Il se peut qu'avec le temps vos flux deviennent gros, pensez dès le départ à mettre en place une pagination.

Nous recommandons d'utilisez page et limit pour le numéro de la page et le nombre de résultats dans celle-ci

Par exemple, /books?page=10&limit=20

10. La DOC !

Un projet ne peut pas être maintenable sans documentation à jour. 

 

Pour finir 

Il existe mille et une façon de développer des API.

De notre côté, lorsque nous en avons la possibilité, nous partons sur une stack Symfony avec API Platform ce qui nous permet d'avoir des projets propres, optimisés et maintenable. 

Si vous voulez aller plus loin, nous vous conseillons de consulter les spécifications Swagger et d'utiliser des outils puissants comme Postman ou encore Insomnia.

 

(source image : https://www.pexels.com/photo/programmer-holding-a-paper-cutout-with-an-api-quote-11035364/)

Ils nous font déjà confiance !

Pourquoi pas vous ?