3

我是微服务和 Lagom 框架的新手,在我们进行 ServiceCalls 的服务 api 中,我不明白namedcall,pathcallrestcall. 我们应该在何时何地使用哪个?

例如在这些调用中:

  ServiceCall<NotUsed, Cargo, Done> register();
  restCall(Method.POST, "/api/registration", register()

  ServiceCall<NotUsed, NotUsed, Source<Cargo, ?>> getLiveRegistrations();
  pathCall("/api/registration/live", getLiveRegistrations())

  ServiceCall<User, NotUsed> createUser();
  namedCall("/api/users", this::createUser)
4

1 回答 1

4

Lagom 文档很好地涵盖了它:

  1. 命名

最简单的标识符类型是名称,默认情况下,该名称设置为与实现它的接口上的方法名称相同。还可以通过将自定义名称传递给 namedCall 方法来提供自定义名称:

default Descriptor descriptor() {
    return named("hello").withCalls(
        namedCall("hello", this::sayHello)
    );
}

在这种情况下,我们将其命名为 hello,而不是默认的 sayHello。当使用 REST 实现时,这意味着此调用将具有 /hello 的路径。

  1. 小路

第二种类型的标识符是基于路径的标识符。这使用 URI 路径和查询字符串来路由调用,并且可以选择从中提取动态路径参数。它们可以使用 pathCall 方法进行配置。

通过在路径中声明动态部分,从路径中提取动态路径参数。它们以冒号为前缀,例如,/order/:id 的路径有一个称为 id 的动态部分。Lagom 将从路径中提取此参数,并将其传递给服务调用方法。

ServiceCall<NotUsed, Order> getOrder(long id);

default Descriptor descriptor() {
    return named("orders").withCalls(
        pathCall("/order/:id", this::getOrder)
    );
}

当然可以提取多个参数,这些参数将按照从 URL 中提取的顺序传递给您的服务调用方法:

  1. 休息电话

最后一种标识符是 REST 标识符。REST 标识符旨在在创建语义 REST API 时使用。它们使用路径(如基于路径的标识符)和请求方法来识别它们。它们可以使用 restCall 方法进行配置:

ServiceCall<Item, NotUsed> addItem(long orderId);
ServiceCall<NotUsed, Item> getItem(long orderId, String itemId);
ServiceCall<NotUsed, NotUsed> deleteItem(long orderId, String itemId);

default Descriptor descriptor() {
return named("orders").withCalls(
        restCall(Method.POST,   "/order/:orderId/item",         this::addItem),
        restCall(Method.GET,    "/order/:orderId/item/:itemId", this::getItem),
        restCall(Method.DELETE, "/order/:orderId/item/:itemId", this::deleteItem)
);
}
于 2016-11-07T04:30:59.920 回答