API仕様を書く(4) [API仕様を書く]
(「API仕様を書く(3)」からの続き)
2017年8月末でリコーを退職して、ソラミツ社で働き始めました。技術的にはgRPCを使ったサーバー側の開発に加わることになりました。
gPRCに触れたのはその時が初めてですが、RPC(Remote Procedure Call)そのものは、Xerox社のCourierとよばれるRPCに1984年から接していましたし、後にSunのRPCを使ったツール開発(MessagingToolと分散コンパイルツール)も行っています。Courierは、XNS(Xerox Network Systems)の各種サーバーのプロトコルを記述するのにも使われており、プロトコル仕様はかなり丁寧に書かれていたと記憶しています。
gRPCは、RPCの定義を
開発されていたサーバーのgRPCの定義である
『Effective Java 第2版』を読まれたことがあるエンジニアであれば、そのようなクラスやインタフェースは公開APIとしては不適切であることは認識できると思います。『Effective Java 第2版』で該当する項目と章は以下の通りです。
上記の1.から5.までについては、次回もう少し詳しく書きたいと思います。
(続く予定)
2017年8月末でリコーを退職して、ソラミツ社で働き始めました。技術的にはgRPCを使ったサーバー側の開発に加わることになりました。
gPRCに触れたのはその時が初めてですが、RPC(Remote Procedure Call)そのものは、Xerox社のCourierとよばれるRPCに1984年から接していましたし、後にSunのRPCを使ったツール開発(MessagingToolと分散コンパイルツール)も行っています。Courierは、XNS(Xerox Network Systems)の各種サーバーのプロトコルを記述するのにも使われており、プロトコル仕様はかなり丁寧に書かれていたと記憶しています。
gRPCは、RPCの定義を
.proto
ファイルに書いてprotoc
でコンパイルしてスタブを生成します。RPCはその名前が示す通り、Procedure Callであり、Procedureを定義する訳です。呼び出しのパラメータ、呼び出し結果のレスポンスなどをstruct
として定義します。また、エラーを通知するためにステータスコードを返すことができるようになっています。ステータスコードは、Javaに例えるとメソッドがスローする例外に相当します。開発されていたサーバーのgRPCの定義である
.proto
ファイルの中を見ると、何も書かれていませんでした。Javaで例えると、「公開APIのクラスやインタフェースの定義が書かれている.java
ファイルに一切Javadocが書かれていない」という状態でした。『Effective Java 第2版』を読まれたことがあるエンジニアであれば、そのようなクラスやインタフェースは公開APIとしては不適切であることは認識できると思います。『Effective Java 第2版』で該当する項目と章は以下の通りです。
- 項目44 すべての公開API 要素に対してドキュメントコメントを書く
- 第9章 例外
.proto
ファイルでは、そのエッセンスだけを適用して読み替える必要があります。簡単にまとめると、以下のことをAPI仕様として書く必要があります。- 各PRCの説明
- 各PRCのリクエストパラメータとレスポンスパラメータの説明
- リクエストパラメータの制約(事前条件)とそれに違反したときに返されるステータスコードの説明
- RPC呼び出しの制約(事前条件)とそれに違反したときに返されるステータスコードの説明
- RPCを実行したときに起きる可能性のあるエラーとそれに対して返されるステータスコードの説明
.proto
ファイルの中にコメントとして書きました。仕様を書きながら、不備も多く見つけましたし、gRPCを直接呼び出してテストするコードを書いて、必要あればサーバー側のコードを修正したりもしました。上記の1.から5.までについては、次回もう少し詳しく書きたいと思います。
(続く予定)
2018-09-24 14:56
コメント(0)
コメント 0