位置: IT常识 - 正文

Springboot怎么实现restfult风格Api接口(springboot -d)

编辑:rootadmin
Springboot怎么实现restfult风格Api接口 前言

推荐整理分享Springboot怎么实现restfult风格Api接口(springboot -d),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:springboot超详细教程,springboot超详细教程,springboot.,springboot怎么用,springboot -d,springbootssm,springbootssm,springboot ci,内容如对您有帮助,希望把文章链接给更多的朋友!

在最近的一次技术评审会议上,听到有同事发言说:“我们的项目采用restful风格的接口设计,开发效率更高,接口扩展性更好...”,当我听到开头第一句,我脑子里就开始冒问号:项目里的接口用到的是restful风格的设计吗?restful风格的接口是怎么提高的开发效率?或者说这位同事对restful风格是不是有什么误解?于是乎,就有了这篇文章

restful是什么

rest是representational state transfer的缩写,翻译成中文的意思就是网络资源表述性状态转移。直译过来的内容真的很莫名其妙,有点看不懂。简单理解就是,传统的客户端与服务端资源交互接口中有资源状态的描述,restful风格的接口只有资源描述,关于状态的描述转移了,不包含在接口里了,更详细的内容接着往下看。

restful是web服务的一种架构设计风格和开发方式,本质是是一种设计思想和理念,并不是一种新技术,也不针对某一种编程语言,这种理念是在2000年的时候被一个叫Roy Fielding 的人提出来的。但是值得注意的是,rest并没有一个明确的标准,所以才被称之为一种设计风格,而这种设计风格倾向于更加简单轻量的web服务方法设计和实现。

restful的主要原则

虽然没有非常明确的标准,但是Roy Fielding 在提出这种设计理念的时候,也确定了一组架构约束条件和原则,只要满足这些约束条件和原则的应用程序或设计就可以称之为restful风格。restful主要的设计原则如下:

1、网络上的所有事物都被抽象为资源,如一张图片、一段文本,一条数据;

2、每个资源都有一个唯一的资源标识符,如URL;

3、同一个资源具有多种表现形式,即数据格式,如xml,json等;

4、对资源的各种操作不会改变资源标识符;

5、所有的操作都是无状态的,从客户端到服务端的每个请求都必须包含请求所必需的信息;

传统接口设计

本篇文章的主角是restful,而restful风格的设计实际是对传统接口交互的一种优化设计,那么这里简单回顾一下传统的http交互接口是如何设计的,以学生信息管理为例,传统接口通常是这样设计的:

1、查询学生信息列表,http://127.0.0.1:8080/student/queryList,请求方式为post;

2、查询学生信息详情,http://127.0.0.1:8080/student/queryDetail,请求方式为get;

3、保存学生信息,http://127.0.0.1:8080/student/add,请求方式为post;

4、更新学生信息,http://127.0.0.1:8080/student/update,请求方式为post;

5、删除学生信息,http://127.0.0.1:8080/student/del,请求方式为post;

restful风格接口设计

根据restful风格的设计原则,restful风格的接口通常是从这几个方面进行设计的:

1、资源定位描述设计:

restful风格的接口的每一个URL都代表一种资源,URL中只能有名词形式,不能有动词,名词能体现出操作资源的名称,完整的URL可以描述资源本身并且可以在计算机上定位到该资源;

2、资源操作设计:

资源描述设计中用 URL 定位资源,而对资源不同的操作动作,就用不同的http请求方式来表示,http的主要请求方式有get、post、put、delete;其中get表示从服务端获取资源,如查询类操作,post表示在服务端新建资源,如增加、保存类操作,put表示更新服务端上的资源,如更新操作,delete表示从服务端删除资源,如删除类操作;

3、返回状态码设计

  restful风格接口的返回值状态码的设计和http状态码的设计保持一致,常用的http状态码如下:

200 – OK – 一切正常

