API 架构(RPC和RESTful)

news2024/9/24 19:15:25

目录

1.引言

2.RPC

2.1.特点

2.2.应用

2.3.实现方式

2.4.优缺点

3. RESTful

3.1.特点

3.2.设计原则

3.3.优点

3.4.应用场景

4.比较

5.总结 


1.引言

        API(Application Programming Interface,应用程序编程接口)架构是设计和实现API的基础,它决定了API的交互方式、数据格式、安全策略以及系统的可扩展性和安全性。在API架构中,RPC(Remote Procedure Call,远程过程调用)风格和RESTful(Representational State Transfer,表述性状态转移)风格是两种常见的风格。

2.RPC

        RPC(Remote Procedure Call,远程过程调用)风格是一种在分布式计算环境中广泛使用的通信协议,它允许一个程序调用另一个地址空间(通常是另一台机器上)的过程,就像调用本地过程一样,而不需要显式编码这个远程交互的细节。RPC风格的核心思想是将服务器端的代码或方法封装成远程可调用的服务。客户端在不知道服务实现细节的情况下,通过网络向服务器发送请求,并等待服务器返回结果。

2.1.特点

  1. 远程调用:RPC允许一台计算机上的程序通过网络调用另一台计算机上的程序,就像调用本地函数一样简单。
  2. 透明性:对于调用方来说,RPC调用在编程层面是透明的,即调用方不需要关心底层网络通信的细节。
  3. 序列化与反序列化:在RPC调用过程中,请求和响应的数据需要在网络上传输,因此需要进行序列化和反序列化操作,将数据结构转换为二进制格式,以便在网络上传输。
  4. 客户机/服务器模式:RPC采用客户机/服务器模式,请求程序作为客户机,服务提供程序作为服务器。
  5. 多种传输协议:RPC通常使用自定义的协议进行数据传输,这些协议可能基于HTTP或其他传输层协议,如TCP/IP等,具体选择取决于应用需求和网络环境。
  6. 灵活性:RPC允许开发者定义复杂的接口和数据结构,适用于需要高性能和灵活性的场景。

2.2.应用

  1. 分布式系统:在分布式系统中,不同的服务或模块需要进行远程调用来实现协同工作,RPC是实现这种通信的一种有效方式。
  2. 微服务架构:在微服务架构中,服务之间的通信通常通过RPC来实现,因为它能提供高效、方便的服务间通信。
  3. 跨语言通信:RPC通常支持跨语言的通信,使得不同语言编写的程序可以相互调用,促进了软件开发的灵活性和多样性。

2.3.实现方式

RPC的实现方式通常包括以下几个步骤:

  1. 定义服务接口:使用接口描述语言(IDL)定义服务接口和数据结构,如Protocol Buffers、Thrift等。
  2. 生成代码:根据IDL定义自动生成客户端和服务器端的代码,简化开发工作。
  3. 注册服务:将服务注册到注册中心(如ZooKeeper、Consul等),以便客户端能够发现和调用服务。
  4. 序列化与反序列化:在调用过程中,对请求和响应的数据进行序列化和反序列化操作。
  5. 网络通信:通过底层网络协议(如TCP/IP、HTTP等)进行数据的传输。

2.4.优缺点

RPC风格的优点包括:

  • 高效:相比于HTTP等协议,RPC通常具有更高的传输效率和更低的延迟。
  • 编程简单:对于调用方来说,RPC调用在编程层面是透明的,简化了远程通信的复杂性。
  • 灵活性:支持跨语言通信和自定义传输协议,适应不同的应用场景。

然而,RPC风格也存在一些缺点:

  • 通用性较差:由于RPC通常使用自定义协议和序列化方式,因此通用性不如HTTP等标准协议。
  • 依赖性强:RPC调用依赖于特定的服务框架和通信库,增加了系统的复杂性和维护成本。

3. RESTful

RESTful风格则是一种基于HTTP协议的API设计方式,它强调资源的表示和状态转移。

3.1.特点

  1. 无状态性:每次请求都包含了足够的信息,使得服务器能够处理该请求,而不需要依赖任何服务器存储的上下文信息。
  2. 基于HTTP协议:RESTful API使用HTTP协议作为客户端和服务器之间的通信协议,利用HTTP的GET、POST、PUT、DELETE等方法来表示对资源的获取、创建、更新和删除等操作。
  3. 资源定位:RESTful API将网络中的资源抽象为一系列URL,每个URL都对应一个具体的资源。客户端通过访问这些URL来获取或操作资源。
  4. 自描述性:RESTful API的接口设计直观且自描述,客户端可以通过URL和HTTP方法了解如何与服务器交互。
  5. 统一接口:RESTful API遵循统一的接口原则,即使用标准的HTTP方法来表示对资源的操作,降低了客户端和服务器之间的耦合度。
  6. 分层系统:RESTful API支持通过中间层来提高系统的可扩展性、安全性和可靠性。

