Meilleures pratiques pour créer des API fiables
August 18, 2022
À mesure que vos API évoluent, le besoin de les rendre fiables et robustes augmente.
Cet article aborde les meilleures pratiques pour construire des API fiables en introduisant un type spécial de proxy inverse appelé passerelle API.
Nous examinerons :
- Les problèmes des conceptions d'API traditionnelles
- Ce que sont les passerelles API
- Comment les passerelles API améliorent les API et
- Des modèles et exemples utilisant des passerelles API
Mais d'abord, que sont des API "fiables" ?
Qu'est-ce qui rend une API fiable ?
En tant que fournisseur de services, vous pourriez avoir des accords de niveau de service (SLA) avec vos clients, généralement exprimés en termes de temps de disponibilité — le temps pendant lequel le service est garanti d'être en ligne et opérationnel.
Le temps de disponibilité est une vision myope de la fiabilité. Pour comprendre ce que signifie être fiable, vous devez examiner les facteurs qui affectent le temps de disponibilité. Une fois que vous comprenez ces facteurs, vous serez en meilleure position pour construire des services fiables.
Examinons ces facteurs et les questions qu'ils posent :
- Latence : À quelle vitesse votre API répond-elle aux requêtes ?
- Sécurité : Qui peut accéder à votre API ? Est-elle sécurisée ?
- Fréquence des pannes : À quelle fréquence votre API est-elle hors service ?
- Cohérence : Vos points de terminaison d'API sont-ils constants ? Les consommateurs doivent-ils souvent modifier leur code ?
- Surveillance et reporting : Pouvez-vous observer les problèmes et les échecs de votre API ? Les rapportez-vous à vos consommateurs ?
Alors que les organisations passent à des architectures cloud-native, il devient difficile pour les équipes de développement de prendre en compte ces facteurs pour chacun de leurs services. Et à mesure que ces systèmes évoluent, il serait beaucoup plus facile de déléguer ces responsabilités à un système unique et séparé. Dites bonjour aux passerelles API !
La passerelle API, le point d'entrée unifié
Une passerelle API agit comme un intermédiaire entre vos clients et vos API. Elle acceptera tout le trafic (appels d'API) comme les proxys inverses, transmettra la requête aux services requis dans votre backend et renverra les résultats nécessaires.
Une passerelle API peut être le point central qui gère toutes les préoccupations liées à l'authentification, à la sécurité, au contrôle du trafic et à la surveillance, permettant aux développeurs d'API de se concentrer sur les besoins métier et de faciliter l'amélioration de la fiabilité.
Il existe de nombreuses offres de passerelles API open source et gérées disponibles. Dans cet article, j'utiliserai Apache APISIX.
La section suivante décrira certaines des meilleures pratiques pour rendre vos API fiables en utilisant des passerelles API.
Meilleures pratiques de fiabilité avec les passerelles API
Nous nous concentrerons davantage sur le modèle sous-jacent que sur l'implémentation réelle, car celle-ci peut varier en fonction de votre choix de passerelle API.
Je diviserai ces modèles en trois catégories :
- Authentification et sécurité
- Surveillance et observabilité
- Contrôle de version et zéro temps d'arrêt
Nous examinerons chaque catégorie en détail ci-dessous.
Authentification et sécurité
Authentification des utilisateurs
Les requêtes authentifiées avec des passerelles API sécurisent les interactions client-API. Après qu'un client s'est authentifié, votre passerelle API peut utiliser les détails du client obtenus pour un contrôle granulaire.
APISIX gère l'authentification directement via des plugins comme key-auth et jwt-auth. APISIX prend également en charge l'authentification OAuth et les systèmes de contrôle d'accès basés sur les rôles comme wolf via des plugins comme openid-connect et wolf-rbac, respectivement.
Limitation du débit
Les pics de trafic intentionnels (attaques DoS) et non intentionnels (clients faisant trop de requêtes) vers vos API peuvent les faire tomber comme un château de cartes. La mise en place de la limitation du débit améliorera la fiabilité de vos systèmes pour gérer de tels scénarios.
Vous pouvez configurer la limitation du débit sur votre passerelle API, et si le nombre de requêtes dépasse un seuil, la passerelle API pourrait soit retarder, soit rejeter les requêtes excédentaires.
Avec APISIX, vous pouvez utiliser l'un des trois plugins pour configurer des limites de débit basées sur le nombre de requêtes, le nombre de requêtes simultanées par client, et le comptage (limit-req, limit-conn, limit-count).
Surveillance et observabilité
La fiabilité de votre API et votre configuration de surveillance vont de pair. Et vous pouvez surveiller vos métriques de fiabilité en configurant la surveillance sur votre passerelle API.
Les journaux d'API et les traces fournissent des informations détaillées sur un appel d'API. Ces informations vous aideront à savoir quand votre API a échoué ou a une erreur le plus tôt possible. Les échecs silencieux conduisent à des erreurs non corrigées qui peuvent causer des problèmes à l'avenir.
Avec une certaine configuration, vous serez également en mesure de prédire et d'anticiper le trafic pour l'avenir, vous aidant à évoluer de manière fiable.
APISIX dispose de plugins qui s'intègrent avec les plateformes/spécifications de journalisation (Apache SkyWalking, RocketMQ), de métriques (Prometheus, Datadog), et de traçage (OpenTelemetry, Zipkin). Vous pouvez en savoir plus sur l'observabilité des API avec les plugins APISIX.
Contrôle de version et zéro temps d'arrêt
Déploiement en canari
Lorsque vous passez à de nouvelles versions de vos API, vous devez vous assurer que vous ne perdez pas votre trafic. Les clients doivent toujours pouvoir faire des requêtes à votre API et obtenir la bonne réponse.
Avec une passerelle API, vous pouvez configurer des déploiements en canari. Cela garantira que votre API reste fonctionnelle pendant la transition, et vous pouvez également revenir à l'ancienne version s'il y a des problèmes.
Initialement, la passerelle API acheminera tout le trafic vers l'ancienne version de votre API.
Lorsque vous avez une nouvelle version, vous pouvez configurer la passerelle API pour acheminer une partie de votre trafic vers cette nouvelle version. Vous pouvez continuer à augmenter le pourcentage de trafic vers votre nouveau service et vérifier si tout fonctionne comme prévu.
Enfin, vous pouvez acheminer tout le trafic vers votre nouvelle API.
APISIX utilise le plugin traffic-split qui vous permet de contrôler le trafic vers vos services. Vous pouvez l'utiliser pour configurer des déploiements en canari ou votre configuration de déploiement personnalisée.
Disjoncteur
Lorsque l'un de vos services en amont est indisponible ou subit une latence élevée, il doit être coupé de votre système. Sinon, le client continuera à réessayer la requête, ce qui entraînera une épuisement des ressources. Cet échec peut s'infiltrer dans d'autres services de votre système et les faire tomber.
Comme les disjoncteurs électriques isolent les composants défectueux d'un circuit, les passerelles API ont une fonction de disjoncteur qui déconnecte les services défectueux, maintenant le système en bonne santé. Le trafic vers ces services est réacheminé ou retardé jusqu'à ce que le service redevienne sain.
APISIX est livré avec un plugin api-breaker qui implémente ce modèle.
Redirections
Lorsque vous mettez à jour vos API, leurs points de terminaison peuvent subir des changements. Traditionnellement, cela signifierait que l'application cliente devrait envoyer des requêtes au /nouveau-point-de-terminaison-api
au lieu de l'/ancien-point-de-terminaison-api
, ce qui signifie que vos consommateurs doivent modifier manuellement chaque appel à ce point de terminaison d'API.
Si cela n'est pas anticipé, cela peut casser les applications clientes.
Avec une passerelle API, vous pouvez fournir une couche d'abstraction et rediriger les requêtes vers le /nouveau-point-de-terminaison-api
sans que les clients aient à modifier leurs requêtes. Avec des codes de statut et des messages de redirection appropriés, vous pouvez déprécier progressivement l'/ancien-point-de-terminaison-api
sans que vos consommateurs ne subissent de temps d'arrêt.
Avec APISIX, vous pouvez utiliser le plugin redirect pour configurer des redirections.
Conclusion
Lorsque la fiabilité devient une préoccupation primordiale, il est évident que les passerelles API sont nécessaires à mesure que de plus en plus d'organisations divisent leurs monolithes en microservices et passent à des architectures cloud-native.
Cependant, cela ne signifie pas que les passerelles API sont pour tout le monde. En fonction de la taille et de l'utilisation de votre API, une passerelle API pourrait être excessive, et vous pourriez vous en sortir en utilisant un proxy inverse avec des capacités de routage et d'équilibrage de charge de base.
Les cas d'utilisation mentionnés ici ne font qu'effleurer la surface des capacités d'une passerelle API. Vous pouvez en savoir plus sur les passerelles API et Apache APISIX sur apisix.apache.org.