美文网首页
RESTful的理解

RESTful的理解

作者: 今年五年级 | 来源:发表于2021-11-02 16:28 被阅读0次

引子

大白话讲RESTful API
用URL定位资源,用HTTP描述操作

API:application programming interface 应用程序编程接口
RESTful前面的REST是什么呢?
REST就是representation state transfer表示层状态转移。首发于2000年一个博士的论文中。REST没有明确的标准,而是一种设计风格,符合REST风格的api称为RESTful API

为什么RESTful变得流行

在互联网发展初期,移动端没有现在这么百花齐放,页面请求和并发都不高。那时候使用asp,jsp的整页刷新的动态页面技术尚可。

随着互联网和移动设备的发展,人们对web应用的使用需求也增加,传统的动态页面由于整页刷新效率较低渐渐被HTML+JS(ajax)的前后端分离技术取代,且安卓,ios,微信小程序等形式客户端层出不穷,客户端种类多元化,客户端和服务端需要接口通信,而接口的规范性就成为问题

所以一套结构清晰符合标准易于理解扩展方便,让大部分人能够理解接收的接口风格就显得极为重要

现在,RESTful是目前最流行的接口设计规范

RESTful API特点

  1. 以资源为基础:资源可以是json格式、xml、html、图片、视频。除了二进制的资源,其他更多以json为载体,面向用户的数据,一般通过数据库中查询取得
  2. 统一接口:对资源的操作包括获取,创建,修改和删除,这些操作正好对应http协议提供的GET、POST、PUT、DELETE方法,即使用HTTP动词表示增删改查资源

有些同学可能会说,GET、POST我也经常用啊。但是在网站里的GET和POST同RESTFul中的GET、POST是不一样的。网站里使用GET、POST的选择点在于,简单的用GET、复杂对象用POST;但在REST里,GET对应的是查询一个资源,而POST对应的是新增一个资源,意义是决然不同的。理解这一点非常重要

  1. 无状态:一次调用一般就会返回结果,服务器不能保存客户端的信息,每一次从客户端发送的请求中,要包含所有必须的状态信息
  2. URL中只有名词:不出现动词,且推荐用复数形式
  3. HTTP状态码:使用正确的HTTP Status Code表示访问状态

开始设计RESTful API

首先我们来了解一下标准的URL设计规范:
url为统一资源定位符,接口属于服务端资源,首先通过url定位到资源才能访问,通常一个完整的url由以下几部分构成
URL=scheme "://" host ":" port "/" path ["?" query]["# fragment]

  • scheme:底层用的协议,如https,http,ftp
  • host:服务端域名或者ip地址
  • port:端口
  • path:访问资源的路径
  • query:查询字符串,客户端发送给服务器的参数,更多的是发送数据分页、排序参数
  • fragment:锚点,定位到页面的资源

由上面可以看到,我们在设计RESTful API的时候需要考虑的重点是path部分,通常一个RESTful API的path组成如下:
/{version}/{resources}/{resource_id}

  • version:API版本号,如v1,v2,v3,控制版本利于应用迭代
  • resources:资源,一般为小写英文单词复数形式
  • resouce_id:资源的id,访问或操作该资源
    多层级资源path

/{version}/{resources}/{resource_id}/{subresources}/{subresource_id}
那么RESTful API的URL具体设计规范可以概括如下:

  1. api必须有version版本标志
  2. 使用token令牌来做用户身份校验、权限分级,而不是cookie
  3. 不要大写字母,所有单词使用英文小写
  4. 连字符用中杠"-",而不是下杠“_”
  5. URL中不出现动词,用请求方式表示动作
  6. 资源表示用复数不用单数
  7. 正确使用"/"表示层级关系,URL的层级不要过深

常用状态码
服务端处理完成后客户端可能不知道具体成功还是失败了,服务端响应时,包含状态码返回数据两部分
状态码分类:
1xx:相关信息
2xx:操作成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误

常用细分状态码:

针对不同操作,服务器向用户返回数据,而各个团队或公司封装的返回实体类也不同,但都返回JSON格式数据给客户端

RESTful API案例

如用户场景
非RESTful
获取用户:/users/query/{userid}
插入用户:/users/add
更新用户:/users/update/{userid}
删除用户:/users/delete/{userid}

RESTful版本
GET: /users/{userid}
POST: /users
PUT: /users/{userid}
DELETE:/users/{userid}

使用postman进行发送请求的时候,有三种常用的文件类型传递到后端:

Postman中几个body请求格式区别及使用说明

RESTful API缺点

RESTful风格的API 固然很好很规范,但大多数互联网公司并没有按照或者完全按照其规则来设计,因为REST是一种风格,而不是一种约束或规则,过于理想的RESTful API 会付出太多的成本

缺点:

  • 操作方式繁琐,RESTful API通常根据GET、POST、PUT、DELETE 来区分操作资源的动作,而HTTP Method 本身不可直接见,是隐藏的,而如果将动作放到URL的path上反而清晰可见,更利于团队的理解和交流
  • 并且有些浏览器对GET,POST之外的请求支持不太友好,还需要特殊额外的处理
  • 过分强调资源,而实际业务API可能有各种需求比较复杂,单单使用资源的增删改查可能并不能有效满足使用需求,强行使用RESTful风格API只会增加开发难度和成本

所以,当你或你们的技术团队在设计API的时候,如果使用场景和REST风格很匹配,那么你们可以采用RESTful 风格API。但是如果业务需求和RESTful风格API不太匹配或者很麻烦,那也可以不用RESTful风格API或者可以借鉴一下,毕竟无论那种风格的API都是为了方便团队开发、协商以及管理,不能墨守成规

参考:https://jishuin.proginn.com/p/763bfbd690c9

相关文章

  • RESTful API 使用解读

    理解 RESTFul 架构 RESTful API 设计指南

  • restful

    理解RESTful架构

  • python(12)实践Django-Restful API

    关于Restful API,可阅读理解RESTful架构和RESTful API 设计指南。 在Django中要实...

  • RESTful架构和API设计

    理解RESTful风格 - 阮一峰RESTful设计风格指南 - 阮一峰RESTful 风格api 优点: 将接口...

  • Restful的理解

    最近的学习中开始对Rest-ful API产生兴趣,毕竟它和RPC是现在用的比较多的通信方法,姑且这么说,闲话不多...

  • Restful的理解

    REST全称是 Resource Representational State Transfer通俗来讲就是:资源...

  • RESTful的理解

    引子 大白话讲RESTful API用URL定位资源,用HTTP描述操作 API:application prog...

  • RESTful 理解

    RESTful是什么? REST是英文representational state transfer(表象性状态转...

  • RESTful 理解

    什么是RESTful RESTful是一种设计原则。只要我们的服务满足这种设计原则,那我们的服务便可以称之为RES...

  • 理解 RESTFul

    lj

网友评论

      本文标题:RESTful的理解

      本文链接:https://www.haomeiwen.com/subject/reaxzltx.html