Expand my Community achievements bar.

Dive into Adobe Summit 2024! Explore curated list of AEM sessions & labs, register, connect with experts, ask questions, engage, and share insights. Don't miss the excitement.

Is it possible to achieve with one sling service

Avatar

Level 6

Just wonder if it is possible to achieve this.

I write a sling service called /wcmapi/myservice. I want to service to handle the URLs.

1. https://locahost:4502/wcmapi/myservice/myplan

2. https://locahost:4502/wcmapi/myservice/mycontact

3.https://locahost:4502/wcmapi/myservice/myhome

The service will take the last value (myplan or mycontact or myhome) in the url as input to generate different output. since the logic is very simple and output as well, instead creating an interface and implement three services, can I combine three services into one service and use the last value in the URL mimic as selector?

Let me know if it is feasible.

Thanks.

10 Replies

Avatar

Level 6

I got it working. Can you please remove this topic. Thanks.

Avatar

Level 10

Can you provide details on how you did this to help ppl looking to do this in the future.

Avatar

Level 6

Define as this

@SlingServlet(paths={"/bin/myservice/home","/bin/myservice/contactus","/bin/myservice/yourplan"},

methods = "GET", metatype=true)

Use the last word as input variable. In this case, it is either home, or contactus or yourplan.

Avatar

Level 10

BigT168

Path is not recommended,

I am wondering why not use resource type and selector to differentiate the execution?

Avatar

Level 6

do you mean

/bin/myservice.home

/bin/myservice.contactus

Avatar

Level 6

I find this article "how to not use selector".

Sling: More About Selector Best Practices - Bots & AEM corner

Should I just create multiple services?

What's the best practice?

Avatar

Level 10

I looked at that article,

I don't think they are talking about not using selector but suggestion is when things gets complicated in one service, you can have multiple service to keep it simple.

But selector is the way to go.

Avatar

Level 6

Thank you for the information. It is very helpful.

However, I really like the calling URL to be /bin/myservice/home instead /bin/myservice.home. Using sling selector, the URL becomes /bin/myservice.home.

Any suggestions?

Thank you.

Avatar

Level 6

Finally, I did this way, not sure if it is best practice.

@SlingServlet(paths={"/myService"},

extensions = { "json" },

methods = "GET", metatype=true)

To access this service, http://localhost:4502/myService.json/home or  http://localhost:4502/myService.json/faq, home and faq is the suffix as an input parameter.