201 – OK – 新的资源已经成功创建

Springboot怎么实现restfult风格Api接口(springboot -d)

204 – OK – 资源已经成功擅长

304 – Not Modified – 客户端使用缓存数据

400 – Bad Request – 请求无效,需要附加细节解释如 "JSON无效"

401 – Unauthorized – 请求需要用户验证

403 – Forbidden – 服务器已经理解了请求,但是拒绝服务或这种请求的访问是不允许的。

404 – Not found – 没有发现该资源

422 – Unprocessable Entity – 只有服务器不能处理实体时使用,比如图像不能被格式化,或者重要字段丢失。

500 – Internal Server Error – API开发者应该避免这种错误。

rest的直译意思是网络资源表述性状态转移,转移后的状态是什么样的呢?还以学生信息管理为例,采用restful风格的设计大概是这样的:

1、查询学生信息列表,http://127.0.0.1:8080/students,请求方式为get;

2、查询学生信息详情,http://127.0.0.1:8080/student/{id},请求方式为get;

3、保存学生信息,http://127.0.0.1:8080/student,请求方式为post;

4、更新学生信息,http://127.0.0.1:8080/student,请求方式为post;

5、删除学生信息,http://127.0.0.1:8080/student,请求方式为post;

如果是不同的客户端、版本的接口还可以这样区分:

1、查询学生信息列表,http://127.0.0.1:8080/web/v1/students,请求方式为get;

2、查询学生信息详情,http://127.0.0.1:8080/web/v1/student/{id},请求方式为get;

3、保存学生信息,http://127.0.0.1:8080/web/v1/student,请求方式为post;

4、更新学生信息,http://127.0.0.1:8080/web/v1/student,请求方式为post;

5、删除学生信息,http://127.0.0.1:8080/web/v1/student,请求方式为post;

从上面学生信息管理的相关restful风格的接口观察,restful风格的接口大概有以下3个特征:

1、每个URL只表述资源本身;

2、不同的请求方式表述对资源的操作;

3、客户端和服务端之间,传递资源的某种资源的表现层;

