当前位置: 首页 > news >正文

API架构的选择,RESTful、GraphQL还是gRPC

文章目录

    • 一、RESTful
      • 1、什么是RESTful?
      • 2、RESTful架构的原则
      • 3、RESTful的适用场景
      • 4、RESTful的优点
      • 5、RESTful的缺点
    • 二、GraphQL
      • 1、什么是GraphQL?
      • 2、GraphQL的原则
      • 3、GraphQL的优点
      • 4、GraphQL的缺点
    • 三、gRPC
      • 1、什么是gRPC
      • 2、gRPC的应用场景
      • 3、gRPC的优点
      • 4、gRPC的缺点
    • 四、三者之间的比较

在现代的软件工程中,微服务或在客户端与服务端之间的信息传递的方式,比较常见的有三种架构设计的风格:RESTful、GraphQL和gRPC。

每一种模式,都有其特点和合适的使用场景,今天,我们主要来对三种风格做一个深入的理解和对比,以方便我们在做技术选型时,能够做出有效的决策。

一、RESTful

1、什么是RESTful?

RESTful是一种软件架构风格和设计模式,它是一种轻量级的Web服务实现模式。

REST(Representational State Transfer)代表着“表现层状态转移”,它强调使用HTTP协议的GET、POST、PUT、DELETE等动词来实现资源的增、删、改、查操作。

在这里插入图片描述

RESTful是一种基于资源的设计理念,强调在分布式系统中以统一的接口来访问和操作资源。

RESTful架构风格的特点:是客户端和服务器之间的通信采用无状态协议,每个请求包含足够的信息,使得服务器不需要保留客户端的任何上下文信息,从而可以实现高度的可伸缩性和可靠性。

REST风格的API设计通常具有简单、轻量级、易于缓存和扩展等特点。

2、RESTful架构的原则

Restful架构风格遵循以下几个原则:

资源(Resource):将应用程序的功能和数据抽象为资源,每个资源都有一个唯一的标识符(URL)来访问和操作。

统一接口(Uniform Interface):使用统一的接口来对资源进行操作,包括标准的HTTP方法(GET、POST、PUT、DELETE等)和状态码(如200、404、500等)。

无状态(Stateless):客户端请求中应包含足够的信息,服务端不保存客户端的状态信息,每个请求都是独立的,这样可以实现可伸缩性和可靠性。

按需响应(Cacheable):服务端可以通过设置响应头中的缓存策略,使得客户端可以缓存响应,减少对服务端的请求,提高性能和效率。

分层系统(Layered System):客户端与服务端之间可以存在多个中间层(如代理服务器、负载均衡器等),以实现更高级别的可扩展性和安全性。

通过遵循RESTful的原则,可以实现简单、可扩展、易于理解和集成的API设计,促进不同系统之间的互操作性,并支持跨平台和跨语言的通信。
在这里插入图片描述

在现实中,RESTful API已成为构建Web服务和分布式系统的非常常见的实践。

3、RESTful的适用场景

RESTful架构风格,适用于各种不同的场景和应用程序类型。

以下是一些RESTful的经典适用场景:

Web应用程序开发:RESTful非常适合构建Web应用程序,通过使用HTTP协议的标准方法和状态码来操作资源,实现前后端分离、松耦合的架构。

移动应用程序开发:RESTful API提供了移动应用程序与后端服务器进行通信的标准化接口,使得移动应用能够方便地获取和操作数据。

云服务和微服务架构:RESTful API是构建云服务和微服务架构的常见方式,不同的服务通过RESTful接口进行通信和协作。

物联网(IoT)应用程序:RESTful API可以用于物联网设备之间的通信和控制,使得设备能够通过HTTP请求与云平台进行交互。

开放数据接口(Open API):RESTful API可以提供开放的数据接口,供第三方开发者进行集成和构建应用程序。

总的来说,RESTful架构风格非常通用且适用于各种不同的应用场景,特别是在需要构建分布式系统、提供开放接口和实现松耦合架构的应用程序中表现出色。

