というのをふと思いついたのでメモ程度に残しておく。あとからサンプルコードとともにちゃんと公開する
それぞれの課題
- フロントエンドエンジニア/デザイナーの課題
- APIサーバーを叩く必要があって必要なJSONがほしい
- サーバーサイドの実装が待ちになると生産性が低い
- APIの仕様が変わる場合早く知らせてほしい
- Swagger ドキュメントの課題
- 実装とドキュメントの乖離が起きがち
- Swaggerには書かれてるけどまだ実装が終わっていない
- 実装は終わってるがSwaggerが更新漏れしていた
- 実装とドキュメントの乖離が起きがち
- サーバーサイドエンジニアの課題
- APIの仕様が変わると実装のvalidationなどの変更が面倒
- サーバーサイド実装作ってみて、フロントエンドに渡したあとで仕様変更が発覚した
課題
- ドキュメントと実装の乖離は少なくしたい
- フロントエンドとサーバーサイド分けて実装したい
gRPC + grpc-gateway
- https://grpc.io
- https://github.com/grpc-ecosystem/grpc-gateway
- ProtocolBufferでAPIの仕様を先に決めて、そこからコードを書くのでドキュメントと実装の乖離が起き得ない
- gRPCはサーバー/クライアントのスタブ、インターフェースを吐き出す
- ダミーのAPIサーバーを作って好きな言語で適当なJSONを返すサーバーを最速で提供すればフロントエンドエンジニア助かるのでは
- gRPCサーバーの本実装、テストは非同期でサーバーサイドエンジニアが行う
代替策
- たった30秒でREST APIのモックが作れる JSON Serverでフロントエンド開発が捗る
- json-serverでダミーAPIサーバーを実装
- Swaggerでドキュメント管理
- 実装とドキュメントの乖離は起きるしメンテがめんどくさそうではある、が低コストで導入するにはこちらのほうが早い
フロントエンドの実装をサーバーサイドから分離する
-
デザイナーさんとの共同作業の悩みをLaravel Mixで解決する
- フロントエンドとデザインはHTML(ejs), CSS, JSのことしか考えないで実装する
- Ajaxが必要な部分をダミーサーバーで実装すれば更にサーバーサイドとの結合度が下がる