【设计模式】JAVA Design Patterns——API Gateway(API网关模式)

简介: 【设计模式】JAVA Design Patterns——API Gateway(API网关模式)

🔍目的


API网关将所有对微服务的调用聚合到一起。用户对API网关进行一次调用,然后API网关调用每个相关的微服务。

API网关模式的目的是缓解其中的一些问题。 在API网关模式中,在客户端和微服务之间放置了一个附加实体(API网关)。API网关的工作是将对微服务的调用进行聚合。 客户端不是一次单独调用每个微服务,而是一次调用API网关。 然后,API网关调用客户端所需的每个微服务。


🔍解释


使用微服务模式,客户端可能需要来自多个不同微服务的数据。 如果客户端直接调用每个微服务,则可能会导致更长的加载时间,因为客户端将不得不为每个调用的微服务发出网络请求。此外,让客户端调用每个微服务会直接将客户端与该微服务相关联-如果微服务的内部实现发生了变化(例如,如果将来某个时候合并了两个微服务),或者微服务的位置(主机和端口) 更改,则必须更新使用这些微服务的每个客户端。


真实世界例子


电子商务站点实现微服务和API网关模式。 在此系统中,API网关调用ImagePrice微服务。


通俗描述


对于使用微服务架构实现的系统,API是聚合微服务调用的入口点。


维基百科


API网关是充当API前置,接收API请求,执行限制和安全策略,将请求传递到后端服务,然后将响应传递回请求者的服务器。网关通常包括一个转换引擎,以实时地编排和修改请求和响应。网关可以提供收集分析数据和提供缓存等功能。网关还可以提供支持身份验证授权安全性审计法规遵从性的功能。


程序示例


此实现展示了电子商务站点的API网关模式。ApiGateway分别使用 ImageClientImpl PriceClientImpl来调用Image和Price微服务。 在桌面设备上查看该网站的客户可以看到价格信息和产品图片,因此 ApiGateway会调用这两种微服务并在DesktopProduct模型中汇总数据。 但是,移动用户只能看到价格信息。 他们看不到产品图片。 对于移动用户,ApiGateway仅检索价格信息,并将其用于填充MobileProduct模型。


程序实现

public interface ImageClient {
  String getImagePath();
}
 
public class ImageClientImpl implements ImageClient {
  @Override
  public String getImagePath() {
    var httpClient = HttpClient.newHttpClient();
    var httpGet = HttpRequest.newBuilder()
        .GET()
        .uri(URI.create("http://localhost:(端口号)5000/image-path"))
        .build();
 
    try {
      var httpResponse = httpClient.send(httpGet, BodyHandlers.ofString());
      return httpResponse.body();
    } catch (IOException | InterruptedException e) {
      e.printStackTrace();
    }
 
    return null;
  }
}


价格微服务的实现

public interface PriceClient {
  String getPrice();
}
 
public class PriceClientImpl implements PriceClient {
 
  @Override
  public String getPrice() {
    var httpClient = HttpClient.newHttpClient();
    var httpGet = HttpRequest.newBuilder()
        .GET()
        .uri(URI.create("http://localhost:(端口号)5000/price"))
        .build();
 
    try {
      var httpResponse = httpClient.send(httpGet, BodyHandlers.ofString());
      return httpResponse.body();
    } catch (IOException | InterruptedException e) {
      e.printStackTrace();
    }
 
    return null;
  }
}


Api网关映射微服务

public class ApiGateway {
 
  @Resource
  private ImageClient imageClient;
 
  @Resource
  private PriceClient priceClient;
 
  @RequestMapping(path = "/desktop", method = RequestMethod.GET)
  public DesktopProduct getProductDesktop() {
    var desktopProduct = new DesktopProduct();
    desktopProduct.setImagePath(imageClient.getImagePath());
    desktopProduct.setPrice(priceClient.getPrice());
    return desktopProduct;
  }
 
