RESTful风格学习(6)

本次介绍SpringMVC中较为常用的风格——RESTful风格。

1、REST概念

REST的意思就是表述性状态转换,它描述了一个架构样式的网络系统。

它是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件,它主要用于客 户端和服务端交互类的软件。

2、RESTful概念

而REST指的是一组架构约束条件和原则。即满足这些约束条件和原则的应用程序或设计就是RESTful。其中对于其特性如下说明:

  • 资源:

互联网所有的事物都可以抽象成资源。比如一个页面一个文本或者一张图片,我们都可以使用URL路径去指向它们。这必然就会出现“每种资源对应一个特定的URL”(不然输入URL会找到其他的资源)。

  • 表现层:

顾名思义,就是把资源具体呈现出来的形式,比如说文本可以以txt形式表示,也可以用HTML或者XML格式等等。

  • 状态转换:

状态转换在于每次发出一个请求时,它代表了客户端和服务端的一次交互过程。如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转换”(State Transfer)。

2.1 传统的资源路径展示

http://localhost:8080/getExpress.do?id=1

http://localhost:8080/saveExpress.do

并不是非要否定传统JavaWeb使用路径的格式,但是有更简便的方式何乐不为呢。

2.2 使用RESTful操作资源

GET/expresses查询所有快递信息的列表
GET/expresses/1006查询一个快递信息
POST/express新建一个快递信息
PUT/express/1006更新一个快递信息(全部)
PATCH/express/1006更新一个快递信息(部分)
DELETE/express/1006删除一个快递信息

这是一般CRUD的请求方式的使用。

3、API设计/URL设计

3.1 动词+宾语

RESTful 的核心思想就是客户端的用户发出的数据操作指令都是"动词 + 宾语"的结构。

动词通常就是五种 HTTP 方法,对应 CRUD 操作。
GET:读取(Read)
POST:新建(Create)
PUT:更新(Update)
PATCH:更新(Update),通常是部分更新
DELETE:删除(Delete)
PS: 
1、根据 HTTP 规范,动词一律大写。
2、一些代理只支持POST和GET方法, 为了使用这些有限方法支持RESTful API,需要一种办法覆盖http原来的方法。使用订制的HTTP头 X-HTTP-Method-Override 来覆盖POST 方法.

比如说,SAVE/expresses这个命令中,SAVE是动词,/expresses是宾语。

3.2 宾语是名词

宾语是HTTP作用的对象,一般而言以名词为主而不是动词。

又比如/expresses,这个URL就是正确的

以下这些URL都是不推荐的,因为带上了动词,不是推荐写法。
/getAllExpresses
/getExpress
/createExpress
/deleteAllExpress

3.3 避免多级的URL

资源中有多级分类,但是却不能写出多级的URL路径。比如说要获取顾客的信息或许有些人会写成如下:

GET/team/1001/player/1005

这里推荐使用查询字符串作为后缀:GET/team=1001?player=1005

以上的这些内容是作为编写代码的程序员所要遵守的规定法则,不遵守规定的程序员不是个好程序员呢~

4、HTTP状态码

客户端的用户发起的每一次请求,服务器都必须给出响应。响应包括 HTTP状态码和数据两部分。

HTTP 状态码就是一个三位数,分成五个类别。如下所示:

1xx:相关信息
2xx:操作成功
3xx:重定向
4xx:客户端错误
5xx:服务器错误
PS:API 不需要1xx状态码,所以这个类别直接忽略。

4.1 状态码2XX

200状态码表示的是操作成功,但是不同的方法可以返回不同的,更加详细的状态码。

GET: 200 OK 表示一切正常
POST: 201 Created 表示新的资源已经成功创建
PUT: 200 OK
PATCH: 200 OK
DELETE: 204 No Content 表示资源已经成功删除

4.2 状态码3XX

API 用到的 3xx 状态码,主要是 303 See Other ,表示参考另一个 URL。

我们还只需要关注一下304状态码就可以了 304 : Not Modified 客户端使用缓存数据

4.3 状态码4XX

4xx 状态码表示客户端错误。

400 Bad Request:服务器不理解客户端的请求,未做任何处理。
401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。
403 Forbidden:用户通过了身份验证,但是不具有访问资源所需的权限。
404 Not Found:所请求的资源不存在,或不可用。
405 Method Not Allowed:用户已经通过身份验证,但是所用的 HTTP 方法不在他的权限之内。
410 Gone:所请求的资源已从这个地址转移,不再可用。
415 Unsupported Media Type:客户端要求的返回格式不支持。比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。
422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。
429 Too Many Requests:客户端的请求次数超过限额。

4.4 状态码5XX

5xx 状态码表示服务端错误。一般来说API 不会向用户透露服务器的详细信息,所以只要两个状态码就够了。

500 Internal Server Error:客户端请求有效,服务器处理时发生了意外。
503 Service Unavailable:服务器无法处理请求,一般用于网站维护状态。

后续我会对RESTful进行实例的操作,请大家期待一下,并且如上的内容有何问题请多批评指正,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiao艾扶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值