syntax = "v1" info ( title: "演示 API" // 對應 swagger 的 title description: "演示 api 生成 swagger 文件的 api 完整寫法" // 對應 swagger 的 description version: "v1" // 對應 swagger 的 version termsOfService: "https://github.com/zeromicro/go-zero" // 對應 swagger 的 termsOfService contactName: "keson.an" // 對應 swagger 的 contactName contactURL: "https://github.com/zeromicro/go-zero" // 對應 swagger 的 contactURL contactEmail: "example@gmail.com" // 對應 swagger 的 contactEmail licenseName: "MIT" // 對應 swagger 的 licenseName licenseURL: "https://github.com/zeromicro/go-zero" // 對應 swagger 的 licenseURL consumes: "application/json" // 對應 swagger 的 consumes,不填預設為 application/json produces: "application/json" // 對應 swagger 的 produces,不填預設為 application/json schemes: "http,https" // 對應 swagger 的 schemes,不填預設為 https host: "example.com" // 對應 swagger 的 host,不填預設為 127.0.0.1 basePath: "/v1" // 對應 swagger 的 basePath,不填預設為 / wrapCodeMsg: true // 是否用 code-msg 通用回應體,如果開啟,則以格式 {"code":0,"msg":"OK","data":$data} 包括回應體 bizCodeEnumDescription: "1001-未登入
1002-無權限操作" // 全域業務錯誤碼列舉描述,json 格式,key 為業務錯誤碼,value 為該錯誤碼的描述,僅當 wrapCodeMsg 為 true 時生效 // securityDefinitionsFromJson 為自訂鑑權配置,json 內容將直接放入 swagger 的 securityDefinitions 中, // 格式參考 https://swagger.io/specification/v2/#security-definitions-object // 在 api 的 @server 中可宣告 authType 來指定其路由使用的鑑權類型 securityDefinitionsFromJson: `{"apiKey":{"description":"apiKey 類型鑑權自訂","type":"apiKey","name":"x-api-key","in":"header"}}` useDefinitions: true// 開啟宣告將生成 models 進行關聯,definitions 僅對回應體和 json 請求體生效 ) type ( QueryReq { Id int `form:"id,range=[1:10000],example=10"` Name string `form:"name,example=keson.an"` Avatar string `form:"avatar,optional,example=https://example.com/avatar.png"` } QueryResp { Id int `json:"id,example=10"` Name string `json:"name,example=keson.an"` } // 錯誤響應 ErrorResponse { Code string `json:"code"` Message string `json:"message"` Details string `json:"details,omitempty"` } // 具體錯誤類型 ValidationError { Code string `json:"code"` Message string `json:"message"` Fields []string `json:"fields"` } InsufficientStockError { Code string `json:"code"` Message string `json:"message"` ProductID string `json:"product_id"` Required int `json:"required"` Available int `json:"available"` } InvalidPaymentError { Code string `json:"code"` Message string `json:"message"` Method string `json:"method"` } UnauthorizedError { Code string `json:"code"` Message string `json:"message"` Reason string `json:"reason"` } ) @server ( tags: "query 演示" // 對應 swagger 的 tags,可以對 swagger 中的 api 進行分組 summary: "query 類型介面集合" // 對應 swagger 的 summary prefix: v1 authType: apiKey // 指定該路由使用的鑑權類型,值為 securityDefinitionsFromJson 中定義的名稱 group:"demo" ) service Swagger { @doc ( description: "query 接口" ) /* @respdoc-201 (QueryResp) // 創建成功 @respdoc-400 ( 300101: (ValidationError) 參數驗證失敗 300102: (InsufficientStockError) 庫存不足 300103: (InvalidPaymentError) 支付方式無效 ) // 客戶端錯誤 @respdoc-401 (UnauthorizedError) // 未授權 @respdoc-500 (ErrorResponse) // 服務器錯誤 */ @handler query get /query (QueryReq) returns (QueryResp) }