4、RESTful的优点

RESTful架构,具有以下优点:

简单性:Restful架构使用基于HTTP的标准方法和状态码,易于理解和学习。它采用了简洁的URL和资源的概念,使得API的设计和使用变得简单明了。

可伸缩性:Restful架构的无状态特性使得服务端可以水平扩展,每个请求都是独立的,不依赖于特定的服务器状态,从而提高系统的可伸缩性和性能。

可移植性:Restful API是基于标准的HTTP协议和数据格式(如JSON、XML),可以被不同的平台和编程语言轻松支持,促进了跨平台和跨语言的互操作性。

可见性:Restful API使用明确的URL来表示资源和操作,使得API的结构和功能对开发者和用户来说更加可见和可理解,降低了学习和使用的难度。

缓存支持:Restful API支持HTTP的缓存机制,可以使用缓存来减少对服务器的请求,提高性能和效率。

独立性:Restful架构支持前后端分离,使得前端可以独立演化和开发,后端服务可以以独立的方式进行部署和维护。

5、RESTful的缺点

然而,RESTful架构也有一些缺点:

语义限制:RESTful架构对资源的操作只使用了HTTP的标准方法(GET、POST、PUT、DELETE等),有时可能无法满足某些复杂的操作需求,需要通过扩展HTTP方法或引入自定义操作。

高耦合性:RESTful架构中,客户端需要对服务端的资源结构有一定的了解,资源的结构和URI的设计需要提前约定好,这会带来一定的耦合性。

安全性:RESTful架构对于安全性的支持相对较弱,需要额外的安全措施(如HTTPS、身份验证、授权等)来保护API的安全性。

性能问题:当资源的层级结构较深、关联关系复杂时,可能需要进行多次请求来获取完整的数据,增加了网络开销和响应时间。

综上所述,Restful架构具有简单性、可伸缩性和可移植性等优点,但在语义限制、高耦合性和安全性方面存在一些限制和挑战。在设计和选择API架构时,需要根据具体的应用需求权衡各种因素。

二、GraphQL

1、什么是GraphQL?

GraphQL是一种用于API的查询语言和运行时环境。它于2015年由Facebook开发并开源,并在业界逐渐得到广泛应用。

GraphQL的主要目标是提供一种灵活、高效和强大的方式来获取客户端所需的数据。

在这里插入图片描述

与传统的RESTful API不同,GraphQL允许客户端通过发送一个包含所需数据结构的查询来精确获取数据,而不需要多次请求不同的端点。

GraphQL的核心是一个查询语言,通过该语言可以精细地描述需要获取哪些数据以及数据之间的关系。客户端通过GraphQL查询语句向服务端发送请求,服务端根据查询语句返回数据。GraphQL的查询语句可以嵌套、组合和重用,从而实现了更加灵活和高效的数据获取。

在这里插入图片描述

2、GraphQL的原则

GraphQL架构风格的原则,主要包括以下几点:

单一入口(Single Entry Point):GraphQL的核心思想是通过一个单一的入口点来获取数据。客户端可以使用一个GraphQL查询来获取所需的所有数据,而不需要多次请求。这样可以减少网络往返次数,提高效率。

客户端驱动(Client-Driven):GraphQL采用客户端驱动的数据查询方式,客户端可以灵活地指定需要的数据字段和关联关系,从而避免了传统RESTful接口中的过度获取或不足获取的问题。客户端决定需要的数据,服务器只提供相应的数据。

强类型(Strongly Typed):GraphQL使用强类型系统来定义数据模型和查询。通过定义明确的类型和字段,可以在编译时进行类型检查,减少运行时错误。这有助于提高开发效率和代码质量。

可组合性(Composability):GraphQL具有高度的可组合性,可以通过组合现有的类型和字段来构建复杂的查询和数据模型。这种组合性使得GraphQL非常灵活,可以满足各种不同的数据需求。

