跳转到内容

contract — API 快速参考

本页列出 github.com/spcent/plumego/contract 导出的每个公开符号。需要边界说明时请读 Contract Primer

import "github.com/spcent/plumego/contract"

func WriteResponse(w http.ResponseWriter, r *http.Request, status int, data any, meta any) error

写入 JSON 成功响应。data 放在 "data" 键;meta 非 nil 时放在 "meta" 键。自动注入 request_id

报文格式:

{
"data": { /* data */ },
"meta": { /* meta,nil 时省略 */ },
"request_id": "abc-123"
}
func WriteError(w http.ResponseWriter, r *http.Request, err *APIError) error

写入 JSON 错误响应。HTTP 状态码来自 err.Status


func NewErrorBuilder() *ErrorBuilder
方法 签名 作用
Type (et ErrorType) *ErrorBuilder 从目录自动设置类型、code、HTTP 状态、category
Message (msg string) *ErrorBuilder 覆盖人类可读错误消息
Detail (key, value string) *ErrorBuilder details map 添加键值对
Build () *APIError 返回完成的 *APIError

常量 HTTP 状态 使用场景
TypeRequired 400 必填参数或字段缺失
TypeValidation 400 字段存在但未通过验证
TypeInvalidFormat 400 格式错误(UUID、email 等)
TypeInvalidJSON 400 请求体不是合法 JSON
TypeOutOfRange 400 值超出允许范围
TypeDuplicate 400 值已存在
TypeUnauthorized 401 请求未认证
TypeInvalidToken 401 Token 格式错误或签名无效
TypeExpiredToken 401 Token 已过期
TypeForbidden 403 已认证但无权限
TypeNotFound 404 资源不存在
TypeConflict 409 状态冲突(如并发更新)
TypeAlreadyExists 409 资源已存在
TypeGone 410 资源已永久删除
TypeRateLimited 429 超出速率限制
TypeInternal 500 服务端故障
TypeUnavailable 503 下游依赖不可用
TypeTimeout 504 上游调用超时

func RequestIDFromContext(ctx context.Context) string
func RequestContextFromContext(ctx context.Context) RequestContext
type RequestContext struct {
Params map[string]string
RoutePattern string
RouteName string
}