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. Les fonctionnalités offertes par le service sont particulièrement intéressantes : 

  • 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éral d’API Gateway

Pour commencer, il faut créer son API ! Pour cela, deux solutions :
– votre API possède un Swagger et vous pouvez l’importer directement
– vous êtes obligé de créer chaque méthode à la main ( ce qui, entre nous, n’est pas très pratique…)

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

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. A ce moment, il est possible 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 permet de valider, côté API, que vos appels proviennent bien de l’API Gateway et non d’un autre appelant.

A l’heure actuelle, ce qui est dommage avec l’API Gateway , c’est qu’il n’est pas possible de mettre l’API Gateway 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 servir à autoriser un de vos clients (au sens utilisateur de votre API) à effectuer un certain usage pour une certaine durée. 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 au premier abord.

Sécurisation avec Amazon Cognito

Il est 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. C’est assez simple à configurer directement pour toute l’API, ce qui, on va se l’avouer, est assez bien pratique 🙂 

Statistiques et usage de l’API

Ce qui est très bien fait dans Amazon Api Gateway, c’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 est très performant. Le principal 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. Mais on espère que cela évoluera dans un futur proche !

Quelques liens pour aller plus loin sur AWS :

Spring Boot et Elastic Beanstalk