Lagomを試してみるシリーズ第5回です。まだまだ基本的なところですが、今回はサービス呼び出しの定義方法について少し調べてみました。
これまでのサンプルではrestCall
を使ってサービスを定義してきました。restCall
はその名の通りRESTで呼び出すことを想定したサービスの定義に使用するもので、HTTPメソッドとパスを指定することができるのですが、Lagomではこの他にもnamedCall
とpathCall
でサービスを定義することができます。以下のように複数の呼び出しを定義することもできます。
@Override default Descriptor descriptor() { // @formatter:off return named("helloservice").with( namedCall("namedCall", helloNamedCall()), pathCall("/api/pathCall", helloPathCall()), restCall(Method.GET, "/api/restCall", helloRestCall()) ).withAutoAcl(true); // @formatter:on }
namedCall
は名前、pathCall
はパスを指定します。namedCall
の場合は/指定した名前
にマッピングされ、pathCall
の場合は指定したパスにマッピングされます。どちらも同じように見えますが、pathCall
の場合はパスに/api/order/:id
のように変数を埋め込んだ動的なマッピングを定義することができます。
なお、namedCall
、pathCall
どちらの場合もRequestにNotUsed
を指定するとGETメソッド、リクエスト情報を受け取るためのオブジェクトの型を指定すると自動的にPOSTメソッドにマッピングされるようです。
// GETメソッドで呼び出し可能 @Override public ServiceCall<NotUsed, NotUsed, HelloResponse> helloNamedCall() { return (id, request) -> { ... }; } // POSTメソッドで呼び出し可能 @Override public ServiceCall<NotUsed, HelloRequest, HelloResponse> helloPathCall() { return (id, request) -> { ... }; }
使い分けの基準がいまいちよくわからないのですが、基本的にはrestCall
を使っておけばいいんでしょうか。