指定永远不要在Swagger或OpenAPI中发送的属性

时间:2018-07-02 20:58:42

标签: node.js api swagger openapi

我想指定永远不应该从端点发送的字段。例如,假设我要确保没有端点响应user.passwordHash

OpenAPI中是否存在additionalProperties: falserequired: true的反义词?

2 个答案:

答案 0 :(得分:1)

您可以将属性定义为字符串,并将最大长度设置为零。没有什么特别说明additionalProperties: true, except for passwordHash

type: object
properties:
    passwordHash:
        type: string
        format: password
        maxLength: 0

或者,您可以在发送之前先遍历对象,然后删除不需要的属性。例如:

function removeProperty(property, value) {
  if (Array.isArray(value)) {
    return value.map(item => removeProperty(property, item))

  } else if (value && typeof value === 'object') {
    const result = {}
    Object.keys(value)
      .forEach(key => {
        if (key !== property) {
          result[key] = removeProperty(property, value[key])
        }
      })
    return result

  } else {
    return value
  }
}

const object = {
  x: {
    y: {
      z: 1,
      secret: 'password'
    }
  }
}

const clean = removeProperty('secret', object)
console.log(clean) // => { x: { y: { z: 1 } } }

答案 1 :(得分:1)

OpenAPI 3.0为此提供了writeOnly关键字:

  

将属性声明为“只写”。因此,它可以作为请求的一部分发送,但不应作为响应的一部分发送

因此,只需将相应的属性标记为writeOnly: true

passwordHash:
  type: string
  writeOnly: true

在相反的情况下也有readOnly-属性不应在请求中发送,而应在响应中发送。 readOnly同时存在于OpenAPI 3.0和2.0中。