hefestoapicontainer

Apis o microservicios

Una api o microservicio de hefesto está formada por un conjunto de endpoints que comparten un base path, por ejemplo podrías tener una api con base path animals, formada por los endpoints: /animals/dog , /animals/cat y /animals/mouse.

Una misma api se puede desplegar sobre 1 - n virtual host públicos.

Las apis están aisladas entre sí, es decir, cada una tiene su base de datos, su espacio en disco, y su espacio en redis. Estas apis pueden comunicarse por http de forma muy sencilla con servicios externos, o con otras apis desplegadas en hefesto.

Una api en Hefesto tiene la siguiente estructura:

Creación de APIs

Puedes crear una API creando los ficheros manualmente, o bien utilizar el cliente, siempre que tengas el APIS_PATH configurado en su .env:

	cd hefesto-client
	./create-api hello-world

Con el comando anterior se creará una API casi vacía, en el directorio APIS_PATH que tengas configurado en tu cliente.

Despliegue de Apis

Para desplegar las APIs también usarás el cliente, para ello tendrás que configurar en el .env los siguientes valores:

Con el cliente bien configurado podrás ejecutar:

	cd hefesto-client
	./deploy-api.sh DEV hello-word

Siendo DEV, el alias configurado en el .env de tu cliente para el DEPLOY_ENDPOINT_alias, PUBLIC_HOST_alias y API_KEY_alias (es decir, en ese caso tendrías DEPLOY_ENDPOINT_DEV, PUBLIC_HOST_DEV, etc). Y api-hello-word, el nombre de la api a desplegar en el directorio APIS_PATH.

Si el despliegue funciona correctamente se imprimirá en consola un hash con la release de la API desplegada.

Llamadas a una API privada

Por defecto, cualquier api que despliegues estará habilitada, y será privada, es decir, se podrá consumir sólo desde otras APIs de ese mismo virtual-host mediante llamadas locales, tal como se explica en la sección de llamadas http, o desde fuera, por parte de administradores que conozcan el API_KEY de ese virtual-host público.

Para hacer una llamada a la api hello-word podrás hacer una llamada como esta:

    curl --location \
        --request GET 'https://admin-hefesto.delavieja.com/hello-word/ping' \
        --header 'public-host: public-hefesto.delavieja.com' \
        --header 'public-host-key: 123456'

Siendo admin-hefesto.delavieja.com el virtual-host de administración, public-hefesto.delavieja.com , el virtual-host público, public-host-key la contraseña con la que está protegido ese virtual-host, hello-word la key de la api a la que estás llamando y ping el endpoint al que estás llamando.

Llamadas a una API pública

Si quisieras que la api fuera consumida por usuarios que no tengan porqué conocer la contraseña del virtual-host público, tendrías que publicar la api (luego podrías darle seguridad si lo consideraras necesario). Para publicar la api, debes conocer la release en que esta se encuentra, para ello consulta a hefesto con una llamada como esta:

    curl --location \
        --request GET 'https://admin-hefesto.delavieja.com/hefesto/api/hello-word' \
        --header 'public-host: public-hefesto.delavieja.com' \
        --header 'public-host-key: 123456'

Siendo admin-hefesto.delavieja.com el virtual-host de administración, public-hefesto.delavieja.com el público, hello-word la api a consultar y 123456 la contraseña del virtual-host público.

De esta forma conseguirás la release y otra información de la api hello-world.

Luego ejecuta:

    curl --location \
        --request PUT 'https://admin-hefesto.delavieja.com/hefesto/api/hello-word' \
        --header 'public-host: public-hefesto.delavieja.com' \
        --header 'public-host-key: 123456'
        --header 'Content-Type: application/json' \
        --data-raw '{
            "active" : true,
            "release" : "release654321",
            "public" : true
        }'

Siendo la release, la conseguida anteriormente. En este momento la api será pública y podrás consumirla así:

    curl --location \
        --request GET 'https://public-hefesto.delavieja.com/hello-word/ping' 

Deshabilitar una API

Para dejar una api deshabilitada, y que no se pueda consumir de ninguna manera, ni siquiera con la contraseña del virtual-host público, sigue los pasos de la sección anterior y en el PUT, modifica levemente el body:

    curl --location \
        --request PUT 'https://admin-hefesto.delavieja.com/hefesto/api/hello-word' \
        --header 'public-host: public-hefesto.delavieja.com' \
        --header 'public-host-key: 123456'
        --header 'Content-Type: application/json' \
        --data-raw '{
            "active" : false,
            "release" : "release654321",
            "public" : false
        }'

Siendo admin-hefesto.delavieja.com el virtual-host de administración, public-hefesto.delavieja.com el público, hello-word la api a deshabilitar y 123456 la contraseña del virtual-host público.

Ir a la home