Zum Inhalt springen

YAML & Projektstruktur

Projektlayout, YAML-Definitionsdateien und Namenskonventionen.

myapp/
├── .wippy.yaml # Runtime-Konfiguration
├── wippy.lock # Quellverzeichnis-Konfiguration
├── .wippy/ # Installierte Module
└── src/ # Anwendungsquellcode
├── _index.yaml # Entry-Definitionen
├── api/
│ ├── _index.yaml
│ └── *.lua
└── workers/
├── _index.yaml
└── *.lua
YAML-Definitionen werden beim Start in die Registry geladen. Die Registry ist die maßgebliche Datenquelle — YAML-Dateien sind eine Möglichkeit, sie zu befüllen. Einträge können auch aus anderen Quellen stammen oder programmatisch erstellt werden.

Jede YAML-Datei mit version und namespace ist gültig:

version: "1.0"
namespace: app.api
entries:
- name: get_user
kind: function.lua
meta:
comment: Ruft Benutzer nach ID ab
source: file://get_user.lua
method: handler
modules:
- sql
- json
- name: get_user.endpoint
kind: http.endpoint
meta:
comment: Benutzer-API-Endpunkt
method: GET
path: /users/{id}
func: get_user
FeldErforderlichBeschreibung
versionjaSchemaversion (aktuell "1.0")
namespacejaEntry-Namespace für diese Datei
entriesjaArray von Entry-Definitionen

Verwenden Sie Punkte (.) zur semantischen Trennung und Unterstriche (_) für Wörter:

# Funktion und ihr Endpunkt
- name: get_user # Die Funktion
- name: get_user.endpoint # Ihr HTTP-Endpunkt
# Mehrere Endpunkte für dieselbe Funktion
- name: list_orders
- name: list_orders.endpoint.get
- name: list_orders.endpoint.post
# Router
- name: api.public # Öffentlicher API-Router
- name: api.admin # Admin-API-Router
Muster: basis_name.variante — Punkte trennen semantische Teile, Unterstriche trennen Wörter innerhalb eines Teils.

Namespaces sind durch Punkte getrennte Bezeichner:

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

Die vollständige Entry-ID kombiniert Namespace und Name: app.api:get_user

Die wippy.lock-Datei definiert, woher Wippy Definitionen lädt:

directories:
modules: .wippy
src: ./src

Wippy scannt diese Verzeichnisse rekursiv nach YAML-Dateien.

Jeder Eintrag steht im entries-Array. Eigenschaften befinden sich auf oberster Ebene (kein data:-Wrapper):

entries:
- name: hello
kind: function.lua
meta:
comment: Gibt Hello World zurück
source: file://hello.lua
method: handler
modules:
- http
- json
- name: hello.endpoint
kind: http.endpoint
meta:
comment: Hello-Endpunkt
method: GET
path: /hello
func: hello

Verwenden Sie meta für benutzerfreundliche Informationen:

- name: payment_handler
kind: function.lua
meta:
title: Zahlungsprozessor
comment: Verarbeitet Stripe-Zahlungen
source: file://payment.lua

Konvention: meta.title und meta.comment werden in Verwaltungsoberflächen ansprechend dargestellt.

Verwenden Sie registry.entry-Kind für Konfiguration auf Anwendungsebene:

- name: config
kind: registry.entry
meta:
title: Anwendungseinstellungen
type: application
environment: production
features:
dark_mode: true
beta_access: false
KindZweck
registry.entryAllgemeine Daten
function.luaAufrufbare Lua-Funktion
process.luaLanglebiger Prozess
http.serviceHTTP-Server
http.routerRoutengruppe
http.endpointHTTP-Handler
process.hostProzess-Supervisor

Siehe Entry-Typen-Anleitung für vollständige Referenz.

Runtime-Konfiguration im Projektstamm:

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

Siehe Konfigurationsanleitung für alle Optionen.

Definiert Quellverzeichnisse:

directories:
modules: .wippy
src: ./src

Referenzieren Sie Einträge nach vollständiger ID oder relativem Namen:

# Vollständige ID (namespace-übergreifend)
- name: main.router
kind: http.router
endpoints:
- app.api:get_user.endpoint
- app.api:list_orders.endpoint
# Gleicher Namespace - nur Name verwenden
- 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