Pular para o conteúdo principal

Crie a primeira aplicação

Este tutorial mostra a fronteira da aplicação sem inventar um produto nem esconder infraestrutura do Runtime no código de negócio. Uma aplicação AppCore possui exatamente um Application Manifest, um Deployment Manifest e código de negócio.

1. Adicione a facade da aplicação​

Use a release publicada do SDK:

[dependencies]
appcore-sdk = "1.0.0-rc.3"

Use uma dependência local por path somente durante o desenvolvimento contra um checkout do AppCore Runtime. Não substitua o SDK por um crate de host de baixo nível.

2. Comprove a aplicação local mínima​

use appcore_sdk::prelude::*;

fn main() -> AppResult<()> {
appcore_sdk::run("example-app", |app| {
let log = app.logger().component("startup");
log.info("contexto da aplicação está válido");
Ok(())
})
}

run valida o ID da aplicação e fornece manifestos V1 locais canônicos e log limitado. Ele não abre listener, escolhe provider nem inicia um host Runtime escondido.

3. Declare o comportamento de negócio​

Implemente Application quando o deployment precisar registrar commands, events, queries, decisions, states, handlers ou tasks:

use appcore_sdk::application::{CommandName, CommandRegistry, RuntimeResult};
use appcore_sdk::Application;

struct ExampleApplication;

impl Application for ExampleApplication {
fn register_commands(
&self,
registry: &mut CommandRegistry,
) -> RuntimeResult<()> {
registry.register(CommandName::new("example.ping")?)
}
}

O processo de deployment escolhido chama esses hooks ao compor os serviços do Runtime. O código da aplicação registra comportamento; ele não constrói internals de storage, HTTP, segurança ou Supervisor.

4. Adicione os dois manifestos​

application.toml declara identidade e requisitos portáteis:

manifest_version = 1
application_id = "example-app"
application_version = "1.0.0"
display_name = "Example App"
vendor = "example-vendor"
service_id = "example.ping"

[runtime]
minimum_runtime_version = "1.0.0"
protocol_version = "1"

[[capabilities]]
id = "example.ping"
version = "1"
mode = "command"
visibility = "local"
requires_leader = false
idempotency_required = true

deployment.toml pertence à instalação e seleciona modo, providers, paths, rede e referências de segredo. Ele contém referências como env:APPCORE_RUNTIME_KEY, nunca o valor do segredo. Use a fixture completa dos três artefatos validada em vez de adivinhar campos obrigatórios omitidos.

5. Cresça somente quando necessário​

Ative api, scheduler, deployment, storage, sync, ai ou filemaker somente quando a aplicação consumir essa capability. A referência do SDK descreve cada namespace, e o registro estável identifica cada owner de nível inferior.

Teste manifestos inválidos, commands não declarados, ausência de chave de idempotência, falha de provider e shutdown limitado no deployment que hospeda a aplicação. O exemplo local com run, sozinho, não comprova HTTP, cluster, storage nem gerenciamento de segredos de produção.