REST、RESTFUL总结

什么是REST?

概念

一种设计风格,而不是某种标准,只是提供了一组设计原则和约束条件。

全称:Resource Representational State Transfer,通俗的来讲就是资源在网络中以某种表现形式进行状态转移,主要用于web服务,前后端接口时候使用。

  • Resource:资源,即数据
  • Representational:某种表现形式,比如json、xml
  • State Transfer:状态变化。通过HTTP的动词(get查询、post新增、put修改、delete删除)实现。

一句话描述REST实质: URL中只使用名词来定位资源,用HTTP协议里的动词(GET、POST、PUT、DELETE)来实现资源的增删改查操作。

例子

比如,我们有一个friends接口,对于“朋友”我们有增删改查四种操作,怎么定义REST接口?

  • 增加一个朋友,uri: generalcode.cn/v1/friends 接口类型:POST
  • 删除一个朋友,uri: generalcode.cn/va/friends 接口类型:DELETE(在http的parameter指定好友id)
  • 修改一个朋友,uri: generalcode.cn/va/friends 接口类型:PUT(在http的parameter指定好友id)
  • 查找一个朋友,uri: generalcode.cn/va/friends 接口类型:GET

上面我们定义的四个接口就是符合REST协议的,请注意,这几个接口都没有动词,只有名词friends,都是通过Http请求的接口类型来判断是什么业务操作。

举个反例: generalcode.cn/va/deleteFriends 该接口用来表示删除朋友,这就是不符合REST协议的接口。 不能用deleteFriends ,而应该就用friends + http请求的delete方式。

总结

  • 看URL就知道要什么
  • 看http method就知道干什么
  • 看http status code就知道结果如何

什么是RESTFUL?

从上面的定义中,我们可以发现REST其实是一种组织Web服务的架构,并不是实现Web服务的一种技术(注意:不是一种技术!!!也不是一种标准!!!),其目标是为了创建具有良好扩展性的分布式系统。反过来,作为一种架构,其提出了一系列架构级约束。这些约束有:

  • 使用客户/服务器(b/s、 c/s)模型。客户和服务器之间通过一个统一的接口来互相通讯。
  • 层次化的系统。在一个REST系统中,客户端并不会固定地与一个服务器打交道。
  • 无状态。在一个REST系统中,服务端并不会保存有关客户的任何状态。也就是说,客户端自身负责用户状态的维持,并在每次发送请求时都需要提供足够的信息。
  • 可缓存。REST系统需要能够恰当地缓存请求,以尽量减少服务端和客户端之间的信息传输,以提高性能。
  • 统一的接口。一个REST系统需要使用一个统一的接口来完成子系统之间以及服务与用户之间的交互。这使得REST系统中的各个子系统可以独自完成演化。

如果一个系统满足了上面所列出的五条约束,那么该系统就被称为是RESTful的。

REST风格优缺点?

因为http协议的请求类型有限,当POST、PUT、DELETE等操作无法满足要求时,如何拓展?

如何将restful运用到项目中?

我们平时搞系统的设计思路大概是这样的:(AI服务器就是)

1.有新建用户功能
2.新建用户需要一个URL
3.往这个URL发送的数据要定义好
4.开始写后端和前端

这是以操作为第一位的设计方法,首先我们确认了一个操作,然后围绕这个操作把周边需要的东西建设好,这种方式当然可以架构出一个系统,甚至是一个好系统,但是偶尔会有些问题:

1.操作之间是会有关联,你的设计容易变成“第2个操作要求第1个操作进行过”,这种关系多起来你的系统就乱了
2.你的URL设计会缺乏一致性
3.操作通常被认为是有副作用(Side Effect)的,所以很少有人基于操作去设计缓存之类的东西

参考:

1.https://blog.csdn.net/SeniorShen/article/details/111591122