LagomでrestCall以外のサービス定義について調べてみた

Lagomを試してみるシリーズ第5回です。まだまだ基本的なところですが、今回はサービス呼び出しの定義方法について少し調べてみました。

これまでのサンプルではrestCallを使ってサービスを定義してきました。restCallはその名の通りRESTで呼び出すことを想定したサービスの定義に使用するもので、HTTPメソッドとパスを指定することができるのですが、Lagomではこの他にもnamedCallpathCallでサービスを定義することができます。以下のように複数の呼び出しを定義することもできます。

@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のように変数を埋め込んだ動的なマッピングを定義することができます。

なお、namedCallpathCallどちらの場合も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を使っておけばいいんでしょうか。