3.2.设计原则

  1. 使用HTTP标准方法
    • GET:用于获取资源。
    • POST:用于新建资源(或更新资源,但在RESTful中更推荐使用PUT进行更新)。
    • PUT:用于更新资源,客户端需要提供完整的资源表示。
    • DELETE:用于删除资源。
  2. URI设计
    • URI应简洁明了,能够准确反映资源的层次结构和内容。通常使用名词来表示资源,避免在URI中使用动词。
  3. 资源的表现形式
    • RESTful架构支持多种资源表现形式,如JSON、XML等。客户端和服务器之间可以通过协商来决定使用哪种表现形式。
  4. 使用HTTPS协议
    • 虽然RESTful API本身与HTTPS协议没有直接关系,但为了提高数据传输的安全性,建议使用HTTPS协议来加密客户端和服务器之间的通信。

3.3.优点

  1. 简洁性:RESTful API使用HTTP协议作为基础,使得接口设计简洁明了,易于理解和使用。
  2. 无状态性:提高了系统的可见性、可靠性和可拓展性。
  3. 可扩展性:RESTful API的设计使得系统易于扩展和维护,可以通过添加新的资源来扩展功能。
  4. 跨平台性:RESTful API基于HTTP协议,可以在任何支持HTTP协议的平台上使用,具有良好的跨平台性。

3.4.应用场景

        RESTful风格在多个领域都有广泛的应用场景,包括电商领域、Web应用程序、移动应用开发、物联网和嵌入式系统等。通过RESTful API,前端和后端可以实现高效的数据交互和协同工作,提高应用的性能和用户体验。

4.比较

RPC风格RESTful风格
核心思想将服务器端的代码或方法封装成远程可调用的服务基于HTTP协议的API设计方式,强调资源的表示和状态转移
数据传输使用自定义协议或基于HTTP的封装直接使用HTTP协议
关注点过程调用和数据传输资源表示和状态转移
无状态性可能依赖上下文信息严格遵循无状态原则
接口设计灵活性强,允许自定义接口和数据结构直观且自描述,遵循统一接口原则
适用场景需要高性能和灵活性的场景适用于Web服务,易于理解和使用

5.总结 

        RPC和RESTful是两种不同的接口设计风格,RPC更关注远程服务调用的过程,而RESTful更关注资源的表述和状态转移。
        在实际应用中,可以根据项目需求和团队偏好选择适合的接口设计风格。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 篇-深入了解 Redis 五种数据类型和底层数据结构(SDS、Intset、Dict、ZipList、SkipList、QuickList)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Redis 底层数据结构 1.1 Redis 数据结构 - 动态字符串 SDS 1.2 Redis 数据结构 - Intset 1.3 Redis 数据结构 - Dict 1.3.1 Dict 的渐进式 rehash 1.4 Redis 数据…

记录-java web 生成并下载zip文件

java生成zip文件,zip文件分两种:一种是包含文件夹、一种是不包含文件夹 生成zip文件的方式 ZipOutputStream zipOutputStream new ZipOutputStream(response.getOutputStream());// 文件夹名称String folder "download/";ZipEntry ze new Z…

测试必存!12种网站崩溃的原因及排查方法!

网站崩溃是研发团队最怕看到的情况,但是由于种种原因却时常出现,作为测试人员,我们更应该比一般人了解网站崩溃的原因及排查方法,这是我们测试工作的重要一环。 接下来我就谈谈12种常见的网站崩溃原因以及如何跟踪和解决它们。 你…

《CUDA编程》2.CUDA中的线程组织

0 来自GPU的hello world 在visua studio 中新建一个CUDA runtime项目&#xff0c;然后把kernel.cu中的代码删掉&#xff0c;输入以下代码 #include"cuda_runtime.h" #include"device_launch_parameters.h"#include<stdio.h>__global__ void hello_…

VM ware的安装——个人使用

VM ware的安装 Workstation 和 Fusion 对个人使用完全免费&#xff0c;企业许可转向订阅 如果没有官方账号需要注册一个 选择个人下载&#xff0c;会跳转到下一个页面 要勾选同意&#xff0c;才能下载 点击下载之后还会跳转到填写地址的页面&#xff0c;填写完同意后&#x…

合宙LuatOS应用,与时间相关那些事

合宙嵌入式操作系统LuatOS——在蜂窝物联网模组上推出开源二次开发框架&#xff0c;功能齐全性能稳定&#xff0c;可大幅度降低用户的研发成本和研发周期。 在LuatOS中&#xff0c;获取时间函数用得最多的就是os.time()函数了。接下来&#xff0c;我会讲一些与这个函数以及其他…

美团外卖霸王餐系统有哪些优势?如何选择?

外卖霸王餐系统是一种流行的营销策略&#xff0c;旨在通过提供免费或优惠的餐食来吸引新顾客和提升品牌知名度。美团外卖平台本身拥有巨大的流量&#xff0c;美团霸王餐作为美团外卖平台推出的营销服务&#xff0c;能够充分利用这一流量优势。商家在平台上发布霸王餐活动信息&a…