实时更新(Real-Time Updates):GraphQL支持实时数据更新和订阅功能,允许客户端订阅数据的变化并接收实时更新。这使得实时应用程序开发更加简单和高效。

自文档化(Self-Documenting):GraphQL的查询语言具有自我描述性,即查询本身就包含了数据模型的描述信息。这使得客户端可以直接查询可用的数据字段和关联关系,减少了对文档的依赖。

批量操作(Batching):GraphQL支持批量操作,可以将多个相关的请求合并为一个请求发送到服务器。这样可以减少网络往返次数,提高效率。

数据加载(Data Fetching):GraphQL支持通过数据加载器(Data Loader)来优化数据的获取和处理。数据加载器可以对数据进行批量加载和缓存,提高数据获取的效率和性能。

以上这些原则,有助于设计和构建具有高度灵活性、可组合性和效率的GraphQL架构。通过遵循这些原则,可以实现更好的数据查询和交互体验,同时提高开发效率和代码质量。

GraphQL的适用场景
GraphQL适用于各种场景和应用程序,特别适用于以下几类经典场景:

多平台应用程序:当应用程序需要为多个平台(例如Web、移动和IoT设备)提供数据服务时,GraphQL非常有用。通过GraphQL,客户端可以精确地获取它们需要的数据,而不需要多个API端点和不必要的数据传输。

复杂的数据需求:对于需要获取和展示复杂数据结构的应用程序,GraphQL是一个理想的选择。它允许客户端根据其需要来精确定义所需的数据字段和关联关系,减少了数据冗余和不必要的查询。

快速迭代和前后端解耦:GraphQL适用于快速迭代和开发过程中的前后端解耦。前端开发人员可以根据需要灵活地获取数据,而无需等待后端开发人员提供新的API端点或数据结构的更改。

微服务架构:对于采用微服务架构的应用程序,每个微服务通常有其专门的数据需求。GraphQL可以作为一个统一的数据层,聚合来自多个微服务的数据,并将其以一种一致的方式暴露给客户端。

实时数据需求:如果应用程序需要实时数据推送和订阅功能,例如聊天应用程序或实时监控系统,GraphQL提供了订阅查询的机制,可以实现实时数据的推送和更新。

个性化数据需求:对于需要根据用户个性化需求提供定制数据的应用程序,GraphQL是一个理想的选择。客户端可以根据用户的偏好和需求定义查询,获取个性化的数据结果。

总之,GraphQL适用于各种不同类型的应用程序和场景,特别适合那些需要灵活、精确和高效获取数据的场景。它提供了强大的查询语言和灵活的数据查询能力,使得客户端能够更好地控制所需的数据,从而提供更好的用户体验和性能。

3、GraphQL的优点

GraphQL架构,其具有以下优点:

灵活性和精确性:GraphQL允许客户端精确地指定需要的数据字段,避免了传统RESTful API中的过度获取和传输不必要的数据。这种灵活性使得客户端能够更好地控制所需的数据,减少了网络传输和数据冗余。

单一端点:与RESTful API相比,GraphQL只需要一个端点,客户端可以发送复杂的查询请求,并获得所需的数据结果。这样简化了API的维护和管理,减少了网络请求的次数。

强大的类型系统:GraphQL拥有丰富的类型系统,可以定义自定义类型、接口和枚举等。这使得客户端和服务端之间的数据交互更加明确和可靠,减少了因数据格式不匹配而引发的错误。

关联和嵌套查询:GraphQL支持在一个查询中指定多个资源之间的关联关系,并支持嵌套查询。这样可以一次性获取多个相关资源,减少了多次请求的需求,提高了数据获取的效率。

缓存控制:GraphQL具有内置的缓存控制机制,允许客户端在查询中指定所需数据的缓存策略。这可以提高数据访问的性能和效率,并减少对服务器的请求。

