怎么做网站快照,专门做焦点图的网站,关键词热度,python个人网站开发前言在最近的一次技术评审会议上#xff0c;听到有同事发言说#xff1a;“我们的项目采用restful风格的接口设计#xff0c;开发效率更高#xff0c;接口扩展性更好...”#xff0c;当我听到开头第一句#xff0c;我脑子里就开始冒问号#xff1a;项目里的接口用到的是…前言在最近的一次技术评审会议上听到有同事发言说“我们的项目采用restful风格的接口设计开发效率更高接口扩展性更好...”当我听到开头第一句我脑子里就开始冒问号项目里的接口用到的是restful风格的设计吗restful风格的接口是怎么提高的开发效率或者说这位同事对restful风格是不是有什么误解于是乎就有了这篇文章restful是什么rest是representational state transfer的缩写翻译成中文的意思就是网络资源表述性状态转移。直译过来的内容真的很莫名其妙有点看不懂。简单理解就是传统的客户端与服务端资源交互接口中有资源状态的描述restful风格的接口只有资源描述关于状态的描述转移了不包含在接口里了更详细的内容接着往下看。restful是web服务的一种架构设计风格和开发方式本质是是一种设计思想和理念并不是一种新技术也不针对某一种编程语言这种理念是在2000年的时候被一个叫Roy Fielding 的人提出来的。但是值得注意的是rest并没有一个明确的标准所以才被称之为一种设计风格而这种设计风格倾向于更加简单轻量的web服务方法设计和实现。restful的主要原则虽然没有非常明确的标准但是Roy Fielding 在提出这种设计理念的时候也确定了一组架构约束条件和原则只要满足这些约束条件和原则的应用程序或设计就可以称之为restful风格。restful主要的设计原则如下1、网络上的所有事物都被抽象为资源如一张图片、一段文本一条数据2、每个资源都有一个唯一的资源标识符如URL3、同一个资源具有多种表现形式即数据格式如xml,json等4、对资源的各种操作不会改变资源标识符5、所有的操作都是无状态的从客户端到服务端的每个请求都必须包含请求所必需的信息传统接口设计本篇文章的主角是restful而restful风格的设计实际是对传统接口交互的一种优化设计那么这里简单回顾一下传统的http交互接口是如何设计的以学生信息管理为例传统接口通常是这样设计的1、查询学生信息列表http://127.0.0.1:8080/student/queryList请求方式为post2、查询学生信息详情http://127.0.0.1:8080/student/queryDetail请求方式为get3、保存学生信息http://127.0.0.1:8080/student/add请求方式为post4、更新学生信息http://127.0.0.1:8080/student/update请求方式为post5、删除学生信息http://127.0.0.1:8080/student/del请求方式为postrestful风格接口设计根据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 – 新的资源已经成功创建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请求方式为get2、查询学生信息详情http://127.0.0.1:8080/student/{id}请求方式为get3、保存学生信息http://127.0.0.1:8080/student请求方式为post4、更新学生信息http://127.0.0.1:8080/student请求方式为post5、删除学生信息http://127.0.0.1:8080/student请求方式为post如果是不同的客户端、版本的接口还可以这样区分1、查询学生信息列表http://127.0.0.1:8080/web/v1/students请求方式为get2、查询学生信息详情http://127.0.0.1:8080/web/v1/student/{id}请求方式为get3、保存学生信息http://127.0.0.1:8080/web/v1/student请求方式为post4、更新学生信息http://127.0.0.1:8080/web/v1/student请求方式为post5、删除学生信息http://127.0.0.1:8080/web/v1/student请求方式为post从上面学生信息管理的相关restful风格的接口观察restful风格的接口大概有以下3个特征1、每个URL只表述资源本身2、不同的请求方式表述对资源的操作3、客户端和服务端之间传递资源的某种资源的表现层Springboot项目restful风格的接口示例RestController
public class StudentController {/*** 查询学生信息列表接口* param param* return*/GetMapping(/students)public ListStudent studentList(Student param) {ListStudent 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对开发效率有明显的提升吗我觉得未必只不过接口定义看起来更简洁了无形中开发效率会有一点点的提升要说明显肯定是没有。