Protocolos
Os sistemas reais não são só REST. Powerduck modela seis protocolos em entradas de caminho OpenAPI comuns pela extensão x-protocol. As operações de streaming e RPC vivem na mesma spec que REST, sem uma ferramenta à parte nem conversão forçada a formas REST.
Cada operação não HTTP continua a ser uma entrada de caminho comum com método HTTP e responses."200".description.
graphql,grpc,mcpusam post.sse,websocketusam geralmente get.httpé o valor por defeito e omite-sex-protocol.
SSE
Server-Sent Events sobre HTTP usam x-protocol: "sse". O tipo de média de streaming é text/event-stream, e a carga de um evento individual descreve-se com itemSchema, não schema.
paths:
/events:
get:
x-protocol: sse
responses:
"200":
description: Event stream
content:
text/event-stream:
itemSchema:
type: object
properties:
type:
type: string
data:
type: string
WebSocket
WebSocket usa x-protocol: "websocket" com um bloco x-websocket. A URL deve começar por ws:// ou wss://.
paths:
/ws:
get:
x-protocol: websocket
x-websocket:
url: wss://example.com/ws
subprotocols: []
headers: {}
subprotocols e headers são opcionais.
GraphQL
GraphQL usa post num caminho da forma /graphql/query/fieldName com x-graphql. O endpoint é uma URL HTTP(S) absoluta e a query é obrigatória.
paths:
/graphql/query/product:
post:
x-protocol: graphql
x-graphql:
endpoint: https://example.com/graphql
query: query Product($id: ID!) { product(id: ID!) { id name } }
operationName: Product
variablesSchema:
type: object
variables: {}
operationName, variablesSchema e variables são opcionais.
gRPC
gRPC usa post num caminho da forma /grpc/pkg.Service/Method com x-grpc. Se o servidor suporta reflexão, ponha reflection: true; senão, forneça protoPaths (e opcionalmente includeDirs).
paths:
/grpc/products.ProductService/GetProduct:
post:
x-protocol: grpc
x-grpc:
address: host:port
service: products.ProductService
method: GetProduct
kind: unary
reflection: true
kind é unary, server_streaming, client_streaming ou bidi_streaming.
MCP
MCP usa por defeito Streamable HTTP, post num caminho da forma /mcp/tools/tool-name, com um bloco x-mcp.
paths:
/mcp/tools/create-product:
post:
x-protocol: mcp
x-mcp:
endpoint: http://127.0.0.1:3000/mcp
transport: streamable-http
method: tools/call
name: create-product
argumentsSchema:
type: object
arguments: {}
method escolhe a operação MCP: tools/call, tools/list, resources/read, resources/list, resources/templates/list, prompts/get, prompts/list. name, uri, argumentsSchema e arguments usam-se segundo o método.
Regras estruturais
- Cada tipo de média em
requestBodyouresponsesprecisa deschemaou$ref, com a única exceção detext/event-streamcomitemSchema. - Cada parâmetro precisa de
schema(oucontent). - Ao editar uma operação, o protocolo e configuração escolhidos conservam-se: as operações RPC ou de streaming não se tornam REST em silêncio.
- Use as formas exatas de extensão anteriores; não invente chaves como
externalUrlnem usewscomo nome de protocolo.
Porquê importa
Quando seis protocolos se modelam num documento, projeto, depuração, simulação, documentação e MCP impulsionam-se desde a mesma fonte, independentemente do transporte. Peça ao assistente que adicione uma interface de streaming ou RPC e a sua configuração de protocolo conserva-se em vez de se aplanar a REST.
Veja também: Desenhar com o assistente、Modelo de dados.