什么是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

相关文章

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.