что такое restcall,pathcall,namedcall в lagom.javadsl.api.Descriptor;

#akka #akka-http #lagom

#akka #akka-http #lagom

Вопрос:

Я новичок в микросервисах и фреймворке Lagom, в сервисном API, где мы делаем сервисные вызовы, я не понимаю разницы namedcall , pathcall и restcall . где и когда мы должны использовать что?

например, в этих вызовах:

   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)
 

Ответ №1:

Документация 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 предназначены для использования при создании семантических 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)
);
}