使用JSON Schema和Open API specification (OAS)来记录REST API时,如何定义UUID属性?
答案 0 :(得分:9)
UUID没有内置type
,但OpenAPI规范建议使用
type: string
format: uuid
来自Data Types部分(强调我的):
基元有一个可选的修饰符属性:
format
。 OAS使用几种已知格式来详细定义所使用的数据类型。但是,为了支持文档需求,format
属性是一个开放的字符串值属性,可以具有任何值。 即使本规范未定义,也可以使用"email"
,"uuid"
等格式。
例如,Swagger Codegen将format: uuid
映射到C#中的System.Guid
或Java中的java.util.UUID
。不支持format: uuid
的工具会将其处理为type: string
。
答案 1 :(得分:8)
自从最初提出问题以来,JSON Schema规范已扩展为提供内置支持,用于指定和验证string类型的JSON字段是否为UUID-具体来说,它遵循由定义的UUID格式RFC4122,例如“ f81d4fae-7dec-11d0-a765-00a0c91e6bf6”。
该支持是在JSON模式规范版本2019-09中添加的(以前称为draft-08)。扩展了JSON Schema Validation组件规范,以便可以为string类型的schema字段指定的现有“ format”关键字现在支持名为“ uuid”的新内置格式。
下面的示例JSON模式声明了一个(强制)字段,其名称为“ id”,类型为字符串,必须将其格式设置为UUID-
{
"$schema": "http://json-schema.org/draft/2019-09/schema#",
"title": "My JSON object schema",
"description": "Schema for the JSON representation of my JSON object.",
"type": "object",
"properties": {
"id": {
"description": "The unique identifier for my object. (A UUID specified by RFC4122).",
"type": "string",
"format": "uuid"
}
},
"required": ["id"]
}
请注意,在撰写本文时,“ JSON模式用户指南”("Understanding JSON Schema")的部分涵盖了内置字符串验证的示例-JSON模式参考>特定于类型的关键字>字符串> {{3} }-未提及UUID支持,因为它已经过时-目前仅描述JSON Schema draft-7。
对于你们当中的Java开发人员来说,JSON模式使用的RFC4122格式与Java的UUID类的字符串表示形式兼容-Format也提到了RFC 4122。
有关更多详细信息,请参见-
答案 2 :(得分:3)
我到目前为止找到的唯一方法是手动将RegEx模式指定为可重用的模式组件:
openapi: 3.0.1
paths:
/transactions/:
post:
responses:
200:
content:
application/json:
schema:
type: object
properties:
transactionId:
$ref: '#/components/schemas/uuid'
components:
schemas:
uuid:
type: string
pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
但是,我肯定希望使用更标准化的方法。