如何在Open API规范中表示Golang结构体的interface{}类型字段?
在OpenAPI规范中表示Golang的interface{}类型字段
针对你定义的Golang hook 结构体里的Data字段(类型为interface{},可接受任意JSON数据),可以根据你使用的OpenAPI版本选择以下方式表示:
方式一:OpenAPI 3.0+ 用any类型
OpenAPI 3.0及以上版本支持any类型,完美对应Golang的interface{},直接声明即可:
components: schemas: Hook: type: object properties: data: type: any description: 任意类型的JSON数据
方式二:OpenAPI 2.0(Swagger 2.0)用oneOf枚举所有可能类型
因为OpenAPI 2.0没有any类型,所以可以通过oneOf列出所有合法的JSON数据类型来模拟任意类型:
definitions: Hook: type: object properties: data: oneOf: - type: string - type: number - type: integer - type: boolean - type: object - type: array - type: "null" description: 任意类型的JSON数据
额外建议
如果实际场景中Data字段只会接收特定几种类型的数据(比如用户信息、订单详情),建议直接用oneOf引用对应的具体Schema,这样生成的API文档和客户端代码会更精准:
components: schemas: Hook: type: object properties: data: oneOf: - $ref: '#/components/schemas/User' - $ref: '#/components/schemas/Order' description: 用户信息或订单详情数据 User: type: object properties: id: type: integer name: type: string Order: type: object properties: orderId: type: string amount: type: number
内容的提问来源于stack exchange,提问作者mimi0007
相关产品推荐
相关产品推荐

