Node.js OpenAPI:可选属性的强制属性
和标题差不多。我在请求主体中有一个可选对象。但是,如果给定了该对象,则它必须包含几个子属性 我的OpenAPI组件配置如下所示:Node.js OpenAPI:可选属性的强制属性,node.js,express,swagger,openapi,Node.js,Express,Swagger,Openapi,和标题差不多。我在请求主体中有一个可选对象。但是,如果给定了该对象,则它必须包含几个子属性 我的OpenAPI组件配置如下所示: UserDetails: type: object properties: surname: type: string givenName: type: string dob: type: string format: date gender: type: string
UserDetails:
type: object
properties:
surname:
type: string
givenName:
type: string
dob:
type: string
format: date
gender:
type: string
enum:
- male
- female
- others
partner:
type: object
properties:
name:
type: string
phone:
type: string
maxLength: 10
minLength: 10
pattern: ^[1-9]+[0-9]{9}$
required: [name, phone]
required:
- surname
- givenName
- dob
我正在使用expressopenapi验证程序
来验证这一点。现在,我不明白这是否是express openapi validator
包的问题,但可选字段(partner)的必填字段(姓名、电话)从未验证过。我可以只提供partner:{}
,然后直接插入,甚至是partner:{name:'some name',phone:'123'}
。应验证电话号码的长度和正则表达式
我在定义中遗漏了什么吗?似乎没有解决这个问题的办法,但我关闭它只是为了让我的心灵平静 正如@Helen所回答的,这似乎是图书馆本身的问题。 在开发我的应用程序的过程中,我发现了更多的问题,这使得我使用的库
expressopenapi验证器
和另一个库swagger-express中间件
在验证请求时更加不可靠
我发现的另一个问题是,仅当值作为数组提供时,才使用提供的枚举验证该值:
例如,以下各项已正确验证:
UserLiabilities:
type: object
properties:
liabilities:
type: object
properties:
creditCards:
type: array
items:
allOf:
- $ref: '#/components/schemas/Provider'
- type: object
properties:
limit:
type: number
minimum: 0
以下是:
Provider:
type: object
properties:
provider:
type: string
enum: ['ABC', 'DEF', 'GHI', 'Others']
但是,如果我需要提供程序作为对象中的普通字符串(而不是像上面那样的数组),它不会被验证。并且,它允许任意字符串:
homeLoan:
allOf:
- $ref: '#/components/schemas/Provider'
- type: object
properties:
amount:
type: number
minimum: 0
这种行为与我在上面尝试和提到的至少两个库是一致的。我不确定我在这里是否做错了什么,但我已经浪费了足够多的时间来调试这个问题,并最终在我的服务器上解决了这个问题。您的API定义是正确的。这是ExpressOpenAPI验证程序的一个问题。