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'un environnement 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: environment
value:
value: production # sandbox, ou tout autre environnement
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 définie au niveau d'un environnement 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: environment
value:
published: true
value: production # sandbox, ou tout autre environnement
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
fizz: buzz # si nécessaire au bon fonctionement de l'API
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 - -