  @RequestMapping(path = "/mobile", method = RequestMethod.GET)
  public MobileProduct getProductMobile() {
    var mobileProduct = new MobileProduct();
    mobileProduct.setPrice(priceClient.getPrice());
    return mobileProduct;
  }
}


🔍类图


e1edc6f47505494482ceae398d46f68b.png

API Gateway


🔍适用场景

适用微服务架构,并且需要聚合单点进行微服务之间的调用。


085da2905a2246189302eb4fe9c9f4fd.gif

相关文章
|
7天前
|
负载均衡 安全 API
探索微服务架构中的API网关模式
【6月更文挑战第15天】本文深入探讨了微服务架构中API网关的核心作用与设计原则。通过分析网关在请求路由、负载均衡、安全验证等方面的功能,揭示了其作为系统入口的重要性。同时,文章还讨论了实现高效API网关的技术策略和最佳实践。
|
3天前
|
弹性计算 负载均衡 API
微服务架构下的API网关模式解析
在现代软件工程中,微服务架构因其灵活性和可维护性而受到青睐。本文将探讨API网关模式在微服务架构中的关键角色,分析其设计原则、实现方式及面临的挑战,并结合实际案例阐述如何有效整合API网关以提升系统整体性能和安全性。
|
1天前
|
设计模式 开发框架 Java
java设计模式面试题大全含答案
java设计模式面试题大全含答案
|
2天前
|
设计模式 监控 安全
屏幕监控软件的设计模式:深入理解Java EE
在Java EE环境中,屏幕监控软件采用生产者-消费者设计模式,`ScreenCaptureProducer`类捕获屏幕数据并放入队列,`ScreenCaptureConsumer`负责处理和提交。数据每5分钟通过定时任务和RESTful API自动提交至网站,提升管理效率。该方案支持实时监控、数据分析和高效的数据处理。
21 2
|
5天前
|
缓存 负载均衡 安全
探索微服务架构中的API网关模式
【6月更文挑战第16天】在微服务架构的海洋中,API网关扮演着灯塔的角色,指引着服务的发现与路由。本文将深入探讨API网关的设计原则、关键功能以及在现代后端系统中的应用实践。我们将一起航行于微服务的世界,揭开API网关如何提升系统的整体性能和安全性的神秘面纱。
|
6天前
|
负载均衡 安全 API
探索微服务架构中的API网关模式
【6月更文挑战第15天】在这篇文章中,我们将深入探讨微服务架构中的一个关键组件——API网关。我们将了解API网关的作用、设计原则以及如何在实际项目中实现它。通过阅读本文,您将获得关于如何优化和保护您的微服务架构的实用见解。
|
8天前
|
设计模式 存储 安全
Java中的23种设计模式
Java中的23种设计模式
9 1
|
9天前
|
监控 安全 API
探索微服务架构中的API网关模式
【6月更文挑战第13天】本文深入探讨了在现代软件开发中,微服务架构如何通过API网关模式提升系统的可扩展性、安全性和性能。我们将分析API网关的核心功能,包括请求路由、负载均衡、认证授权以及日志监控等,并讨论如何在实际项目中有效实现这些功能。
|
11天前
|
监控 负载均衡 安全
探索微服务架构中的API网关模式
【6月更文挑战第10天】本文将深入探讨微服务架构中的一个重要组件——API网关。我们将详细分析API网关的功能、优势以及在微服务架构中的关键作用,并通过实例展示如何有效实现和部署API网关以提升系统性能和安全性。
22 2
|
1天前
|
负载均衡 API 开发者
深入理解微服务架构中的API网关模式
在微服务架构中,API网关不仅仅是一个请求转发的节点,它承担着请求路由、负载均衡、认证授权、限流熔断等关键职责。本文将深入探讨API网关的设计原则、实现技术以及在实际部署中的最佳实践,帮助开发者构建一个高效、安全且可扩展的微服务入口。