Baby step - 思考と実験の足跡

日常のちょっとした、気になって試したこと集です。

OpenAPIのadditional_propertyオプションってなに?

背景

友人とアプリ開発をしています。 わたしがRailsでバックエンドを、友人がDart/Flutterでアプリを担当しています。

Railsapipieのgemを導入し、Swagger定義を出力できるようにしました。

cf. Docker+Rails6+apipieを使ってAPI定義をSwagger UIに表示 - Qiita

出力したJSONを使って、アプリ側でコードを自動生成するようなのですが、どうもうまくいかない様子...。

調査してもらったところ「additional_propertyがfalseなのが問題」とのこと。 しかしながらadditional_propertyがなんなのか、よくわかってなかったので調査しました。

※1 以下に関してはまだわかってないです。1つずつ理解を進めます。

  • そもそもDart/Flutterとは?
  • Flutterでどのようにswagger.jsonを使うのか?
  • Swagger定義ファイルの正式名称はなにか

※2 全体像がわかった時に「Flutterで利用できるswagger.jsonを出力するためのapipieの設定とハマリポイント」ついてもまとめたいと思います

additional_propertyとは?

propertiesで指定したプロパティ以外も受け付けるかどうか」を指定するオプションのようです。

  • trueの場合は、propertiesに記載のないプロパティも受け付ける
  • falseの場合は、propertiesに記載のないプロパティを受け付けない

こちらに実例付きで詳しく説明されていました。

cf. json-schema: オブジェクトの設定 - nju33

apipieでadditional_propertyを指定する

apipieでは、additional_propertyはfalseが初期値です。 trueにするために、以下の1行を追加すればOKです。

### apipie.rb
config.swagger_allow_additional_properties_in_response = true

cf. Apipie/apipie-rails: Ruby on Rails API documentation tool