实时数据推送:GraphQL支持实时数据推送和订阅功能,客户端可以通过订阅查询来获取实时数据更新。这对于需要实时通知和推送的应用程序非常有用,如聊天应用程序或实时监控系统。

4、GraphQL的缺点

尽管GraphQL架构具有许多优点,但也存在一些缺点:

学习曲线高:相对于传统的RESTful API,GraphQL具有更复杂的概念和语法。因此,学习和理解GraphQL的概念和工作原理需要一定的时间和精力。

过度获取数据:由于GraphQL的灵活性,客户端可能会过度获取数据,导致查询结果过于庞大,增加了网络传输和数据处理的负担。

缺乏标准化:与RESTful API相比,GraphQL缺乏一致的标准化规范。这导致不同的实现之间可能存在差异,开发人员需要根据具体的实现来进行学习和开发。

缓存管理复杂:由于GraphQL的灵活性和精确性,缓存管理变得更为复杂。开发人员需要考虑缓存数据的一致性和更新策略,以确保数据的准确性和实时性。

安全性考虑:由于GraphQL允许客户端灵活地定义查询,服务端需要特别关注安全性方面的考虑。例如,客户端可能通过查询来获取敏感数据或进行恶意操作。因此,服务端需要实施适当的安全措施,如认证、授权和输入验证,以保护数据和系统的安全。

性能问题:尽管GraphQL可以减少网络请求的次数,但对于复杂的查询和大规模数据集,GraphQL可能面临性能问题。查询的复杂性和数据加载的成本可能导致响应时间的延迟。因此,开发人员需要仔细考虑和优化GraphQL的查询性能。

缺无状态特性:与RESTful API相比,GraphQL没有内置的无状态特性。这意味着服务端需要维护客户端的查询状态,以便正确处理查询和返回一致的结果。这可能增加服务端的复杂性和开发的复杂性。

三、gRPC

1、什么是gRPC

gRPC是一种高性能、开源和通用的远程过程调用(RPC)框架,由Google开发。

gRPC支持多种编程语言和平台,并使用Protocol Buffers作为默认的消息编码协议,可以在不同的应用程序之间实现高效的通信。

在这里插入图片描述

gRPC框架基于HTTP/2协议,它支持全双工的流式传输、多路复用、头部压缩等特性,可以提供更高效的网络性能和更好的扩展性。同时,gRPC也支持多种负载均衡算法、认证和授权机制,可以保障通信的安全性和可靠性。

gRPC可以简化应用程序之间的通信过程,开发者只需要定义一份IDL(接口定义语言)文件,然后使用gRPC框架自动生成客户端和服务端的代码。

另外,gRPC默认使用Protocol Buffers作为消息编码协议,所以通信数据的大小比传统的文本协议(例如JSON)更小,可以提高网络性能。

2、gRPC的应用场景

gRPC具有广泛的应用场景,常见的使用场景包括:

微服务架构:gRPC适用于构建微服务架构中的服务间通信。由于其高效的序列化和跨语言支持,可以实现不同微服务之间的快速、可靠的通信。

分布式系统:gRPC可以在分布式系统中作为通信框架使用,用于不同节点之间的数据传输和远程调用。它提供了高效的远程过程调用机制,适用于大规模分布式系统的通信需求。

API后端服务:gRPC可以用作构建API后端服务的通信协议。它提供了强类型和接口定义语言,使得客户端和服务器之间可以共享和交流接口定义,方便开发和维护。

实时流式数据传输:gRPC支持双向流式通信,适用于需要实时传输和处理流式数据的场景。例如,实时聊天应用、实时数据分析和实时监控系统等。

高性能计算:由于gRPC使用了高效的序列化和传输协议,可以在需要进行高性能计算的场景中使用。例如,分布式计算、机器学习模型的训练和推理等。

IoT(物联网)应用:gRPC可以在物联网应用中作为设备和后端服务器之间的通信协议。它的轻量级和高效性能使得它适用于连接大量设备的场景。

