Update readme
This commit is contained in:
		| @@ -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 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user