Cuando una petición, entra en una API, se recibe un message, que modeliza la request recibida (body, headers, etc).
Mediante la directiva Http, puedes hacer que el message recibido (la request), sea reenviada tal cual a otro Host, quedando modificado el message una vez recibida la response, y convirtiendo la API en un proxy.
post /user:
CheckKey:
directive: CheckKey
expected: $.map.main.viewKey
current: $.message.queryParam.api-key
ModifyMessage:
directive: ModifyMessage
path: /ms/user
Connection:
directive: Http
host: $.map.urls.usermshost
timeout: 10
connectTimeout: 3
En el ejemplo anterior, se ha declarado un endpoint para crear usuarios, que valida un apiKey recibido en una cabecera, hace una modificación del path del message (de /user a /ms/user) y mediante la directiva Http redirige la petición recibida (con el path alterado) a un ms externo, cuya url se ha declarado en un map. La response recibida será reenviada tal cual al cliente de la API, aunque podríamos añadir otras directivas después de Http para modificar el message recibido.
all /requests:
Http:
directive: Http
host: $.map.main.urlExternal
En el ejemplo anterior, se usa el endpoint especial all /requests, para interceptar todas las peticiones que lleguen al API, y redirigirlas a un servicio externo, de esta forma convertimos nuestro API en un proxy. Podríamos añadir directivas antes o después de Http para dotar al proxy de cualquier funcionalidad que deseemos.
La directiva Http, tiene las siguientes opciones:
La directiva Pull, permite hacer conexiones http de lectura, de forma que el objeto recibido, se valida y almacena en memory automáticamente.
get /user:
CheckKey:
directive: CheckKey
expected: $.map.main.viewKey
current: $.message.queryParam.api-key
ReadUser:
directive: Pull
host: https://mymicroservice.com
path: /ms/user
target: user
En el ejemplo anterior, se está haciendo una validación de un apiKey, y luego se hace una conexión GET contra https://mymicroservice.com/ms/user con la directiva Pull, el json recibido, es validado y almacenado en memory con la key "user". La validación se realiza usando json-schema, por lo que en Maps, deberá existir un fichero user.json con el json-schema del objeto que se espera recibir.
La directiva Pull, tiene las siguientes opciones:
La directiva Push es similar a Pull, pero orientada a hacer escrituras en lugar de lecturas, por lo que no hace la validación del objeto que se recibe en la response.
La directiva Push, tiene las siguientes opciones:
Si te quieres conectar a otra API desplegada en el mismo virtual-host, usando cualquiera de las directivas anteriores, Pull, Push o Http, sólo tienes que usar como host, la clave en memory hefesto-localhost. Da igual que la API a la que llamas sea pública o privada, las llamadas locales siempre están permitidas.