AXOPEN

API Gateway – Retours d’expérience

API Gateway d’Amazon Web Service (AWS) est un service qu’on pourrait comparer à une sorte de super proxy pour vos APIs.

A quoi sert API Gateway ?

L’objectif d’API gateway est de pouvoir proposer une API sur le WEB. Ce qui est intéressant, ce sont les fonctionnalités offertes par le service à savoir:

  • Possibilité de pouvoir exposer plusieurs versions de l’API en même temps
  • Possibilité d’exporter la documentation de l’API en swagger
  • Possibilité d’importer son API au format SWAGGER
  • Sécurisation des endpoints avec soit une clé d’API soit un Amazon Cognito
  • Possibilité de définir des limites d’appels par client (politique d’usage de son API) (Plan d’utilisation)
  • La possibilité d’avoir des certificats clients

Fonctionnement générale d’API Gateway

Pour commencer, il faut créer son API, pour cela, soit votre API possède un Swagger et vous pouvez l’importer directement soit vous êtes obligé de créer chaque méthode à la main, ce qui n’est pas très pratique. 

Une fois que votre API est définie, il vous faut spécifier ou sont les endpoints de votre API. Par exemple, votre appel GET /pets, il faut aller définir ou trouver la ressource. Pour cela, il faut aller dans l’interface et choisir l’URL ou le service AWS à appeler correspondant à cette méthode. De même, vous pouvez configurer pour chacun des appels, les headers et les paramètres d’entrées de la méthode. Ce qui est très pratique si vous avez plusieurs versions de l’API qui n’ont pas les mêmes paramètres d’entrées.

Une fois l’API documentée, il faut réaliser « un déploiement », ce qui correspond généralement à une version de l’API ou à un Environnement (dev, rec, prod). Cette notion s’appelle l’ETAPE.

Une fois sur l’ETAPE, l’API est prête à être directement appelée. L’URL d’accès se situe en haut de la page. Il est possible à ce moment d’appliquer des restrictions d’appels et d’utiliser le certificat client. 

Qu’est-ce que le certificat client ?

Le certificat client est un certificat SSL qui va vous permettre de valider côté API que vos appels proviennent bien de l’API Gateway et pas d’un autre appelant. En effet, ce qui est dommage avec l’API Gateway à l’heure actuelle, c’est qu’il n’est pas possible de mettre l’API Gateway et publique et d’appeler une ressource privée dans un VPC de votre AMAZON. Par exemple dans notre cas, il n’était pas possible d’appeler un Elastic Beanstalk dans un VPC. Il faut donc bien sécuriser d’une manière ou d’une autre. Pour cela, les certificats clients peuvent permettre cette validation même si ce n’est pas l’idéal.

Clé d’API (Amazon Gateway)

Une clé d’API peut service à autoriser un de vos clients (au sens utilisateurs de votre API) pour une certaine durée et un certain usage. On peut donc configurer des restrictions par clé. Il est possible d’exporter l’usage par clé, ce qui peut permettre une facturation à vos clients.

Par contre, il n’est pas forcément évident d’obliger à saisir une clé pour chaque appel. Le besoin de clé se configure au niveau de l’appel dans la partie Ressource ce qui n’est pas évident de premier abord.

Sécurisation avec Amazon Cognito

Il est aussi possible de coupler la sécurité avec un Amazon Cognito. Pour rappel ce service d’AWS permet d’assurer une inscription et une gestion de vos utilisateurs avec des comptes tels que Facebook, ou Google, ou tout simplement avec un LDAP ou un AD d’entreprise. Ceci est très facile à configurer directement pour toute l’API, ce qui avouez le est bien pratique.

Statistique et usage de l’API

Ce qui est très bien fait dans Amazon Api Gateway est la possibilité de visualiser simplement l’usage de l’API avec des statistiques très précises sur ce qui se passe. Les temps de réponse, la latence…  

Dernier point intéressant, il est possible de mettre du cache sur l’API directement depuis la console ce qui permet de très facilement utiliser API Gateway comme un proxy cache.

Points négatifs d’API Gateway

De manière générale, API Gateway est très facile à prendre en main et très performance. Le point négatif à nos yeux est la faible capacité de sécuriser les ressources en aval de l’API Gateway avec en particulier la non possibilité d’utiliser les VPC. Surement quelque chose qui évoluera dans un futur proche.

Quelques liens pour aller plus loin sur AWS :

Spring Boot et Elastic Beanstalk