猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Dredd で OpenAPI のスキーマに無いプロパティをエラーにする

f:id:yoshiki_utakata:20210522224051p:plain

例えば、 OpenAPI の定義がこうなっていたとします。レスポンスのプロパティとして、 namesize があります。

responses:
  200:
    description: 正常系
    content:
      application/json:
        schema:
          type: object
          properties:
            name:
              type: string
            size:
              type: integer

実際の API のレスポンスがこうだったとします。

{"name": "Sparta", "size": 300, "luck": false}

実際のレスポンスには namesize に加えて、 luck が含まれています。

この時、 Dredd のテストはエラーになりません

この件は、 Dredd のドキュメントの Avoiding Additional Properties の項にも書いてあります。

https://dredd.org/en/latest/how-to-guides.html#avoiding-additional-properties

JSON スキーマは、不要なプロパティを含んでいたとしても、パースする時にエラーにはならないからです。

これをエラーにしたい場合、 OpenAPI 2 においては、 additionalProperties: false を指定すれば良いらしいです。

responses:
  200:
    description: 正常系
    content:
      application/json:
        schema:
          type: object
          additionalProperties: false
          properties:
            name:
              type: string
            size:
              type: integer

これで、「API にプロパティが追加されたが、 OpenAPI の仕様を変更し忘れていた」という場合に、エラーにできます。

ただし、 OpenAPI 3 では、 additionalProperties: false を指定したとしてもエラーになりません。 Dredd の OpenAPI 3 対応はまだ experimental (実験的)なので、対応してないということでしょう。

今回のものを始め、 まだ OpenAPI 3 に対応していない機能は多数あるので注意してください。

今回の件の詳細を確認したい場合は、先程も挙げた Dredd の公式ドキュメントを確認してください。

https://dredd.org/en/latest/how-to-guides.html#avoiding-additional-properties