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.
59 lines
1.2 KiB
Plaintext
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)
|
|
}
|