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:
- DEPLOY_ENDPOINT_alias: URL de administración.
- PUBLIC_HOST_alias: virtual-host público.
- API_KEY_alias: api-key de protección.
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
}'