什么是REST API

2024-06-23 14:52
文章标签 api rest

本文主要是介绍什么是REST API,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 什么是RESTful API

REST API,全称 Representational State Transfer,最初由计算机科学家 Roy Fielding 提出。
是遵循 REST 架构规范的应用编程接口(API),支持与 RESTful Web 服务进行交互。

又被称作 RESTful API,充满Representational State TransferAPI

2. REST API设计规范

2.1 设计规范
  • 将一切数据视作资源
  • 利用HTTP请求方式,描述对资源的操作 (增/删/改/查)
  • 通过HTTP响应状态码,描述对资源的操作结果 (如 : 200/5xx)
2.2 期望效果
  • 看URL知道是什么资源
  • 看Method知道要对资源进行什么操作
  • 看Response Code知道操作是否成功
2.3 Method规范 : 用于描述操作 (动词)
  • GET : 用于读取资源
  • POST : 用于创建资源
  • PUT : 用于更新资源 (客户端提供更新后的完整资源)
  • PATCH: 用于局部更新 (客户端提供资源局部变量)
  • DELETE : 用于删除资源
2.4 URL规范 : 只使用名词,不能有动词

在这里插入图片描述
基于HTTP协议URL对外暴露

  • 标准格式
    • http(s)://域名:端口[/版本]/资源1[1子资源21.../子资源n][/路径变量)
  • 多版本控制
    • GET http(s)://edu.51cto.com/v1.1/blog/article/10
  • 数据查询采用复数
    • GET http(s)://edu.51cto.com/v1.1/blog/articles?categoryld=10
  • 反面典型
    • GET http(s)://edu.51cto.com/article/select by id?id=10
2.5 Response规范 : 需保持统一结构
{code : //描述状态data : 返回数据message : //状态描述
}

可以定义自己的结构,对所有接口的返回结构保持统一就行

2.6 有什么好处

易于理解和实现,支持跨平台和跨语言通信,灵活、扩展性强,使用标准HTTP协议,简化数据交换。
支持多种数据格式,易于缓存和分层架构,提升了应用的开发效率和性能。

2.7 接口设计注意事项
  • 接口要保证幂等性设计
  • 标准化的相应结果集
  • 接口设计采用无状态方案
    • Restful接口每一个请求访问进来应都能得到相同的预期

3. 接口幂等性设计

幂等性 : 当多次重复请求时,接口能够保证与预期相符的结果

例如 : 我们设计了一个为员工涨薪的接口,本次请求发送后为1号员工涨薪500元。

PUT https://edu.lagou.com/employee/salaary
{"id":"1","incr_salary":500}
3.1 如果你是一个新人没有考虑幂等性特性

可能会这么写,伪代码如下 :

//查询1号员工数据
Employee employee = employeeService.selectById(1);  
//更新工资
employee.setSalary(employee.getSalary() + incrSalary);
//执行更新语句
employeeService.update(employee)

对于这段代码,单独运行是没有任何问题的,但是我们要注意 :

在分布式环境下,为了保证消息的高可靠性,往往客户端会采用重试或消息补偿的形式重复发送同一个请求,那么这种情况下这段代码就会出严重问题,每一个重复请求被发送到服务器会让该员工工资增加500,最终该员工工资会大于要求实际应收工资。

3.2 幂等解决方案 : 乐观锁设计

在行业中有一种乐观锁设计,在工资表额外增加一个version字段,代表当前数据的版本,任何对该数据修改操作都会让version字段值+1,这个version数值要求附加在请求中。

PUT https://edu.lagou.com/employee/salaary
{"id":"1","incr_salary":500,"version":1}

数据库

idsalaryversion
130001

相应的,服务器代码也要做出相应变化

//查询1号员工数据
Employee employee = employeeService.selectById(1);  
//更新工资
employee.setSalary(employee.getSalary() + incrSalary);
//设置版本号
employee.setVersion(employee.getVersion() + 1);
//执行更新语句
employeeService.update(employee)

注意此时update方法除了条件id外,还要增加version的判断,如下所示 :

update employee set salary = 3500,version=2 where id=1 and version=1

当执行成功后,1号员工数据库将工资更新未3500,版本为2

idsalaryversion
135002
3.3 如何保证幂等呢 ?

假设客户端再次发送重复的请求

PUT https://edu.lagou.com/employee/salaary
{"id":"1","incr_salary":500,"version":1}

后台逻辑仍然会执行下面的update语句

update employee set salary = 3500,version=2 where id=1 and version=1

此时,因为数据库中version字段已经更新未2,where筛选条件将无法得到任何数据,自然就不会产生实质的更新操作,我们幂等性的初衷就已经达到了。

4. 参考

什么是 REST API 一文读懂 (RESTful API)
【IT老齐170】如何优雅的设计RESTful API接口
REST API 简介 - RESTful Web 服务 (apifox.com)
【前端面试】当被面试官问到什么是 RESTFul-API_哔哩哔哩_bilibili

Postman中的REST API 示例 : Postman REST API basics: CRUD, test & variable

这篇关于什么是REST API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087468

相关文章

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

WordPress开发中常用的工具或api文档

http://php.net/ http://httpd.apache.org/ https://wordpress.org/ https://cn.wordpress.org/ https://core.svn.wordpress.org/ zh-cn:开发者文档: https://codex.wordpress.org/zh-cn:%E5%BC%80%E5%8F%91%E8%80%

Java后端微服务架构下的API限流策略:Guava RateLimiter

Java后端微服务架构下的API限流策略:Guava RateLimiter 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,API限流是保护服务不受过度使用和拒绝服务攻击的重要手段。Guava RateLimiter是Google开源的Java库中的一个组件,提供了简单易用的限流功能。 API限流概述 API限流通过控制请求的速率来防止

Docker远程连接和Docker Remote Api

在Docker生态系统中一共有3种API:Registry API、Docker Hub API、Docker Remote API 这三种API都是RESTful风格的。这里Remote API是通过程序与Docker进行集成和交互的核心内容。 Docker Remote API是由Docker守护进程提供的。默认情况下,Docker守护进程会绑定到一个所在宿主机的套接字:unix:///v

基于MinerU的PDF解析API

基于MinerU的PDF解析API - MinerU的GPU镜像构建- 基于FastAPI的PDF解析接口 支持一键启动,已经打包到镜像中,自带模型权重,支持GPU推理加速,GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素,保持语义连贯对多栏输出符合人类阅读顺序的文本保留原文档的结构,包括标题、段落、列表等提取图像、图片标题、表格、表格标题自动识别

mongodb基本命令和Java操作API示例

1.Mongo3.2 java API示例:http://www.cnblogs.com/zhangchaoyang/articles/5146508.html 2.MongoDB基本命:http://www.cnblogs.com/xusir/archive/2012/12/24/2830957.html 3.java MongoDB查询(一)简单查询: http://www.cnblogs