gRPC适用于许多不同的应用场景,特别是在分布式系统、微服务架构和实时通信方面具有显著的优势。它提供了高效、可靠和灵活的通信机制,使得开发人员可以更轻松地构建复杂的分布式应用程序。

3、gRPC的优点

gRPC架构的关键特点,主要包括以下几点:

高效的远程过程调用(RPC):gRPC使用高效的远程过程调用协议,基于Protocol Buffers(protobuf)进行数据序列化和通信。通过使用二进制协议和高性能的序列化机制,gRPC可以实现快速、高效的跨网络通信。

强类型和接口定义语言(IDL):gRPC使用接口定义语言(IDL)来定义服务接口和消息格式。IDL提供了一种规范和标准,可以在客户端和服务器之间共享和交流。通过IDL,可以明确地定义服务接口和消息类型,提高跨平台和多语言的互操作性。

支持多种传输协议:gRPC支持多种传输协议,包括基于HTTP/2的传输和传统的TCP传输。HTTP/2作为底层协议,提供了多路复用、流控制和头部压缩等优点,可以提高性能和效率。

支持多种编程语言:gRPC支持多种编程语言,包括Java、C++、Python、Go等,可以满足不同语言和技术栈的需求。这使得开发人员可以使用自己熟悉的编程语言来实现和使用gRPC服务。

双向流式通信(Bidirectional Streaming):gRPC支持双向流式通信,即客户端和服务器可以同时发送和接收数据流。这使得实时的流式数据传输和通信成为可能,例如聊天应用、实时监控等场景。

拦截器和中间件(Interceptors and Middleware):gRPC提供拦截器和中间件的机制,可以在请求和响应的处理过程中插入自定义的逻辑。这样可以实现日志记录、认证授权、错误处理等通用的功能,提高代码复用性和可维护性。

可扩展性和服务发现:gRPC支持服务发现和负载均衡机制,可以根据需要动态地扩展服务。通过使用服务发现机制,可以自动发现和管理可用的服务实例,以实现高可用性和负载均衡。

自动生成的客户端和服务器代码:使用gRPC的IDL和相关工具,可以自动生成客户端和服务器的代码。这样可以简化开发过程,减少手动编写重复性代码的工作量。

这些原则使得gRPC成为一个强大、高效和灵活的RPC框架。通过遵循这些原则,可以实现快速、可靠的跨网络通信,并提供丰富的功能和特性,满足不同应用场景的需求。

4、gRPC的缺点

尽管gRPC具有许多优点,但也存在一些缺点:

学习曲线较陡:相对于传统的RESTful API和其他通信协议,gRPC具有一定的学习曲线。使用gRPC需要了解Protobuf和IDL的概念,并学习如何定义服务接口和消息类型。这可能对于新手或非熟悉这些概念的开发人员来说,需要一定的时间和学习成本。

不适用于所有场景:尽管gRPC在许多场景下表现优异,但并不是适用于所有应用场景。例如,如果你的应用程序需要对公共网络进行通信,而网络环境受到限制(如防火墙),则可能需要配置特殊的设置来支持gRPC的通信。

难以调试和跟踪:由于gRPC使用二进制协议和高效的序列化机制,数据在传输过程中进行了编码和压缩,使得调试和跟踪变得更加困难。在排查问题时,可能需要额外的工具和技术来解析和查看数据。

不适用于所有语言和平台:尽管gRPC支持多种编程语言和平台,但并不是所有语言和平台都得到了广泛的支持。某些语言和平台的gRPC实现可能不如其他语言和平台成熟和稳定。

依赖于网络和服务发现:gRPC是基于网络的通信协议,因此在使用gRPC时需要稳定的网络连接。此外,使用gRPC时需要合适的服务发现机制来管理和调度服务实例,这可能需要额外的配置和维护。

总的来说,尽管gRPC具有许多优点,但在选择使用它时也需要考虑到其可能存在的一些限制和挑战。根据具体的应用需求和技术环境,需要综合评估是否适合采用gRPC作为通信协议。

