API 架构(RPC风格、RESTful风格)

news2024/9/16 9:53:43

API 架构风格笔记

  • RPC风格的接口案例
  • RESTful风格的接口案例
  • 两者比对

RPC风格的接口案例

RPC(Remote Procedure Call,远程过程调用)风格的接口设计主要关注于远程服务调用的过程,而不强调资源的表述。以下是RPC风格接口的一个案例:

  1. 接口定义
    • 假设我们有一个远程服务,用于处理用户信息的查询和修改。
    • 接口方法可能包括:getUserInfo(userId: int) -> UserupdateUserInfo(userId: int, userInfo: User) -> bool
  2. 调用方式
    • 客户端通过RPC框架(如Dubbo、gRPC等)调用远程服务的方法。
    • 调用时,客户端无需关心底层网络通信的细节,只需按照接口定义传递参数和接收返回值。
  3. 数据格式
    • RPC请求和响应的数据格式通常使用二进制或自定义的序列化协议,以实现高效的数据传输和解析。
  4. 示例请求
    • 客户端通过RPC框架发送一个请求,请求中包含方法名getUserInfo和参数userId=123
  5. 示例响应
    • 远程服务处理请求后,返回一个包含用户信息的User对象给客户端。

RESTful风格的接口案例

RESTful(Representational State Transfer,表述性状态转移)风格的接口设计以资源为核心,强调资源的表述和状态转移。以下是RESTful风格接口的一个案例:

  1. 资源定义
    • 假设我们有一个Web服务,用于管理用户信息。
    • 资源可以是“用户”(User),对应的URI可能是/users/{userId}
  2. HTTP方法
    • 使用HTTP的GET、POST、PUT、DELETE等方法来表示对资源的不同操作。
    • 例如,GET /users/{userId} 用于获取用户信息,POST /users 用于创建新用户,PUT /users/{userId} 用于更新用户信息,DELETE /users/{userId} 用于删除用户。
  3. 数据格式
    • 请求和响应的数据格式通常使用JSON或XML,以易于人类阅读和机器解析。
  4. 示例请求(GET /users/123)
    • 客户端发送一个HTTP GET请求到/users/123
    • 请求头中可能包含认证信息(如Bearer Token)。
    • 请求体为空(因为GET请求通常没有请求体)。
  5. 示例响应(HTTP 200 OK)
    • 服务器返回一个HTTP 200 OK响应,表示请求成功。
    • 响应头中包含一些元数据,如Content-Type: application/json
    • 响应体中包含用户信息的JSON表示,如{"id": 123, "name": "John Doe", "email": "johndoe@example.com"}

两者比对

  1. 从接口名称来看

    • RESTful风格的接口名称通常使用名词来表示资源,遵循资源的层次结构。
      例如,对于获取用户信息的接口,可能会命名为/users/users/{userId},这样的命名方式更侧重于资源的访问,而不是具体的操作。
    • RPC风格的接口名称则通常包含动词,直接描述了服务的操作或动作。
      例如,getUserInfoaddUser等,这样的命名方式更侧重于服务的行为或功能。
  2. 从HTTP请求方法来看

    • RESTful风格严格遵循HTTP协议中定义的请求方法(GET、POST、PUT、DELETE等),每种方法都有明确的操作语义。
      例如,GET用于请求资源,POST用于创建新资源,PUT用于更新资源,DELETE用于删除资源。
    • RPC风格的接口在HTTP请求方法的使用上可能更加灵活或受限。
      有些RPC实现可能只使用POST或GET方法作为远程调用的载体,而不严格区分请求方法的具体语义。
  3. 从返回数据格式来看

    • RESTful风格通常使用JSON格式作为返回数据的标准格式,因为JSON具有轻量级、易于阅读和编写的特点,同时也易于机器解析和生成。RESTful风格的返回数据结构往往遵循一定的规范,便于客户端处理。
    • RPC风格的返回数据格式则可能更加多样化,它取决于具体的RPC框架和协议。虽然JSON也是一种常见的返回数据格式,但RPC也可能支持其他格式,如XML、Protobuf等。RPC风格的返回数据结构可能更加灵活,以适应不同的服务需求和传输场景。

总结

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

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

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

相关文章

推荐清晖一套不错的讲解沟通的线上讲座

推荐清晖一套不错的讲解沟通的线上讲座,比较实际贴地,听完了推荐给大家: 《项目管理中的沟通策略,听出弦外之音,变身沟通达人》 地址:项目管理中的沟通策略,听出弦外之音,变身沟通达…

数据结构(1):ArrayList和顺序表

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 下面我们就开一个新坑,数据结构。数据结构,简单来说就是存放数据的方式,这些方式多种多样,我们来一点一…

Statcounter Global Stats 提供全球统计数据信息

Statcounter Global Stats 提供全球统计数据信息 1. Statcounter Global Stats2. Mobile & Tablet Android Version Market Share WorldwideReferences Statcounter Global Stats https://gs.statcounter.com/ Statcounter Global Stats are brought to you by Statcounte…

C++ 定时器

