restful架构

秒速五厘米 2022-07-12 12:44 320阅读 0赞

1、概念

RESTful(Representational State Transfer)表现层状态转化,他省略了主语:资源。可以从3个方面来理解它:资源、表现层、转化。

2、资源

资源就是网络上的一个具体信息,如一段文本、一张图片、一首歌等。一种资源就可以对应一个URI。要获取这种资源,就要访问这个URI,所以URI成为了没个资源的地址或者独一无二的标识符。
在网上搜索资源,就是在调用没个资源的URI。

3、表现层

表现层,就是把资源呈现出来,如文本用.txt,图片用.jpg等等。URI只代表资源的实体,不代表资源的变现形式,所以在有些网址中见.html等是不严格的。资源的表现形式需要在HTTP请求头的Accept和Content-Type字段指定。

4、状态转化

访问网站的过程,就是客户端和服务器端互动的过程。如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化”。

5、总结restful

(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。

6、注意

(1)URI中不能包含动词;

  1. //XXXXXXXX
  2. /posts/show/1 show为动词

(2)如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源

  1. //网上汇款,从账户1向账户2汇款500元
  2. POST /transaction

(3)不能在URI中加入版本号

  1. //XXXXXXXXXXXX
  2. http://www.example.com/app/1.0/foo

7、restful api设计

(1)协议:https
(2)域名:
应该尽量将API部署在专用域名之下。

  1. https://api.example.com

如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。

  1. https://example.org/api/

(3)版本
应该将API的版本号放入URL。

  1. https://api.example.com/v1/

(4)路径
又称”终点”(endpoint),表示API的具体网址。
(1)不能有动词,只能有名词
(2)所用的名词往往与数据库的表格名对应
(3)表名应该用复数

  1. https://api.example.com/v1/animals

8、http动词

常用的HTTP动词有下面五个(括号里是对应的SQL命令)

  1. GETSELECT):从服务器取出资源(一项或多项)。 POSTCREATE):在服务器新建一个资源。 PUTUPDATE):在服务器更新资源(客户端提供改变后的完整资源)。 PATCHUPDATE):在服务器更新资源(客户端提供改变的属性)。 DELETEDELETE):从服务器删除资源。

以及

  1. HEAD:获取资源的元数据。
  2. OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
  3. //如下面的一些请求接口设计
  4. app.get('/zoos',function(req,res){ })

9、过滤信息

如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

  1. ?limit=10:指定返回记录的数量
  2. ?page=2&per_page=100:指定第几页,以及每页的记录数
  3. //node后台获取req.query.page or req.query.limit
  4. :name=tom node后台获取:req.params.name

10、返回的状态码

  1. 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
  2. 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
  3. 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
  4. 204 NO CONTENT - [DELETE]:用户删除数据成功。
  5. 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
  6. 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
  7. 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
  8. 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
  9. 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
  10. 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
  11. 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
  12. 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

发表评论

表情:
评论列表 (有 0 条评论,320人围观)

还没有评论,来说两句吧...

相关阅读

    相关 理解RESTful架构

    作者: [阮一峰][Link 1] 日期: [2011年9月12日][2011_9_12] 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"

    相关 restful架构

    1、概念 RESTful(Representational State Transfer)表现层状态转化,他省略了主语:资源。可以从3个方面来理解它:资源、表现层、转化。

    相关 理解RESTful架构

    转自:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这

    相关 理解RESTful架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency