Ir al contenido

YAML y Estructura del Proyecto

Organización del proyecto, archivos de definición YAML y convenciones de nomenclatura.

myapp/
├── .wippy.yaml # Configuración del runtime
├── wippy.lock # Configuración de directorios fuente
├── .wippy/ # Módulos instalados
└── src/ # Código fuente de la aplicación
├── _index.yaml # Definiciones de entradas
├── api/
│ ├── _index.yaml
│ └── *.lua
└── workers/
├── _index.yaml
└── *.lua
Las definiciones YAML se cargan en el registro al iniciar. El registro es la fuente de verdad; los archivos YAML son una forma de poblarlo. Las entradas también pueden provenir de otras fuentes o crearse programáticamente.

Cualquier archivo YAML con version y namespace es válido:

version: "1.0"
namespace: app.api
entries:
- name: get_user
kind: function.lua
meta:
comment: Obtiene usuario por ID
source: file://get_user.lua
method: handler
modules:
- sql
- json
- name: get_user.endpoint
kind: http.endpoint
meta:
comment: Endpoint de API de usuario
method: GET
path: /users/{id}
func: get_user
CampoRequeridoDescripción
versionVersión del esquema (actualmente "1.0")
namespaceNamespace de entradas para este archivo
entriesArray de definiciones de entradas

Use puntos (.) para separación semántica y guiones bajos (_) para palabras:

# Función y su endpoint
- name: get_user # La función
- name: get_user.endpoint # Su endpoint HTTP
# Múltiples endpoints para la misma función
- name: list_orders
- name: list_orders.endpoint.get
- name: list_orders.endpoint.post
# Routers
- name: api.public # Router de API pública
- name: api.admin # Router de API admin
Patrón: nombre_base.variante - los puntos separan partes semánticas, los guiones bajos separan palabras dentro de una parte.

Los namespaces son identificadores separados por puntos:

app
app.api
app.api.v2
app.workers

El ID completo de entrada combina namespace y nombre: app.api:get_user

El archivo wippy.lock define de dónde Wippy carga las definiciones:

directories:
modules: .wippy
src: ./src

Wippy escanea estos directorios recursivamente buscando archivos YAML.

Cada entrada en el array entries. Las propiedades están al nivel raíz (sin envoltorio data:):

entries:
- name: hello
kind: function.lua
meta:
comment: Retorna hola mundo
source: file://hello.lua
method: handler
modules:
- http
- json
- name: hello.endpoint
kind: http.endpoint
meta:
comment: Endpoint hello
method: GET
path: /hello
func: hello

Use meta para información amigable para la UI:

- name: payment_handler
kind: function.lua
meta:
title: Procesador de Pagos
comment: Maneja pagos de Stripe
source: file://payment.lua

Convención: meta.title y meta.comment se renderizan bien en interfaces de gestión.

Use el kind registry.entry para configuración a nivel de aplicación:

- name: config
kind: registry.entry
meta:
title: Configuración de Aplicación
type: application
environment: production
features:
dark_mode: true
beta_access: false
TipoPropósito
registry.entryDatos de propósito general
function.luaFunción Lua invocable
process.luaProceso de larga duración
http.serviceServidor HTTP
http.routerGrupo de rutas
http.endpointManejador HTTP
process.hostSupervisor de procesos

Consulte la Guía de Tipos de Entrada para la referencia completa.

Configuración del runtime en la raíz del proyecto:

logger:
encoding: json
host:
worker_count: 16
http:
address: :8080

Consulte la Guía de Configuración para todas las opciones.

Define directorios fuente:

directories:
modules: .wippy
src: ./src

Referencie entradas por ID completo o nombre relativo:

# ID completo (cross-namespace)
- name: main.router
kind: http.router
endpoints:
- app.api:get_user.endpoint
- app.api:list_orders.endpoint
# Mismo namespace - solo use el nombre
- name: get_user.endpoint
kind: http.endpoint
func: get_user
myapp/
├── .wippy.yaml
├── wippy.lock
└── src/
├── _index.yaml # namespace: app
├── api/
│ ├── _index.yaml # namespace: app.api
│ ├── users.lua
│ └── orders.lua
├── lib/
│ ├── _index.yaml # namespace: app.lib
│ └── database.lua
└── workers/
├── _index.yaml # namespace: app.workers
└── email_sender.lua