Springboot项目restful风格的接口示例@RestControllerpublic class StudentController {/*** 查询学生信息列表接口* @param param* @return*/@GetMapping("/students")public List<Student> studentList(Student param) {List<Student> result = new ArrayList<>();//列表查询业务逻辑return result;}/*** 查询学生详情信息接口* @param param* @return*/@GetMapping("/student")public Student detail(Student param) {Student student = new Student();//详情查询业务逻辑return student;}/*** 增加学生信息接口* @param student* @return*/@PostMapping("/student")public Student add(Student student) {//新增学生信息业务逻辑return student;}/*** 更新学生信息接口* @param student* @return*/@PutMapping("/student")public Student update(Student student) {//更新学生信息业务逻辑return student;}/*** 删除学生信息接口* @param student* @return*/@DeleteMapping("/student")public Student delete(Student student) {//删除学生信息业务逻辑return student;}}restful风格设计的好处

1、URL本身有很强的可读性,具备自描述性;

2、强调http请求以资源为中心,规范了不同http请求方式的使用,具有对应的语义;

3、无状态的服务接口,可提高应用的扩展水平;

总结

restful的理念,本质上是用一种更加简单、清晰、便捷的方式,来定位、描述网络上的资源以及对这些资源的操作。具体在实操上,可能就仁者见仁,智者见智了。回头文章的开始,实际的项目接口的请求方式基本上是以post为主,get请求极少,put和delete请求根本没有,URL的命名实际上仍是传统的方式。restful对开发效率有明显的提升吗?我觉得未必,只不过接口定义看起来更简洁了,无形中开发效率会有一点点的提升,要说明显肯定是没有。

本文链接地址:https://www.jiuchutong.com/zhishi/299530.html 转载请保留说明!

上一篇:【Vue】实现当前页面刷新的四种方法(vue获取当前行)

下一篇:瑞吉外卖项目剩余功能补充(瑞吉接送)

  • 随申码在哪里打开(随申码在哪儿申请)

    随申码在哪里打开(随申码在哪儿申请)

  • 腾讯视频微信登录不出二维码(腾讯视频微信登录怎么转换成QQ登录)

    腾讯视频微信登录不出二维码(腾讯视频微信登录怎么转换成QQ登录)

  • 重设幻灯片是什么意思(重设幻灯片的作用)

    重设幻灯片是什么意思(重设幻灯片的作用)

  • 华为mate30pro所有功能(华为mate30pro所有照片里的图片怎么隐藏)

    华为mate30pro所有功能(华为mate30pro所有照片里的图片怎么隐藏)

  • 充电头充一会特别烫(充电头充一会特别烫会爆炸吗)

    充电头充一会特别烫(充电头充一会特别烫会爆炸吗)

  • iqooneo3内存是ddr5吗(iqooneo3内存是lpddr5吗)

    iqooneo3内存是ddr5吗(iqooneo3内存是lpddr5吗)

  • qq群荣誉怎么设置(怎么设置qq群荣誉样式)

    qq群荣誉怎么设置(怎么设置qq群荣誉样式)

  • 4g上网正常一拨电话就无服务(4g拨号上网)

    4g上网正常一拨电话就无服务(4g拨号上网)

  • 抖音隐藏的作品可以删除吗(抖音隐藏的作品会被抖音检测到吗)

    抖音隐藏的作品可以删除吗(抖音隐藏的作品会被抖音检测到吗)

  • vivo水滴屏有几款(vivo水滴屏有哪几个型号)

    vivo水滴屏有几款(vivo水滴屏有哪几个型号)

  • 超5类网线能走多少兆(超5类网线能走100兆吗)

    超5类网线能走多少兆(超5类网线能走100兆吗)

  • 苹果11如何设置关掉后台(苹果11如何设置动态壁纸)

    苹果11如何设置关掉后台(苹果11如何设置动态壁纸)

  • vivo手机悬浮窗怎么弄(vivo手机悬浮窗口怎么关闭)

    vivo手机悬浮窗怎么弄(vivo手机悬浮窗口怎么关闭)

  • 苹果手机左上角有个麦克风(苹果手机左上角有个汽车)

    苹果手机左上角有个麦克风(苹果手机左上角有个汽车)

  • 京东金融在哪邀请好友(京东金融app怎样邀请新用户)

    京东金融在哪邀请好友(京东金融app怎样邀请新用户)

  • 华为第二空间怎么打开(华为第二空间怎么改密码)

    华为第二空间怎么打开(华为第二空间怎么改密码)

  • 小米哪些手机有nfc功能(小米哪些手机有哈曼卡顿)

    小米哪些手机有nfc功能(小米哪些手机有哈曼卡顿)

  • 红米手电筒不亮了(红米手电筒不亮的三种原因)

    红米手电筒不亮了(红米手电筒不亮的三种原因)

  • 恢复删除的微信好友(恢复删除的微信好友的聊天记录)

    恢复删除的微信好友(恢复删除的微信好友的聊天记录)

  • 抖音点赞有什么用(抖音点赞有什么用直播)

    抖音点赞有什么用(抖音点赞有什么用直播)

  • 腾讯地图如何记录轨迹(腾讯地图如何记录)

    腾讯地图如何记录轨迹(腾讯地图如何记录)

  • 微信图片已过期或被清除怎样恢复(微信图片已过期或已被清理是什么意思)

    微信图片已过期或被清除怎样恢复(微信图片已过期或已被清理是什么意思)

  • 华为mate7怎样硬格(华为mate7怎么强制重启)

    华为mate7怎样硬格(华为mate7怎么强制重启)

  • steam怎么改用户名(steam怎么改用户名和头像)

    steam怎么改用户名(steam怎么改用户名和头像)

  • 京东轻松购怎么设置(京东轻松购和正常购买的区别)

    京东轻松购怎么设置(京东轻松购和正常购买的区别)

  • 十七届智能车智能视觉组(十四届智能车规则)

    十七届智能车智能视觉组(十四届智能车规则)

  • 前端开发:颜色代码速查表【英文颜色、HEX(十六进制)格式、RGB格式、十进制】(前端好看的颜色)

    前端开发:颜色代码速查表【英文颜色、HEX(十六进制)格式、RGB格式、十进制】(前端好看的颜色)

  • 车船税可以免掉吗
  • 普票加专票超过30万全交税吗2020
  • 已认证红冲需要退回发票吗
  • 退休人员返聘工资按工资薪金还是劳务报酬
  • 公司购买商业险多少钱
  • 增值税发票三个点
  • 个体工商户个人经营所得税优惠政策
  • 股东分红个人所得税怎么申报
  • 税控维护费的分录
  • 出口退税收入凭证怎么填
  • 小规模纳税人的好处
  • 增值税优惠政策有哪些
  • 临时工工资作为人员成本如何做账
  • 个人缴纳工会费可以在工资里面扣交吗
  • 没有ca证书怎么办社保
  • 所得税汇算调增调减是什么意思
  • 待处理流动资产损失属于什么科目
  • 怎样冲回多提应收账款?
  • 机械设备已使用怎么处理
  • 贷款逾期账务处理流程
  • 贷款损失准备如何提取
  • 开过去的普通发票多久不能冲红?
  • 苹果电脑mac设备在哪里
  • 出差补助没有发票可以直接入账吗
  • 开增值税专用发票需要什么资料
  • 政府与事业单位会计
  • 上年多计提所得税怎么做会计分录
  • macwifi连接频繁断开
  • deepin安装windows字体
  • 事业单位年末收入怎么算
  • 社保退休金计算方法
  • 劳动合同到期补偿金怎么算
  • unc方式
  • fedora23安装
  • 空调移机人工费多少钱
  • html visit
  • php解析xml数据
  • 商业连锁企业有哪些
  • hypergraph learning
  • 城镇土地使用税优惠政策
  • 股东之间股权转让需要股东会决议吗
  • 购入支票号码和使用支票号码是什么
  • 劳务派遣申报表附表一怎么填
  • 备抵法账务处理方式
  • 在php中声明变量时,变量名称以什么符号开头
  • php视频加水印
  • 供应商发票多开了如何处理?
  • 如何利用sql进行数据传输
  • SqlServer 2005 T-SQL Query 学习笔记(3)
  • 工会支付职工福利费做账
  • 个体工商营业执照注销需要缴费吗
  • 社保退回的款怎么入账
  • 典当业销售的死当物品是什么意思
  • 应付票据转应付账款有附件吗
  • 有限合伙企业协议
  • 公司为员工购买小汽车属于什么所得
  • 收客户逾期利息会计分录
  • 商品预计退回会扣钱吗
  • 利润分配未分配利润怎么结转
  • 会计凭证传递的组织工作主要包括
  • ubuntu kylin 14.04下载 ubuntu优麒麟14.04 lts下载地址
  • centos5安装步骤
  • 如何在安装未知应用中修改权限
  • linux 使用技巧
  • profiler.exe - profiler是什么进程 有什么用
  • win7假死真正解决办法
  • linux sort命令参数及用法详解
  • 系统升级后c盘空间小了
  • win7资源管理器不停的崩溃重启
  • javascript函数大全
  • android 多线程并发
  • 自动返回主页
  • 批处理 leq
  • vuex的理解
  • js获取节点值
  • jquery mobile开发环境
  • 安卓怎么压缩
  • 河北发票查询真伪查询
  • 贵州电子税务局怎么登录
  • 税务局窗口人员工作内容
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设