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.
This commit is contained in:
58
examples/contracts/responses.api
Normal file
58
examples/contracts/responses.api
Normal file
@@ -0,0 +1,58 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user