From 04a2be0c9963932c283c8bc29fdb5e332ce94235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Mon, 10 Aug 2020 16:25:06 +0300 Subject: [PATCH] Update readme --- api-gateway/README.md | 59 +++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/api-gateway/README.md b/api-gateway/README.md index 0d67b8d9b..66cdb20af 100644 --- a/api-gateway/README.md +++ b/api-gateway/README.md @@ -12,49 +12,53 @@ tags: ## Intent -Aggregate calls to microservices in a single location: the API Gateway. The user makes a single call to the API Gateway, -and the API Gateway then calls each relevant microservice. +Aggregate calls to microservices in a single location, the API Gateway. The user makes a single call +to the API Gateway, and the API Gateway then calls each relevant microservice. ## Explanation -With the Microservices pattern, a client may need data from multiple different microservices. If the client called each -microservice directly, that could contribute to longer load times, since the client would have to make a network request -for each microservice called. Moreover, having the client call each microservice directly ties the client to that -microservice - if the internal implementations of the microservices change (for example, if two microservices are -combined sometime in the future) or if the location (host and port) of a microservice changes, then every client that +With the Microservices pattern, a client may need data from multiple different microservices. If the +client called each microservice directly, that could contribute to longer load times, since the +client would have to make a network request for each microservice called. Moreover, having the +client call each microservice directly ties the client to that microservice - if the internal +implementations of the microservices change (for example, if two microservices are combined sometime +in the future) or if the location (host and port) of a microservice changes, then every client that makes use of those microservices must be updated. -The intent of the API Gateway pattern is to alleviate some of these issues. In the API Gateway pattern, an additional -entity (the API Gateway) is placed between the client and the microservices. The job of the API Gateway is to aggregate -the calls to the microservices. Rather than the client calling each microservice individually, the client calls the -API Gateway a single time. The API Gateway then calls each of the microservices that the client needs. +The intent of the API Gateway pattern is to alleviate some of these issues. In the API Gateway +pattern, an additional entity (the API Gateway) is placed between the client and the microservices. +The job of the API Gateway is to aggregate the calls to the microservices. Rather than the client +calling each microservice individually, the client calls the API Gateway a single time. The API +Gateway then calls each of the microservices that the client needs. Real world example -> We are implementing microservices and API Gateway pattern for an e-commerce site. In this system the API Gateway makes -calls to the Image and Price microservices. +> We are implementing microservices and API Gateway pattern for an e-commerce site. In this system +> the API Gateway makes calls to the Image and Price microservices. In plain words -> For a system implemented using microservices architecture, API Gateway is the single entry point that aggregates the -calls to the individual microservices. +> For a system implemented using microservices architecture, API Gateway is the single entry point +> that aggregates the calls to the individual microservices. Wikipedia says -> API Gateway is a server that acts as an API front-end, receives API requests, enforces throttling and security -policies, passes requests to the back-end service and then passes the response back to the requester. A gateway often -includes a transformation engine to orchestrate and modify the requests and responses on the fly. A gateway can also -provide functionality such as collecting analytics data and providing caching. The gateway can provide functionality to -support authentication, authorization, security, audit and regulatory compliance. +> API Gateway is a server that acts as an API front-end, receives API requests, enforces throttling +> and security policies, passes requests to the back-end service and then passes the response back +> to the requester. A gateway often includes a transformation engine to orchestrate and modify the +> requests and responses on the fly. A gateway can also provide functionality such as collecting +> analytics data and providing caching. The gateway can provide functionality to support +> authentication, authorization, security, audit and regulatory compliance. **Programmatic Example** -This implementation shows what the API Gateway pattern could look like for an e-commerce site. The `ApiGateway` makes -calls to the Image and Price microservices using the `ImageClientImpl` and `PriceClientImpl` respectively. Customers -viewing the site on a desktop device can see both price information and an image of a product, so the `ApiGateway` calls -both of the microservices and aggregates the data in the `DesktopProduct` model. However, mobile users only see price -information; they do not see a product image. For mobile users, the `ApiGateway` only retrieves price information, which -it uses to populate the `MobileProduct`. +This implementation shows what the API Gateway pattern could look like for an e-commerce site. The +`ApiGateway` makes calls to the Image and Price microservices using the `ImageClientImpl` and +`PriceClientImpl` respectively. Customers viewing the site on a desktop device can see both price +information and an image of a product, so the `ApiGateway` calls both of the microservices and +aggregates the data in the `DesktopProduct` model. However, mobile users only see price information; +they do not see a product image. For mobile users, the `ApiGateway` only retrieves price +information, which it uses to populate the `MobileProduct`. Here's the Image microservice implementation. @@ -64,7 +68,6 @@ public interface ImageClient { } public class ImageClientImpl implements ImageClient { - @Override public String getImagePath() { var httpClient = HttpClient.newHttpClient(); @@ -114,7 +117,7 @@ public class PriceClientImpl implements PriceClient { } ``` -And here we can see how API Gateway maps the requests to the microservices. +Here we can see how API Gateway maps the requests to the microservices. ```java public class ApiGateway {