这是第一次独立设计一个模块,从接口定义,模块组合到多线程并发可能遇到的各种问题,虽然定时挺简单的,但是想设计精度高,并且能应对高并发似乎也不是很容易,当然,最后没有测试定时器的代码&#…

架构模式:MVC

引言 MVC,即 Model(模型)-View(视图)-Controller(控制器),是广泛应用于交互式系统中的典型架构模式,尤其在 GUI 和 Web 应用中。 MVC 的概念源自 GOF(Gang …

JS解密工具之**如何续期 Charles 的 SSL 证书**

本文由 jsjiami加密/一键JS解密 独家赞助 有问题请私聊加密官方客服 Charles 是一款常用的 HTTP 代理工具,用于调试网络请求。然而,Charles 的 SSL 证书会定期过期,如果 SSL 证书失效,你将无法对 HTTPS 请求进行抓包。本文将详细…

SQL语句中in条件超过1000怎么办?

博客主页: 南来_北往 系列专栏:Spring Boot实战 引言 当遇到SQL语句中IN条件超过1000个的情况时,可以采取以下几种策略来有效处理这一问题: 使用临时表:将IN列表中的值存储在临时表中,并将该临时表与查询表进行J…

【Python 千题 —— 算法篇】寻找最长回文子串

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 回文串是指一个字符串从左到右和从右到左读都是一样的。寻找一个字符串中的最长回文子串是许多经典算法问题之一,广泛应…

2024年9月最新界面:自己如何在电脑上注册新的Google谷歌账号,图文详解和关键点解析、常见问题

有一些朋友需要通过谷歌账号来工作、学习或娱乐(例如很多游戏需要用谷歌账号来注册和使用),但是不知道如何注册谷歌账号,或者知道如何注册,但是对于一些步骤或者注意事项不太熟悉,导致注册不成功&#xff0…

什么是LED智能会议一体机?COB超微小间距LED会议一体机大势所趋

LED智能会议一体机,作为现代会议室革新的核心装备,正逐步颠覆传统会议模式的界限。它不仅仅是一台集成了高清显示、触控互动、音视频处理及远程协作等功能于一体的智能设备,更是推动会议效率与体验双重飞跃的关键力量。随着技术的不断进步&am…

【重学 MySQL】十八、逻辑运算符的使用

【重学 MySQL】十八、逻辑运算符的使用 AND运算符OR运算符NOT运算符异或运算符使用 XOR 关键字使用 BIT_XOR() 函数注意事项 注意事项 在MySQL中,逻辑运算符是构建复杂查询语句的重要工具,它们用于处理布尔类型的数据,进行逻辑判断和组合条件…

【Protobuf】初识protobuf以及详细安装教程

W...Y的主页 😊 代码仓库分享 💕 目录 序列化概念 ProtoBuf是什么 ProtoBuf在window下的安装 下载ProtoBuf编译器 配置环境变量 ​编辑 检查是否配置成功 ​编辑 ProtoBuf在Linux下的安装 下载ProtoBuf 安装ProtoBuf 序列化概念 首先我们…

小白开发中遇到的问题和解决方案

小白开发中遇到的问题和解决方案 文章目录 小白开发中遇到的问题和解决方案问题一 问题一 问题:端口别占用可能开开启多个应用 解决方法–在cmd执行下方红框中的命令关闭所有应用

MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?

通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析,核心逻辑如下: 通过注解配置的MappedStatement 核心逻辑就在这个里面了: 继承BaseMapper的MappedStatement 我们看看这个类,里…

idea如何配置模板

配置生成代码指令模板 注:我们常用的有sout,main等指令 第一步打开设置面板 1)按如下操作 2)或者CtrlAltS快捷键直接弹出 第二步找 Editor>LiveTemplates 如下图 第三步创建模板 步骤如下 1)创建分组名字 2)分组名字 3)创…

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

pycharm如何安装selenium

在pycharm中打开一个项目后,点击Setting(ALTCtrlS快捷键) 然后点击install package完成后点击关闭这个窗口,就可以在代码中使用selenium了 成功后出现如下界面 编写一段正常可以运行操作chorme浏览器的 from selenium import webdriver # 指定ChromeDriver的路径driver we…

关于 PC打开“我的电脑”后有一些快捷如腾讯视频、百度网盘、夸克网盘、迅雷等各种捷方式在磁盘驱动器上面统一删除 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142029325 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

淘宝开放平台交易类API解析以及如何测试?

调用淘宝开放平台的订单接口,主要可以通过以下几种途径进行: 1. 直接使用淘宝开放平台提供的API接口 步骤概述: 注册淘宝开放平台账号:首先,你需要在淘宝开放平台注册一个开发者账号。创建应用:在注册并…

Unity3D 小案例 像素贪吃蛇 01 蛇的移动

Unity3D 小案例 像素贪吃蛇 第一期 蛇的移动 像素贪吃蛇 今天来简单制作一个小案例,经典的像素贪吃蛇。 准备 首先调整一下相机的设置,这里使用灰色的纯色背景,正交视图。 接着,创建一个正方形,保存为预制体&#…