DEV Community

Erwan Deruelle
Erwan Deruelle

Posted on • Originally published at d3rwan.github.io on

Régnez sur vos APIs avec Kong

Mashape est un catalogue public d’API, permettant à ses utilisateurs de partager ses APIs ou d’utiliser celle des autres. Afin de sécuriser et gérer ces quelques 15000 micro-services présents dans leur catalogue, Mashape a crée Kong, une solution d’API management.

Kong est une solution open-source basée sur NGinx, qui permet de répondre aux contraintes des milliards de requêtes par mois que doit gérer Mashape.

Kong s’appuie également sur une base de données Cassandra (possibilité d’utiliser PostgreSQL), ainsi que sur un ensemble de plug-ins. Par défaut, la solution offre déjà un socle de modules permettant l’authentification, la sécurité, le rate-limiting ou encore la supervision. Il vous sera également possible si besoin de créer vos propres plug-in (cf. la documentation officielle)

Dans votre infrastructure, l’API manager se place en amont des services à exposer (approche reverse-proxy), et prendra en charge les fonctionnalités que vous lui déléguez. Dès lors, chacun de vos services métiers n’aura plus à gérer ces taches techniques et pourra se concentrer sur son coeur métier.

Architecture Legacy vs. Architecture orientée APIArchitecture Legacy vs. Architecture orientée API

Alors, que vous deviez gérer un ensemble de micro-services, une API qui commence à devenir populaire ou simplement un backend web/mobile, il est peut-être temps de commencer à gérer vos APIs.

Getting started

Dans cette partie, nous utiliserons comme API partenaire celle exposée par le site http://anapioficeandfire.com/ et qui expose les données relatives à l’univers de Game of Thrones.

Pour déployer Kong, nous utiliserons des conteneurs Docker orchestrés par docker-compose. La configuration de la stack est la suivante :

  • Démarrer la stack

Depuis le répertoire contenant le fichier docker-compose.yml décrit précédemment

    # run (daemon)
    docker-compose up -d
    # show logs
    docker-compose logs -f
Enter fullscreen mode Exit fullscreen mode

Une fois la stack démarrée, nous pouvons accéder à ses différents composants

localhost si vous utilisez Docker sous Mac ou Linux, l’adresse de docker-machine sinon

  • API Manager - localhost:8001

    • API grâce à laquelle nous allons administrer Kong
  • API Gateway - localhost:8000

    • API grâce à laquelle nous accéderons à nos API
  • Kong Dashboard - localhost:8080

    • IHM open-source qui utilise l’API d’administration afin d’offrir une interface d’administration

A présent, nous allons pouvoir utiliser notre API manager.

Dans la suite de l’article, nous directement l’API via des appels REST, mais nous pourrions également utiliser l’IHM de Kong Dashboard pour configurer Kong

How to

Créer une API

curl -i -X POST http://localhost:8001/apis/ \
 --data 'name=GOT' \
 --data 'upstream_url=http://anapioficeandfire.com/api/' \
 --data 'request_path=/got/' \
 --data 'preserve_host=false'\
 --data 'strip_request_path=true'
Enter fullscreen mode Exit fullscreen mode

On crée une API qu’on appelle GOT et qui pointe vers notre API partenaire, sur le path /got/ de notre API gateway. On peut désormais y accéder via l’API gateway

curl -i -X GET http://localhost:8000/got/characters/583
Enter fullscreen mode Exit fullscreen mode

Activer l’authentification

curl -i -X POST http://localhost:8001/apis/GOT/plugins/ \
  --data 'name=key-auth' \
  --data 'config.key_names=apiKey'
Enter fullscreen mode Exit fullscreen mode

On associe le plugin key-auth de Kong à notre API qui ne sera donc plus accessible sans token d’authentification

curl -i -X GET http://localhost:8000/got/characters/583
Enter fullscreen mode Exit fullscreen mode

Ajouter un utilisateur

curl -i -X POST http://localhost:8001/consumers/ \
  --data "username=erwan"
Enter fullscreen mode Exit fullscreen mode

Autoriser ce nouvel utilisateur à accéder à l’API

curl -i -X POST http://localhost:8001/consumers/erwan/key-auth \
  --data "key=secret"
Enter fullscreen mode Exit fullscreen mode

Notre API est donc bien sécurisée, et seulement accessible avec la clé d’authentification

curl -i -X GET [http://localhost:8000/got/characters/583](http://localhost:8000/got/characters/583)
curl -i -X GET [http://localhost:8000/got/characters/583](http://localhost:8000/got/characters/583)?apiKey=secret
Enter fullscreen mode Exit fullscreen mode

Activer le rate-limiting

curl -X POST http://localhost:8001/apis/GOT/plugins \
  --data "name=rate-limiting" \
  --data "config.hour=2"
Enter fullscreen mode Exit fullscreen mode

Notre API est à présent limitée à 2 appels par heure.

curl -i -X GET http://localhost:8000/got/characters/583?apiKey=secret
curl -i -X GET http://localhost:8000/got/characters/583?apiKey=secret
curl -i -X GET http://localhost:8000/got/characters/583?apiKey=secret
Enter fullscreen mode Exit fullscreen mode

L’accès à notre API peut à présent se faire via notre API manager après seulement quelques minutes de configuration. Grâce à Kong, on pourra par la suite ajouter des contraintes d’accès, des règles de réécriture de requêtes ou encore du monitoring sans devoir modifier notre coeur métier, ou demander à nos partenaires de le faire.

N’hésitez pas non plus à parcourir le site de Kong, et sa documentation plutôt complète pour voir tout ce qu’il pourrait faire pour vous.

Site officiel - https://getkong.org/

Par ailleurs, vous pourrez retrouver la configuration décrite précédemnt directement sur ce repo github

Et devenez le king de vos API’s!

Top comments (1)

Collapse
 
gdahboy profile image
gdahboy

A great article ... i was looking for this kind of article a day long. If you add another one just focusing on authentification and autorisation part , that will be even greater