四、三者之间的比较

诸如以上内容所述,现在对这三种API的架构设计和实现方式,都有了一个深入的理解,对他们的特性,优点和缺点也有初步的了解。

在这里插入图片描述

下面,是对三个实现方案的一些关键特性的一个综合对比如下:

在这里插入图片描述

RESTful、GraphQL和gRPC是三种常见的API架构设计和实现模式,它们在设计理念、数据传输方式和使用场景上都存在这一定的差异:

RESTful是基于HTTP协议的传统API架构,使用简单、易于理解,适用于传统的API开发和数据交互场景。

GraphQL是一种灵活的数据查询语言和API查询协议,客户端可以灵活地指定需要的数据,并避免了"过度获取"的问题,适用于需要动态数据获取和灵活数据查询的场景。

gRPC是一种高性能的跨语言的远程过程调用协议,使用基于二进制的通信协议和强类型接口定义,适用于分布式系统、微服务架构和实时通信等场景。

我们在做API实现方案的选型时,要结合具体的应用需求、开发团队的技术能力和技术栈,以及可扩展性等实际需求,来选择适合的方案。要记住的至关重要的一点是:最新的、最流行的不一定是最好的选择。

另外,无论选择哪种架构和协议,重要的是理解其特点、原则和使用方式,并根据具体情况进行合理的设计和优化,以提供高效、可扩展和可靠的API服务。

相关文章:

API架构的选择,RESTful、GraphQL还是gRPC

文章目录 一、RESTful1、什么是RESTful?2、RESTful架构的原则3、RESTful的适用场景4、RESTful的优点5、RESTful的缺点 二、GraphQL1、什么是GraphQL?2、GraphQL的原则3、GraphQL的优点4、GraphQL的缺点 三、gRPC1、什么是gRPC2、gRPC的应用场景3、gRPC的…...

人机融合智能的测量、计算与评价

