mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-14 10:58:42 +00:00
ab59dfe770
* Added Microservices client side ui composition to the repo. Added ClientSideCompositionTest, ApiGateway, ClientSideIntegrator, FrontendComponent, CartFrontend, ProductFrontend, updated pom.xml, ReadME.md. * Improved some checkstyle changes. * Added Random variable to re-use the random instead of creating it everytime in FrontendComponent. * changed the Pom.xml and upadted the ReadME.md * Changes in the README.md File as per requirement, name of the file changed from ReadME.md to README.md --------- Co-authored-by: Ilkka Seppälä <iluwatar@users.noreply.github.com>
51 lines
1.8 KiB
Java
51 lines
1.8 KiB
Java
package com.iluwatar.clientsideuicomposition;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* ApiGateway class acts as a dynamic routing mechanism that forwards client
|
|
* requests to the appropriate frontend components based on dynamically
|
|
* registered routes.
|
|
*
|
|
* <p>This allows for flexible, runtime-defined routing without hardcoding specific paths.
|
|
*/
|
|
public class ApiGateway {
|
|
|
|
// A map to store routes dynamically, where the key is the path and the value
|
|
// is the associated FrontendComponent
|
|
private final Map<String, FrontendComponent> routes = new HashMap<>();
|
|
|
|
/**
|
|
* Registers a route dynamically at runtime.
|
|
*
|
|
* @param path the path to access the component (e.g., "/products")
|
|
* @param component the frontend component to be accessed at the given path
|
|
*/
|
|
public void registerRoute(String path, FrontendComponent component) {
|
|
routes.put(path, component);
|
|
}
|
|
|
|
/**
|
|
* Handles a client request by routing it to the appropriate frontend component.
|
|
*
|
|
* <p>This method dynamically handles parameters passed with the request, which
|
|
* allows the frontend components to respond based on those parameters.
|
|
*
|
|
* @param path the path for which the request is made (e.g., "/products", "/cart")
|
|
* @param params a map of parameters that might influence the data fetching logic
|
|
* (e.g., filters, userId, categories, etc.)
|
|
* @return the data fetched from the appropriate component or "404 Not Found"
|
|
* if the path is not registered
|
|
*/
|
|
public String handleRequest(String path, Map<String, String> params) {
|
|
if (routes.containsKey(path)) {
|
|
// Fetch data dynamically based on the provided parameters
|
|
return routes.get(path).fetchData(params);
|
|
} else {
|
|
// Return a 404 error if the path is not registered
|
|
return "404 Not Found";
|
|
}
|
|
}
|
|
}
|