Перейти к содержимому

Структура проекта

Организация каталогов, YAML-файлы и соглашения об именовании.

myapp/
├── .wippy.yaml # Конфигурация среды исполнения
├── wippy.lock # Пути к исходникам
├── .wippy/ # Установленные модули
└── src/ # Исходный код
├── _index.yaml # Определения записей
├── api/
│ ├── _index.yaml
│ └── *.lua
└── workers/
├── _index.yaml
└── *.lua
YAML-определения загружаются в реестр при старте. Реестр — источник истины, а YAML — лишь один из способов его наполнить. Записи могут поступать из других источников или создаваться программно.

Любой YAML с полями version и namespace считается валидным:

version: "1.0"
namespace: app.api
entries:
- name: get_user
kind: function.lua
meta:
comment: Получает пользователя по ID
source: file://get_user.lua
method: handler
modules:
- sql
- json
- name: get_user.endpoint
kind: http.endpoint
meta:
comment: API-эндпоинт пользователя
method: GET
path: /users/{id}
func: get_user
ПолеОбязательноОписание
versionдаВерсия схемы (сейчас "1.0")
namespaceдаПространство имён для записей
entriesдаМассив определений записей

Точки (.) разделяют смысловые части, подчёркивания (_) — слова внутри части:

# Функция и её эндпоинт
- name: get_user # Функция
- name: get_user.endpoint # Её HTTP-эндпоинт
# Несколько эндпоинтов для одной функции
- name: list_orders
- name: list_orders.endpoint.get
- name: list_orders.endpoint.post
# Роутеры
- name: api.public # Публичный API
- name: api.admin # Админский API
Паттерн: base_name.variant — точки разделяют смысловые части, подчёркивания — слова внутри части.

Пространства имён — идентификаторы через точку:

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

Полный ID записи — пространство имён плюс имя: app.api:get_user

Файл wippy.lock указывает, откуда Wippy загружает определения:

directories:
modules: .wippy
src: ./src

Wippy рекурсивно сканирует эти каталоги в поисках YAML-файлов.

Каждая запись в массиве entries. Свойства на корневом уровне (без обёртки data:):

entries:
- name: hello
kind: function.lua
meta:
comment: Возвращает hello world
source: file://hello.lua
method: handler
modules:
- http
- json
- name: hello.endpoint
kind: http.endpoint
meta:
comment: Hello-эндпоинт
method: GET
path: /hello
func: hello

Используйте meta для информации, отображаемой в UI:

- name: payment_handler
kind: function.lua
meta:
title: Обработчик платежей
comment: Работает со Stripe
source: file://payment.lua

Соглашение: meta.title и meta.comment красиво отображаются в интерфейсах управления.

Используйте registry.entry для конфигурации уровня приложения:

- name: config
kind: registry.entry
meta:
title: Настройки приложения
type: application
environment: production
features:
dark_mode: true
beta_access: false
ТипНазначение
registry.entryПроизвольные данные
function.luaВызываемая Lua-функция
process.luaДолгоживущий процесс
http.serviceHTTP-сервер
http.routerГруппа маршрутов
http.endpointHTTP-обработчик
process.hostСупервизор процессов

Подробнее в справочнике типов записей.

Конфигурация среды исполнения в корне проекта:

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

Подробнее в руководстве по конфигурации.

Определяет каталоги исходников:

directories:
modules: .wippy
src: ./src

Ссылайтесь по полному ID или относительному имени:

# Полный ID (между пространствами имён)
- name: main.router
kind: http.router
endpoints:
- app.api:get_user.endpoint
- app.api:list_orders.endpoint
# В том же пространстве — просто имя
- 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