APIを快適に開発する方法のご紹介こんにちは、ティアフォーで認証認可基盤を開発している澤田です。APIの開発体験をしたのでご紹介します。ティアフォーではマイクロサービスを支える認証認可基盤を一緒に開発いただけるメンバーを募集しています。ご興味のある方は下記ページからご応募ください。herp.careers実現したかったことマイクロサービス間連携のAPI開発において、以下の条件を満たすやり方を探していました。(PGV)を使った方法をご紹介します。APIのプロキシを生成してくれるプラグインです。APIのインターフェイスを提供することができます。Gatewayにサービスの実装を登録することができます。パターン以下の例のように、Protobufから生成されたRegisterXXXHandlerServerを利用すれば、Gatewayにサービスの実装を登録することができます。}ご参考までにProtobufの定義も載せておきます。message定義の中で必須のフィールドを指定しておくと、swaggerとして吐き出されるときにrequiredとして表現されます。Clientを自動生成し、インテグレーションテストの仕様により必須でないフィールドはポインタになるため、設定を忘れていたことに気づけます。v2なので、v3の形式で欲しい場合は以下のようなツールを使ってさらに変換をかける必要があります。Clientの自動生成はoapi-codegenを利用しています。(PGV)https://github.com/envoyproxy/Protobufc-gen-validateProtobufからgRPCのメッセージバリデーションを生成してくれるプラグインです。アノテーションでバリデーションルールを表現できます。Gatewayで使う場合はInterceptorの出番がなく、またHTTPのMiddlewareレイヤではバリデータが使用できません。メソッドを呼ぶ必要があります。愚直にHandlerの処理でバリデーションメソッドを呼んでもいいのですが、私のチームでは、専用のレイヤでバリデーションするようにしました。コード量は増えてしまいますが、バリデーションの実装忘れは発生しにくいと思います。APIに限った話ではないのでテーマから少し脱線してしまいますが、開発体験を良くしてくれたBufについても簡単にご紹介させてください。BufはProtobufの依存管理やprotocで実行していたコマンドをいい感じにまとめてくれるツールです。generateとシンプルにまとめることができます。https://docs.buf.build/introductionprotoディレクトリをprotoファイルの置き場とした場合、以下のような構成になります。workspaceを指定。Registry)BufはBSRというProtobuf(Repository)とプラグインのレジストリを提供しています。https://buf.build/Protobufを提供しているRepositoryは充実していますが、プラグインはBSRに登録されていないことがあります。protoc-gen-validateのRepositoryはありますが、2022年1月現在プラグインは提供されていないので、プラグインが実行可能なDockerfileを自分で用意、BSRに登録し、使えるようにする必要があります。APIを開発する方法と、ProtobufのツールであるBufについてご紹介しました。バリデーションまでできるスキーマ駆動開発の方法はかなり少ないと感じており、今後しばらくは有力な選択肢の一つになるのではないかと思っています。IVにはWeb、組み込みソフト、ハードウェアといった異なるスキルセットを持ったエンジニアがおり、一緒に働いてくれる仲間を常に募集しています。BlogをMediumに移行しました。12リンク運営会社はてなブログをはじめよう!TierIVさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。