文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

六种流行的API架构风格

2024-11-30 09:43

关注

作为一名 Java程序员,编写业务 API是非常日常的开发工作,那么,如何选择合适的 API框架?今天我们就来一起聊聊当下最流行的六种API架构风格。

一、SOAP 

定义

SOAP,Simple Object Access Protocol,中文翻译为:简单对象访问协议。它是一种基于 XML用于在网络上进行交互的通信协议,旨在支持分布式计算环境中的应用程序之间的通信。

原理

SOAP的工作原理如下:

SOAP的设计目标是提供一种标准化的、可互操作的方式,使得不同平台上的应用程序能够进行通信和交互。它被广泛用于Web服务中,作为一种用于跨网络进行通信的协议。

使用场景

SOAP 在早期的 Web服务领域中广泛应用,现如今,SOAP在一些情况下已被 RESTful API 和其他轻量级协议所取代,不过 SOAP 仍然有一些适合的使用场景:

需要注意的是,SOAP 相对于 RESTful API来说,更加重量级,使用起来可能更复杂。在现代的 Web开发中,RESTful API通常更受欢迎,因为它们更简洁、轻量级和易于使用。然而,在特定的场景下,如企业级集成和安全性要求高的系统,SOAP仍然是一种有价值的选择。

示例

(1) 定义 SOAP 消息结构

(2) 定义客户端

(3) 定义服务端

示例演示了如何发送 SOAP 请求消息并在服务器端处理请求并返回响应消息。具体实现可能因编程语言、平台和使用的 SOAP 库而有所不同。在实际应用中,还可以使用 WSDL(Web Services Description Language)来定义 SOAP 消息的结构和服务接口。

二、RESTful 

定义

RESTful,Representational State Transfer,中文翻译为:代表性状态转移。它是一种基于现有 Web标准和 HTTP协议的设计和构建网络应用程序的架构风格,旨在提供一种简洁、可扩展、可靠和可互操作的方式来进行网络通信。

原理

RESTful的原理如下:

RESTful架构的设计目标是提供一种简单、灵活、可扩展和可重用的方式来构建网络应用程序。它具有与HTTP协议的天然集成和基于标准化接口的优势,因此成为了Web服务和API设计的常用架构风格。

使用场景

RESTful 的使用场景包括以下几个方面:

总之,RESTful适用于任何需要通过网络进行通信和交互的场景,尤其适合构建分布式系统、跨平台应用和API服务。它的简单性、可扩展性和与HTTP协议的兼容性使得它成为一种广泛应用的架构风格。

示例

(1) 创建 Java API

(2) 访问API

使用工具(如 cURL、Postman 或浏览器插件)发送 HTTP 请求来测试 RESTful API,通过向 http://localhost:8080/users/{id} 发送 GET 请求来获取用户信息。

这种方式是在日常开发中最常见的一种,比如:springboot,springcloud,springMVC工程,都是基于该方式。

三、GraphQL 

定义

GraphQL 不仅是一种架构风格,同时也是一种用于构建和查询 API的查询语言,由Facebook开发并在2015年开源发布,旨在解决传统 RESTful API中的一些限制和挑战。其核心思想是客户端可以向服务器发送一个描述所需数据结构的查询,服务器将返回与查询对应的数据。这意味着客户端可以精确地指定需要的数据,并避免了在传统 RESTful API 中可能出现的过度获取或不足获取的问题。

原理

GraphQL的原理如下:

GraphQL的设计目标是提供一种灵活、高效和可扩展的方式来查询和获取数据,同时减少网络请求的数量和数据的过度获取。它的语法和类型系统提供了强大的工具,使得开发人员能够更好地理解和操作API,而不仅仅是传输数据。

使用场景

GraphQL 的一些使用场景:

总之,GraphQL 适用于各种需要灵活、高效和可扩展数据查询的场景。它可以提高前端开发效率,减少网络传输量,适应多平台和多设备的需求,并支持实时数据交互和订阅功能。

示例

(1) 定义 GraphQL Schema

(2) 创建 GraphQL Servlet

(3) 配置启动类

(4) 发送 GraphQL 查询

使用 GraphQL 客户端(如 Altair、GraphiQL 或 Postman)发送 GraphQL 查询。根据上述示例中的映射路径 /graphql,可以通过向 http://localhost:8080/graphql 发送 POST 请求来执行 GraphQL 查询。

四、gRPC 

定义

gRPC,Google Remote Procedure Call,中文翻译为:Google 远程过程调用。它是一种高性能、跨平台的远程过程调用框架,由 Google 开发并开源。gRPC 基于 Protocol Buffers(protobuf)序列化协议和 HTTP/2 传输协议,用在分布式系统中的不同服务之间进行高效的通信。

