armeria icon indicating copy to clipboard operation
armeria copied to clipboard

Nested context paths

Open ikhoon opened this issue 1 year ago • 1 comments

Currently, a context path is only supported at the root path. Nested context paths will help group and isolate each service.

sb.contextPath("/rest")
      .contextPath("/catalog")
          .service("/product", new GetProductService())
          .service("/products", new ProductsHandler())
          .and()
      .contextPath("/cart")
          .service("/checkout", new CheckoutService());
          ... 
          .and()
      .and()
  .contextPath("/gql")
      .service("/catalog", new GraphQLService());

Discussion: https://discord.com/channels/1087271586832318494/1250406858100047896/1250406882426753036

ikhoon avatar Jun 13 '24 02:06 ikhoon

Hello @ikhoon nim. May i look at this issue?

I understood it like this. is my understanding correct?

  • /rest/catalog/product => getProductService()
  • /rest/catalog/products => productsHandler()
  • /rest/cart/checkout => checkoutService()
  • /qql/catalog => GraphQLService()

If we use and() to go back 1-depth before, I think it will cause breakpoints.

From now, and() return Generic <T>. In most case, Generic <T> is ServerBuilder Type. However, contextPath() will returns ContextPathServiceBuilder type. Thus, it will make breaking change.

How about before() or previous() instead of using and() generally to go back 1-depth before? I think, in that way, user will not encounter braking changes.

For Example,

sb.contextPath("/rest")
      .contextPath("/catalog")
          .service("/product", new GetProductService())
          .service("/products", new ProductsHandler())
          .before()
      .contextPath("/cart")
          .contextPath("/foo")
               .contextPath("/bar")
                    .service("/checkout", new CheckoutService());
                    .and()
  .contextPath("/gql")
      .service("/catalog", new GraphQLService());
  • /rest/catalog/product => getProductService
  • /rest/catalog/products => productsHandler
  • /rest/cart/foo/bar/checkout => checkoutService
  • /gql/catalog => GraphQLService.

chickenchickenlove avatar Jul 29 '24 01:07 chickenchickenlove