Aller au contenu principal

Ajout d'entête

L'objectif de la fonctionnalité Headers de l'API gateway Okapi est de pouvoir enrichir les entêtes d'une requête à destination de l'API aussi bien au niveau de la déclaration d'une api ou de manière plus précise au sein d'une ressource.

Cas d'usages

Cette feature fait suite à une demande pour enrichir les entêtes d'une requête par des données.(ex: voir le .yaml de l'api TRACEO)

Principe de fonctionnement

L'API déclare dans son raccordement les éléments à ajouter aux entêtes de la requête provenant d'Okapi, sous le namespace headers dans les données optionnelles (extra).

La simple présence d'un objet JSON sous headers activera la fonctionnalité au niveau de l'API gateway.

L' entête ajouté apparaît dans la requête initiée par Okapi à destination de l'API, dans l'objet req.headers.

Configuration dans le raccordement de l'API

- type: api
value:
name: My Api
urlContext: monapi
version: '1'
...
extra:
headers:
foo: bar
- type: resource
value:
name: My Resource
api:
urlContext: myapi
version: "1"
...
extra:
payload:
foo: bar

Comportement de la gateway

Les headers provenant d'une resource surdéfinit le contenu des headers de l'api.

Dans le cas où l'entête de l'api est nécessaire au bon fonctionement de la ressource, il faudra le dupliquer dans le header de resource.

Exemple

pré-requis:

  • un serveur d'api (ouvert sur le port 3005) en local.
  • le serveur de la gateway qui écoute en local.

Exemple d'API nommée "local" avec une ressource qui repond sur la route /hello:

- type: api
value:
published: true
name: Local
version: "1"
urlContext: local
extra:
headers:
fizz: buzz
endpoint: "http://localhost:3005" # serveur local qui écoute le port 3005
ownerUsername: provider
- type: resource
value:
name: Post Hello
method: post
route: /hello
published: true
extra:
headers:
foo: bar
api:
urlContext: local
version: "1"

La requête suivante est envoyée par l'application d'un utilisateur d'Okapi:

http  POST :3101/local/v1/hello  X-Okapi-Key:< clé okapi à fournir>

Dans l'attribut req.headers de la requête envoyée par Okapi à destination de la ressource de l'API, on peut recupérer l'entête déclarée dans la configuration .yaml et ceux de la requête initiale.

> api-test@0.0.0 start /Users/pierregorce/Documents/workspace/api-test
> node ./bin/www

{ 'user-agent': 'HTTPie/2.4.0',
accept: '*/*',
'x-okapi-key': 't6PEZVOxAKRgsvYdW7f/R4lIsHq3xFvS2fWpi/BveDAHY8bCQoCwzWbHv6RvwKul',
'x-okapi-app-name': 'GetShirt',
'x-okapi-user-email': 'caroline-okapi@laposte.net',
'x-okapi-app-id': 'a8a3e56c-4846-4538-a378-78499c6019b0',
'x-okapi-user-id': '5af97d10-223d-43f8-8d94-7b5c2f7e5abc',
'x-okapi-subscription-plan': 'free',
'x-forwarded-for': '127.0.0.1',
'x-forwarded-host': 'localhost',
'x-forwarded-proto': 'http',
foo: 'bar',# console.log(req.headers)
via: '1.1 okapi',
host: 'localhost:3005',
'content-length': '0',
connection: 'close' }
POST /hello 204 7.343 ms - -