I'm trying to learn about microservices and best practices and came across this scenario and didn't know what was the correct way of approaching it:
I have a website that can display widgets (let's say there's 3 types of widgets, widget A, B, and C) specified by a user. Each widget type has a corresponding microservice (Service A, B, and C) that serves data for each widget type, respectively. The user can save the widgets they want to display into a profile - I'm assuming logically, there's a User Profile Service that stores all the profiles.
One of the designs that makes sense for this is Backends for Frontends method where the website would call an backend service that aggregates all the data to show the user from Services A, B, and C. My question is, who and what is responsible for getting the user profile so the backend service knows what to query for in Services A, B, and C?
If the backend queries the User Profile Service and then queries Services A, B, and C based on the response of the User Profile Service, doesn't that introduce a synchronous communication which is frowned upon?
If the website first queries the User Profile Service and then queries the backend service, doesn't that introduce more chatter between the client and the server?
What's the "correct" way of getting a user profile and aggregating data from difference services based on the profile? Or am I thinking about this incorrectly?