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 - -