「API から先に開発する手法」についてまとめました。API-Driven Development (ADD, API駆動開発) とも呼ばれるようです。
近年の Web システムの構成
一昔前は Web サーバー上で HTML を生成して返却する形が一般的でした。DB や外部システムの接続から、 HTML の出力まで1つの Web アプリケーションですべて行っていました。
しかし近年では、サーバー側は JSON を返す REST API のみで、見た目部分の表示はクライアント側で処理する構成をよく見かけます。
API を作るメリット
一番大きなメリットとしては、フロントエンドとバックエンドの境界がはっきりするという点です。フロントエンドの開発とバックエンドの開発は必要な技能が大きく異なります。フロント側は HTML CSS JavaScript といった言語や SEO, UX といった知識が必要です。バックエンド側は Java, PHP などのサーバーサイド言語、DB 設計やインフラ設計などの知識が必要です。そのため、フロントエンドとバックエンドの開発チームは分離されていることが多いです。
近年ではスマートフォンの登場で、1つのサービスで Web ブラウザ、ネイティブアプリ(iOS と Android)などいくつかのクライアントアプリを用意する必要が出てきました。クライアントアプリはそれぞれ作成する必要がありますが、バックエンドの処理は変わらないはずです。バックエンドは REST API で作り、クライアントアプリはその API を利用する形にすれば、バックエンド側の共通化によってコストを減らせます。また、新たなクライアントアプリを追加で開発する際も、既存の API を使いまわせるので開発がスムーズになります。
また API を作っているシステムは、ドキュメントの質がいい傾向があると思います。API は入出力が明確になるのでそれの副作用だと思いますが、ドキュメントが充実することで開発の質もあがるはずです。Swagger の記事では優れた「開発者体験(DX)」の提供と表現されてますね。
API から先に開発すると何がいいのか
API から先に設計すれば、その設計を元にフロントエンドの開発とバックエンドの開発を並行で進めることができます。フロントエンド側は API のモックを利用して開発し、バックエンド側はAPI 設計通り返却するよう開発を進めます。これまで行っていたフロントエンドチームが作成したデザインを、バックエンドチームが開発した Web アプリケーションに組み込むという作業が発生しません。つなぎの部分は先に出来上がっているので、フロントエンドチームとバックエンドチームはそれぞれの作業に集中できます1もちろん結合テストも忘れず実施しましょう。
API 開発のツール
私が API 開発でよく使うツールは Swagger (Open API)です。yaml や json で API の設計を表現するものです。Open API と JSON Schema という2つの仕様を元に yaml や json を作成します。Swagger Editor というエディタが便利です。
作成した yaml や json は Swagger UI というツールで可視化できる上に、そのツール上から API を呼び出すこともできます。Swagger Codegen を使えばモックサーバーも立ち上げ可能です。