hefestoapicontainer

Apis o microservicios

Una API de Hefesto está formada por un conjunto de endpoints que comparten un base path. Por ejemplo, una API con base path /animals podría tener los endpoints: /animals/dog, /animals/cat y /animals/mouse.

Una misma API se puede desplegar sobre 1 o N virtual hosts públicos. Las APIs están aisladas entre sí: cada una tiene su base de datos, su espacio en disco y su espacio en redis. Las APIs pueden comunicarse por HTTP de forma sencilla entre ellas.

Estructura de una API

mi-api/
├── api.yaml                 # Configuración: endpoints, directivas, flujo
├── Directives/              # Directivas personalizadas (PHP)
│   └── MiDirectiva.php
├── Maps/                    # JSON de configuración y schemas
│   ├── main.json
│   ├── dev/main.json        # Config específica de entorno dev
│   └── pro/main.json        # Config específica de entorno pro
├── Assets/
│   ├── views/               # Plantillas Blade
│   ├── css/                 # Hojas de estilo
│   ├── js/                  # JavaScript
│   ├── images/              # Imágenes
│   ├── db/ o sql/           # Migraciones SQL
│   └── ...                  # Otros recursos
└── api.postman_collection.json  # Opcional: colección Postman

Creación de APIs

Puedes crear una API desde cero o usar el cliente:

cd hefesto-client
create-api hello-world

Esto crea un esqueleto de API en el directorio en el que te encuentres.

Despliegue

Para desplegar, configura en el .env del cliente:

cd hefesto-client
deploy-api.sh DEV

Llamadas a una API privada

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

Por defecto todas las apis son privadas, se las puede llamar desde otras apis en esa instancia de hefesto, o usando el virtual-host de administración.

Publicar una API (hacerla pública)

Primero consulta la release:

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'

Luego publica:

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

Ahora la API es pública y accesible sin contraseña desde el virtual-host público:

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

Deshabilitar una API

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