いわゆるWeb APIサーバーについて仕様と実装の乖離を防ぎたい。すぐ思いつく手段は次の二つ。

  • 実装から仕様を生成する
  • 仕様から実装を生成する

一番目の手段で気になる点は仕様の修正に実装の修正が必須となるところか。説明文を直すくらいであれば実装の修正と言ってもコメントに手を入れる程度ではあるが、仕様だけを修正したいだけの人にとってはハードルが上がりかねない。

二番目の手段の長短は生成される実装の質に左右されそうだ。質が良ければ実装の手間を省けて良いだろう。しかし質が悪ければ手当てが必要となり余計な複雑さをもたらす恐れがある。

二番目についてはサーバー側ではなくクライアント側のコードを生成してテストに用いるという手もある。テストが十分でなければ意味がないが、生成される実装の質の許容範囲は少し広いかもしれない。例えば性能についてはあまり気にする必要がなさそうだ。

他には仕様からバリデータの実装を生成してテストに用いるという手も考えられるだろうか。導入も廃止もしやすそうではある。そこで仕様の記述がOpenAPIで実装の記述がRustの場合にバリデータを生成する方法を探してみた。

  • oas3-rsopenapiにバリデーションなどの機能を追加したものらしい。これならやりたいことができるかもしれない。ただ2年以上更新がない。
  • MinosはJSON Schemaに変換した上でvalicoに渡すという仕組みを持っているようだった。ただこちらも1年以上更新がない。

そう都合良くもいかないらしい。