原理

gRPC的原理如下:

gRPC的设计目标是提供一种高性能、高效和可扩展的远程过程调用解决方案。它的使用HTTP/2和Protocol Buffers等技术,提供了快速、灵活和跨平台的通信机制,适用于构建分布式系统和微服务架构。

使用场景

gRPC具有以下几个适用场景:

总之,gRPC适用于需要高性能、跨语言、实时通信和微服务架构的场景。它在云原生应用、分布式系统和微服务架构中得到广泛应用,并且被许多大型互联网公司所采用。

示例

(1) 定义 gRPC 服务和消息,创建xxx.proto 的 protobuf 文件,用于定义服务和消息

(2) 将 xxx.proto 生成 Java 代码,指令执行后,会生成一个对应的Java文件

(3) 创建服务端(包括实现和启动类)

(4) 创建客户端

(5 分别运行 GrpcServer 和 GrpcClient 类,启动 gRPC 服务端和客户端。服务端会监听端口 50051,客户端会向服务端发送请求并接收响应。

五、WebSocket 

定义

WebSocket 是一种在 Web 应用程序中实现双向通信的协议。相对于传统的 HTTP 请求-响应模型,WebSocket 允许服务器主动向客户端推送消息,而不需要客户端先发送请求。

原理

(1) 握手(Handshake)阶段:

(2) 数据传输阶段:

(3) 关闭连接:

WebSocket 协议与传统的 HTTP 协议相比,有以下主要区别和特点:

WebSocket 协议在实时通信、实时数据更新、即时聊天、实时协作等场景中得到广泛应用。它为 Web 应用程序提供了一种更高效、更实时的通信方式,使得开发者可以构建更具交互性和实时性的应用。

使用场景

需要注意的是,由于 WebSocket使用全双工连接,它需要较高的服务器资源和网络支持。在选择 WebSocket作为通信协议时,需要考虑服务器的扩展性和性能,并确保网络环境能够支持 WebSocket连接。

示例

(1) 创建服务端

(2) 创建客户端

(3) 运行服务器和客户端:分别运行 MyWebSocketServer 和 MyWebSocketClient 类,启动 WebSocket 服务器和客户端。服务器会监听端口 8080,客户端会连接到服务器并发送消息。

六、Webhook 

原理

Webhook是一种通过HTTP协议实现的回调机制,允许应用程序在特定事件发生时向指定的URL发送HTTP请求。它的原理如下:

Webhook的工作原理是基于事件驱动和 HTTP通信的机制。应用程序将感兴趣的事件与特定的URL进行绑定,并在事件发生时向该URL发送HTTP请求。目标URL上的服务端接收到请求后,执行相应的处理逻辑,并返回适当的响应。这种机制可以实现实时的、异步的事件通知和数据传递,常用于与第三方服务集成、实现自动化处理和实时通知等场景。

使用场景

Webhooks的使用场景:

总之,Webhooks是一种强大的工具,可以在不同应用程序之间实现实时通信、数据同步和自动化流程。通过使用Webhooks,应用程序可以更高效地响应事件和更新,并与其他系统进行集成,提供更好的用户体验和功能扩展性。

示例

示例很简单,通过编写了一个最常用的 HTTP 方式来调用指定的 webhook地址。 “YOUR_WEBHOOK_URL” 可以替换为实际 Webhook URL,而 Webhook URL对应的服务器可以是任何语言开发的。

在日常开发中,webhook使用最多的场景是三方服务对接,比如:三方支付,我们会在请求三方支付的参数中设置一个用户业务服务器回调地址,这样三方服务处理完数据后,可以把结果通过请求回调地址的方式进行返回,这样就可以减少业务服务器同步调用超时的问题,将同步改异步。

再比如 github的webhook功能,可当github server收到push事件时,可以webhook对应的事件,如下图:

七、总结 

本文分析了最流行的 6种 API架构风格,分别从定义到原理,从使用场景再到实例分析,每种风格都有其优缺点和合适的使用场景,或许有些架构风格是你工作中一直在使用,比如:RESTful,或许有些架构风格你不曾听过,比如:SOAP。

存在即合理,了解这些 API架构风格,一方面可以帮助我们了解 API发展的一个历史过程,一方面可以帮助我们在具体的场景选择更合适的架构风格,更重要的是,它可以更好的拓宽我们的技术视野,指不定哪一天工作中就需要使用到这种风格。

另外,比较建议的一点:当我们在遇到一个知识点时,最好是能了解这一类,这样就能做到点到面的升华,真正实现触类旁通,举一反三。

来源:猿java内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