代码之家  ›  专栏  ›  技术社区  ›  Wayne Bloss

指定不应以swagger或openapi格式发送的属性

  •  1
  • Wayne Bloss  · 技术社区  · 6 年前

    我想指定不应该从终结点发送的字段。例如,假设我想确保没有端点以 user.passwordHash 是的。

    有什么东西和 additionalProperties: false required: true 在openapi中?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Helen    6 年前

    openapi 3.0提供了 writeOnly 关键字正是为此目的:

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

    所以只要把相应的属性标记为 writeOnly: true 以下内容:

    passwordHash:
      type: string
      writeOnly: true
    

    还有 readOnly 对于相反的场景-不应在请求中发送,但可能在响应中发送的属性。 只读 在OpenAPI3.0和2.0中都存在。

        2
  •  1
  •   James    6 年前

    可以将属性定义为字符串,并将最大长度设置为零。没有什么特别说明 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 } } }