老子在《道德经》第二十一章写道:"道之为物,惟恍惟惚。惚兮恍兮,其中有象;恍兮惚兮,其中有物。窈兮冥兮,其中有精;其精甚真,其中有信。"(“道”这个东西,没有清楚的固定实体。它是那样的恍恍惚惚啊,其中却有形象。它是那样的恍恍惚…...

虹科新品 | 高可靠性、可适用于高磁/压的线性传感器!

PART 1 什么是线性传感器? 基本上,线性传感器是一种用于测量位移和距离的设备,具有高可靠性。测量网格通过光学传感器移动测量数据,数据被光学记录并通过控制器转换为电气数据,而控制器又可以转换为路径。 因此&…...

支付系统设计五:对账系统设计01-总览

文章目录 前言一、对账系统构建二、执行流程三、获取支付渠道数据1.接口形式1.1 后台配置1.2 脚本编写1.2.1 模板1.2.2 解析脚本 2.FTP形式2.1 后台配置2.2 脚本编写2.2.1 模板2.2.2 解析脚本 四、获取支付平台数据五、数据比对1. 比对模型2. 比对器 总结 前言 从《支付系统设…...

阿里三面过了,却无理由挂了,HR反问一句话:为什么不考虑阿里?

进入互联网大厂一般都是“过五关斩六将”,难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈。 近日,某位测试员发帖称,自己去阿里面试,三面都过了,却被…...

办公智慧化风起云涌,华为MateBook X Pro 2023是最短距离

今年以来,我们几乎每个月,甚至每星期都可以看到大模型应用,在办公场景下推陈出新。 办公智慧化已成必然,大量智力工作正在被自动化。一个普遍共识是:AI能力范围之内的职业岌岌可危,AI 能力范围之外的职业欣…...

分布式项目 09.服务器之间的通信和三个工具类

项目的结构:1.通过Nginx首先把访问首页的请求发送到前端web服务器,2.web服务器会根据请求的url中的一些细节,来把相关的请求发送到相关的服务器中,3.相关的服务器会处理业务,并且返回结果到web服务器中,最后…...

C# 基本语法

C# 基本语法 C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。 例如,以 Rectangle(矩形)对象为…...

做网络爬虫需要掌握哪些技术?

网络爬虫是指通过代码自动化地访问网页并收集数据的程序,要开发一个成功的爬虫,需要掌握以下技术: 1. HTTP 协议:了解 HTTP 请求和响应的基本内容,以及如何使用 HTTP 请求头和响应头来优化爬虫性能。 2. HTML/CSS/Ja…...

工作利器:三种简单方法将PPT转换成PDF

PDF是一种常用的文件格式,适合数据传输和阅读。在工作中,有时我们需要将PPT文件转换为PDF格式以方便使用。下面是几种将PPT转换为PDF的方法,其中方法二将修改为使用记灵在线工具进行转换。 方法一:直接将文件导出为PPT 一般来说…...

《设计模式》状态模式

《设计模式》状态模式 定义: 状态模式也称为状态机模式,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。属于行为型模式。 状态模式的角色组成: State(抽象状态类):定义一个接口用来封装与…...

2023年好用的设计图制作软件推荐

说到设计图制作软件,设计师当然最关注核心设计功能,包括预加载模板、图像数据库、界面和基本编辑功能。此外,还要考虑设计图制作软件是否可以协同工作。 1.即时设计 即时设计是一款「专业UI设计工具」,不受平台限制,…...

JavaNote_1.0.2_Spring

Spring框架定义 Spring Framework: Spring 最初的项目,包括六大模块:DAO、ORM、AOP、JEE、WEB、CORE。控制反转和面向切面编程是它的核心功能。 Spring Boot: 一套全新的基础框架,用来快速搭建Spring应用,…...

微服务多模块:Springboot+Security+Redis+Gateway+OpenFeign+Nacos+JWT (附源码)仅需一招,520彻底拿捏你

可能有些人会觉得这篇似曾相识,没错,这篇是由原文章进行二次开发的。 前阵子有些事情,但最近看到评论区说原文章最后实现的是单模块的验证,由于过去太久也懒得验证,所以重新写了一个完整的可以跑得动的一个。 OK&#…...

HNU数据结构与算法分析-作业4-图结构

1. (简答题) 【应用题】11.3 (a)画出所示图的相邻矩阵表示 (b)画出所示图的邻接表表示 (c)如果每一个指针需要4字节,每一项顶点的标号占用2字节,每一条边的权需要2字节&#xff0…...

AMPL IDE语法整理

文章目录 1、参数\集合和变量定义2、目标和约束的书写3、求解命令4、AMPL调用不同求解器的Options目录未完待续~ \qquad 最近再搞一些模型,需要用到AMPL中不同的求解器进行验证求解,故建立本博客,用于随时整理AMPL的相关语法和命令&#xff0…...

从0-1搭建支持gb28181协议搭建流媒体平台

系列文章目录 文章目录 系列文章目录前言一、搭建流程二、运行播放直播流效果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/62b558f0213044f292be69da8cc29730.png)总结前言 一个基于C++开发的国标GB28181流媒体信令服务器。 采用SipServer+ZLMediaKit。可以搭建一个…...

数据结构与算法之栈: Leetcode 682. 棒球比赛 (Typescript版)

棒球比赛 https://leetcode.cn/problems/baseball-game/ 描述 你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。 比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops&a…...

E-office Server_v9.0 漏洞分析

漏洞简介 泛微e-office是一款标准化的协同OA办公软件,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。由于泛微 E-Office 未能正确处理上传模块中输入…...

MySQL数据库,JDBC连接数据库操作流程详细介绍

前言: 在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...

P10909 [蓝桥杯 2024 国 B] 立定跳远

# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时&#xff0…...

构建Docker镜像的Dockerfile文件详解

文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...