美业门店怎么提升业绩?连锁美业门店管理系统收银系统拓客系统源码

美业门店想要提升业绩&#xff0c;需要考虑多方面的因素&#xff0c;并采取综合性的方法。以下是一些可以考虑的因素和建议&#xff1a; 产品与服务优化&#xff1a; 提供高质量的美容产品和服务&#xff0c;确保顾客满意度。不断更新产品线&#xff0c;引入新的时尚趋势&#…

Ansible流程控制-条件_循环_错误处理_包含导入_块异常处理

文章目录 Ansible流程控制介绍1. 条件判断2. 循环3. 循环控制4. 错误处理5. 包含和导入6. 块和异常处理7. 角色的流程控制*include_tasks、import_tasks_include之间的区别 条件语句再细说且、或、非、是模糊条件when指令的详细使用方法 循环语句再细说如何使用使用item变量结合…

应用targetSdkVersion升级指导

应用targetSdkVersion升级指导 应电信终端产业协会&#xff08;TAF&#xff09;发布的《移动应用软件高 API 等级预置与分发自律公约》&#xff08;以下简称《公约》&#xff09;要求&#xff1a;截止到2019年5月1日所有新发布的应用 API 必须为26或更高&#xff0c;2019年8月…

What is the OpenAI Chat Completion API tools/functions property format?

题意&#xff1a;OpenAI 聊天完成 API 的工具/函数属性格式是什么 问题背景&#xff1a; Is there any clear documentation on the format of OpenAIs Chat Completion API tools/functions object format? I understand its JSON, but there appear to be underlying requi…

tauri开发软件中,使用tauri自带的api用浏览器打开指定的url链接

有能力的可以看官方文档&#xff1a;shell | Tauri Apps 就是使用这个api来打开指定的url链接&#xff0c;要在tauri.config.json中配置打开这个api&#xff1a; 然后在前端页面中导入使用&#xff1a; import { open } from tauri-apps/api/shell; // opens the given URL o…

Cpp类和对象(下)(6)

文章目录 前言一、初始化列表概念使用注意实际运用explicit关键字初始化列表的总结 二、static成员static成员的概念static成员的特性static的一个实用场景 三、友元友元函数友元类 四、内部类概念特性 五、匿名对象六、再次理解封装和面向对象总结 前言 Hello&#xff0c;本篇…

redis学习(013 实战:黑马点评:优惠券秒杀——超卖问题解决方案)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第52p-第p53的内容 文章目录 问题演示使用jmeter测试两百个并发请求 超卖的原因分析解决方案 加锁悲观锁介绍乐观锁介绍乐观锁…

XXL-Job 监控消息队列消息数量预警

1、什么是Basic Authentication认证 Basic Authentication 是一种常用的 HTTP 认证机制&#xff0c;用于保护 Web 资源免受未授权访问。在这种认证方式中&#xff0c;客户端&#xff08;通常是浏览器&#xff09;需要在 HTTP 请求头中提供用户凭据&#xff08;通常是用户名和密…

Leetcode 最小覆盖子串

解题思路&#xff1a; 哈希表存储字符频率&#xff1a;首先统计字符串 t 中每个字符出现的次数。滑动窗口&#xff1a;用两个指针 left 和 right 来标记当前窗口的左右边界&#xff0c;不断右移 right&#xff0c;直到包含了所有 t 中的字符。然后尝试右移 left&#xff0c;缩…

python爬虫/引用requests/基本使用

1.安装requests 进入控制台使用该命令安装requests pip3 install requests 2.对网站使用get请求 这里用对网站进行get请求&#xff0c;然后打印。 import requests //引用requestsresponse requests.get(urlhttps://www.bilibili.com/)print(response.text) 3.对网站使用…

2024全国研究生数学建模竞赛(数学建模研赛)ABCDEF题深度建模+全解全析+完整文章

全国研究生数学建模竞赛&#xff08;数学建模研赛&#xff09;于9月21日8时正式开赛&#xff0c;赛程4天半&#xff0c;咱这边会在开赛后第一时间给出对今年的6道赛题的评价、分析和解答。包括ABCDEF题深度建模全解全析完整文章&#xff0c;详情可以点击底部的卡片来获取哦。 …

座椅空置状态检测系统源码分享

座椅空置状态检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

大模型之基准测试集(Benchmark)-给通义千问2.0做测评的10个权威测基准测评集

引言 在去年(2023)云栖大会上&#xff0c;阿里云正式发布千亿级参数大模型通义千问2.0。据现场介绍&#xff0c;在10个权威测评中&#xff0c;通义千问2.0综合性能超过GPT-3.5&#xff0c;正在加速追赶GPT-4。以下是通义千问在MMLU、C-Eval、GSM8K、HumanEval、MATH等10个主流…