Comprendre en 5 minutes les API

Une API (Application Programming Interface) est un ensemble normalisé de classes, de méthodes, de fonctions et de constantes qui sert de façade par laquelle un logiciel offre des services à d’autres logiciels, afin d’échanger des données et des fonctionnalités.

Types d’API

Il existe quatre principaux types d’API couramment employés.

  • API publiques :

Une API publique (ou API externe), est une API ouverte pour tous les développeurs, qui propose l’accès à ses données et ses services sous forme de libre-service. Cela suppose généralement une authentification et une autorisation modérées.

  • API privées :

Une API privée (ou API interne), est une API créée et utilisée uniquement au sein de l’entreprise. Ce type d’API n’est pas accessible pour des développeurs externes.

  • API partenaires :

Une API partenaire est une API qui est partagée uniquement à une liste de développeurs ou d’entreprises bien définie. Les droits d’accès à l’API sont de fait plus restrictifs que ceux d’une API publique.

  • API composites :

Une API composite est une combinaison de plusieurs API. Cela permet de grouper plusieurs requêtes en un seul appel API. Cette réduction du nombre d’appels améliore la vitesse et les performances de l’API. Ce type d’API est généralement utilisé dans les micro services.

Protocoles et architectures d’API

Il existe plusieurs protocoles et architectures d’API pour permettre cet échange de données et de fonctionnalités. Ils sont régis par des règles, des structures, et des contraintes différentes.

REST

L’architecture REST (Representational State Transfer) est un style d’architecture qui suit plusieurs principes fondamentaux:

  • Client-Serveur : les responsabilités sont séparées entre le client et le serveur. Le client envoie les requêtes au serveur, et le serveur retourne les réponses au client. Ils doivent être indépendants : un changement sur l’un ne doit pas impacter l’autre.
  • Stateless : (Sans état) Chaque interaction client-serveur est indépendante. Le serveur ne stocke pas les données des requêtes précédentes.
  • Cache : Les réponses du serveur peuvent être mises en cache, pour améliorer les performances et éviter d’appeler le serveur pour récupérer des données qui n’évoluent pas ou peu.
  • Layered : (Système multicouche) Architecture qui permet d’avoir plusieurs serveurs intermédiaires qui peuvent améliorer l’extensibilité du système en mettant en place une répartition de charge et un cache partagé.
  • Interface uniforme : Le client et le serveur communiquent avec le protocole HTTP, qui possède plusieurs méthodes de communication (GET, POST, PUT, DELETE, …). Chaque requête possède un URI (Uniform Resource Identifier), et renvoie des données sous une forme prédéfinie (JSON, XML, …).

Les API REST sont majoritairement utilisées pour les sites web accessibles au public. Elles permettent d’avoir une communication relativement simple entre le client et le serveur.

Ce sont des API flexibles, qui peuvent s’adapter à différents types de données (même si le JSON est le plus répandu).

SOAP

SOAP (Simple Object Access Protocol) est un protocole d’échange d’informations utilisant le XML (Extensible Markup Language).

Ce protocole définit de façon stricte comment les messages doivent être envoyés, et ce qui doit être inclus dedans. Cela fait de SOAP un protocole plus sécurisé que REST, mais qui le rend en contrepartie plus lourd au niveau du code, et plus compliqué à implémenter de façon générale.

SOAP utilise généralement le protocole HTTP, mais contrairement au REST, il n’est pas restreint à celui-ci, et peut utiliser le SMTP par exemple.

Il est généralement utilisé pour les applications liées au paiement, qui demandent une haute sécurité, ou pour des API internes.

RPC

RPC (Remote Procedural Call) est un protocole qui invoque des actions ou des processus exécutables sur un serveur.

Il peut aussi bien utiliser du JSON (avec le protocole JSON-RPC) ainsi que du XML (avec XML-RPC).

Contrairement aux API REST, le RPC n’accepte que les requêtes de type GET ou POST.

Le RPC se démarque par des payloads plus légers, ce qui améliore nettement les performances des requêtes client-serveur.

Dernièrement, c’est le framework gRPC, développé par Google qui s’est démarqué grâce à toutes ses améliorations apportées au protocole RPC. Il utilise HTTP/2 pour le transport des données, Protobuf (Protocol Buffers) comme format de sérialisation, qui encode les données envoyées et reçues pour minimiser le poids des requêtes, et encore améliorer les performances.

GraphQL

GraphQL est un langage de requête créé par Facebook, qui propose une alternative à REST. Il utilise une architecture basée sur un système de schéma de requêtes typé qui permet d’éviter les problèmes d’over/under-fetching, c’est à dire que le client récupère exactement ce qu’il demande au serveur, sans surplus de données inutiles.

Contrairement aux autres protocoles et architectures d’API, c’est le client qui définit les données à récupérer, et non pas le serveur qui décide quelles données à renvoyer.

Cela permet d’améliorer les performances sur les requêtes faites au serveur en s’assurant qu’il n’y aura pas de surplus d’informations, mais également de s’assurer que les données demandées sont bien existantes, et dans le bon type demandé.

Ce langage possède cependant quelques limitations, comme le fait de ne pas pouvoir gérer facilement l’upload & le download de fichiers. Néanmoins, chez TheCodingMachine nous sommes fans et avons développé notre propre librairie PHP pour aller avec GraphQL : GraphQLite.

