Files
go-omni/examples/contracts/responses.api
k2safe 7670b222ac feat: release configurable API response contracts
Define reusable response bodies in .api with typed code mappings, per-route overrides and matching OpenAPI schemas. Add application and callback encoders, early response policy selection, and isolated remote-consumer release verification.

Release v0.8.0-preview after full race, vet, build and local MySQL workflow acceptance.
2026-09-23 20:42:38 +08:00

59 lines
1.2 KiB
Plaintext

syntax = "v1"
info (
title: "Configurable response example"
version: "1.0.0"
)
// Define the public body once. No field names are required by the framework.
response CommonResponse (
body: {
"code": "${code}",
"msg": "${message}",
"data": "${data}"
}
codeType: int32
successCode: 200
errorCode: 9999
successMessage: "操作成功"
dataMode: always
codes: {"ITEM_NOT_FOUND":404001}
messages: {"ITEM_NOT_FOUND":"记录不存在"}
)
response PartnerResponse (
body: {"accepted":"${ok}","payload":"${data}","meta":{"trace":"${requestId}"}}
errorBody: {"accepted":"${ok}","error":{"reason":"${message}"}}
)
error ItemNotFound 404 "ITEM_NOT_FOUND" "item not found"
type ItemReq {
ItemID int64 `path:"itemId" binding:"min=1"`
}
type ItemResp {
ItemID int64 `json:"itemId"`
Name string `json:"name"`
}
@server (
group: items
prefix: /api
response: CommonResponse
)
service response-api {
@errors ItemNotFound
@handler getItem
get /items/:itemId (ItemReq) returns (ItemResp)
// Success is the ItemResp object itself; errors still use CommonResponse.
@response raw
@handler rawItem
get /rawItems/:itemId (ItemReq) returns (ItemResp)
@response PartnerResponse
@handler partnerItem
get /partnerItems/:itemId (ItemReq) returns (ItemResp)
}