Pipevine
Framework .NET para escrever APIs e consumidores de mensageria declarativamente, em YAML —
validação, mapeamento, persistência, cache, mensageria e integrações outbound, tudo como um
pipeline de steps, sem escrever handler nenhum à mão. apiVersion: pipevine.dev/v1 está
congelado, ver versionamento.
Por que Pipevine
A maior parte dos serviços HTTP e consumidores de eventos repete a mesma forma: receber dados, validar, consultar o banco, mapear para um modelo, persistir, publicar um evento. O que muda de um serviço para outro são as regras de validação, o formato do mapeamento e os nomes das entidades — não a estrutura. Pipevine deixa você declarar essa estrutura em YAML e mantém o código C# apenas para o que é realmente específico da sua aplicação (ou, no caminho conteinerizado, elimina até isso).
apiVersion: pipevine.dev/v1
kind: Application
metadata: { name: orders, version: 1.0.0 }
spec:
type: api
routes:
- id: createOrder
method: POST
path: /orders
pipeline:
- type: validate
rules:
- { expr: "$count(input.body.items) > 0", code: EMPTY_ORDER, message: "pedido sem itens" }
- type: map
id: order
to: vars.order
expr: "{ 'id': $uuid(), 'total': $sum(input.body.items.(price * quantity)) }"
- type: db.persist
entity: Order
data: vars.order
- type: publish
event: OrderCreated
payload: vars.order
mode: outbox
response: { status: 201, body: vars.order }
Comece aqui
- Introdução — o problema que o Pipevine resolve e a ideia central
- Primeiro projeto — quickstart, das duas formas de rodar uma aplicação
- Conceitos fundamentais — o modelo de execução do pipeline
Guia completo
Da validação à observabilidade, um capítulo por assunto — veja o índice em guide/01-introducao.md ou navegue pela barra lateral.
Referência
- Configuração YAML — todo campo do documento, com descrição, mantida à mão
- Referência de steps — gerada a partir do código
- Referência do schema YAML — gerada a partir do schema JSON
- Referência de API (.NET) — gerada a partir dos comentários XML doc de cada pacote
Extensibilidade
- Visão geral — o princípio de desenho e como uma extensão é ativada
- Um guia por ponto de extensão:
IStep,IDataProvider,IBrokerProvider,ICacheProvider,IInboundAuthScheme,IOutboundAuthProvider,IExpressionEngine,IStepCodeEmitter,ISecretResolver
Versionamento
- O que você pode confiar que não muda — a garantia de estabilidade do schema
pipevine.dev/v1e a política de versionamento dos pacotes NuGet