Si vous souhaitez aller plus loin dans votre compréhension du secteur et du vocabulaire tech, n’hésitez pas à lire notre : livre blanc « Do you speak technique ? »

From Paris to London, notre CTO anime un workshop à la PHP UK Conference 2020 !

ITW : David Négrier, notre CTO, nous raconte l’expérience de son 1er workshop PHP

« C’est vraiment sympa d’aller dans une conférence où on peut rencontrer des gens de la communauté PHP »
Le 21 février, David s’est rendu au coeur de la ville de Londres, au sein de la célèbre PHP UK Conference. L’opportunité pour lui d’animer un workshop centré sur PHP et GraphQL.
Chaque année, cette conférence vise à proposer un programme complet, accompagné de nombreux speakers, sponsors, et participants. Beaucoup de partage de connaissance et d’échange se font dans cet event, c’est ce qu’affirme David dans son interview.

1. Combien de temps a duré ton workshop ?

C’était une séance de 2h15. J’ai d’abord fait une présentation de 1h sur GraphQL en général ; l’écosystème autour de GraphQL en PHP ; et GraphQLite qui est la librairie PHP que nous avons développée, permettant de faire du GraphQL beaucoup plus facilement.
Suite à ça, j’ai fait une petite démo pour ensuite passer à l’atelier autour de GraphQLite.

2. Combien de personnes étaient présentes à ton workshop ?

Beaucoup, je dirais qu’il y avait une bonne cinquantaine de personnes présentes et accompagnées de leur machine (ordinateur).

3. C’est ton 1er workshop en tant qu’intervenant ?

J’ai déjà fait de nombreux talks, la plupart en France, un à San Francisco en 2007, mais je n’avais jamais animé de workshop. Et en particulier en anglais!

4. Tu étais stressé de présenter ce workshop ?

J’avoue que j’étais un peu stressé. D’ailleurs, j’ai passé plusieurs semaines à le préparer. J’ai même pris le soin d’amener une clé USB pour chaque participant, contenant le projet installé.
Aussi, je stressais par rapport à mon accent anglais, j’ai essayé de m’appliquer oralement pour qu’on me comprenne.

 5. As-tu rencontré des difficultés à mener ce workshop ?

La seule difficulté était le temps. Intervenir dans un workshop de 50 personnes pour seulement 2h, ça passe très vite, et par conséquent ça ne laisse pas assez de place pour l’interaction.
Dans ces situations, on sait qu’il y a des personnes qui n’arriveront pas à suivre, mais il faut malgré tout faire en sorte qu’elles ne s’ennuient pas. Ainsi, la difficulté était de trouver un bon équilibre entre le manque de temps et la pertinence du workshop, mais aussi entre la présentation théorique et les travaux pratiques.
Lors de l’atelier GraphQLite, j’ai tout de même essayé au maximum d’accorder du temps à chaque participant.

6. As-tu assisté à d’autres workshops de la PHP UK Conference en tant que participant ?

Oui bien sûr, j’ai pu participer à 2 ateliers très intéressants dont « ATDD Bowling – A Practical BDD Workshop » présenté par John Behrens, et « Introduction to Time Series » présenté par David McKay.

7. Tu as pu discuter avec des personnes de ton workshop et des personnes en dehors de ton workshop ?

En effet, à la fin de mon workshop, j’ai eu plus de temps pour discuter avec certains participants. D’ailleurs, j’ai pu aider un autre speaker à mettre en place une extension PHPStan. Ces moments d’interaction avec la communauté PHP sont vraiment importants. J’ai même pu rencontrer Georges Banyard, qui travaille sur la gestion des erreurs dans le coeur du langage PHP, un sujet qui nous intéresse énormément à TheCodingMachine puisque nous avons écrit une librairie PHP pour résoudre ce genre de problème.
Puis, j’ai passé la majorité de mon temps à me balader allant à la rencontre d’autres participants & intervenants. J’ai croisé Mathieu Napoli, l’intervenant du workshop « Serverless PHP applications with Bref », une personne que j’admire avec qui j’ai eu l’occasion de discuté plusieurs fois lors d’autres événements.
Bref, c’est vraiment sympa d’aller dans une conférence où on peut rencontrer des gens de la communauté PHP.

8. Si c’était à refaire tu le ferais ? Quelles améliorations apporterais-tu ?

Sans aucune hésitation, oui, je ferais d’autres workshop avec plaisir. C’était vraiment une belle expérience, j’ai rencontré beaucoup de monde, ainsi que des gens que j’avais déjà discuté dans d’autres événements.
Pour mon prochain workshop, je pense que j’essaierai de trouver une solution pour davantage interagir avec les participants.
PHP UK Conference TheCodingMachine

Quelques témoignages des participants au workshop de David :

Témoignage de Chris Hogben
Wow. This tutorial was amazing and could have easily have been a full-day workshop. As Adam says, it was really well prepared with hands-on examples that were easy to follow and see what was happening at each stage. The amount of information provided for each concept was enough to understand and add value, but not too much to slow down the session. It did feel slightly rushed, but this was probably to be expected given the amount of content. Thanks David for this session! 🙂
Témoignage d’Adam Cooper
One of the best prepared workshops I’ve seen in a long time with about as much of an in depth review of the tech/libraries that you could fit into a 2 hour slot.
Merci à David Négrier pour cet interview, retrouvez-le prochainement :

N’hésitez pas à réserver vos places !