1、粗俗描述什么是restful api:
api其实就是接口。而对于restful,首先我们需要了解一下什么rest。rest其实应该描述成rest架构。它其实是SOA架构模式的一种实现。那么什么是SOA呢?在没有提出SOA之前,一般就是一个服务器对应一个客户端的。比如一个web客户端就需要有一个web服务器,一个app客户端就需要有一个app服务器,客户端与服务器之间耦合在一起。但是在提出SOA架构之后,就允许通过定义一个统一的服务器来和多个客户端进行交互,实现了客户端与服务器之间的解耦。此时如果多个客户端有相同的请求,比如app客户端和web客户端都要进行用户名修改,那么只需要向同一个服务器定义的一个统一的接口发送请求,只需要把这个用户名信息以某种表现层(比如json或者xml)传递过去即可。而不用再向之前那样,需要发送请求到各自对应的服务器。这就是SOA架构描述的内容。
那么为什么说rest是对SOA架构的一种实现呢?因为,在rest架构中对这个SOA架构的内容进行了具体的细化、实现。比如在rest中规定了一般使用json作为资源、作为数据的表现层。比如说在rest中规定了应该使用什么样的http方法来进行对应的增删改查操作。比如说在rest中规定了url路径应该怎样定义。(不能使用动词,应该使用名词)。rest架构就是描述了这样子的一些内容。如果我们在设计api接口的时候按照rest规定的这个规则、内容去进行设计,那么我们就能够设计出符合rest风格的api,简称restful api。
2、详细解析rest架构:
1、定义:rest(Representational State Transfer):表现层状态转换。
分析:
表现层。其实在这里应该添加一个“主语”,即(资源的)表现层。表现表现,其实也可以理解为表面。指的是资源的外壳,表示这个资源看起来是什么。比如可以是json,可以是html。资源指的就是一个具体的东西。比如说用户名密码。而状态指的就是资源的这个具体东西的在某时刻的一个具体的状态、具体的值,比如说如果某时刻用户名是laowang,那么可以认为用户名此时的状态是laowang。那么转换就其实指的是变换、也就是改变。状态转换其实也就是值改变、改变值。
那么通过上面的分析,在这里表现层状态转换的应该理解应该是通过资源的表现层实现资源的状态发生改变。因为资源的状态是存储在服务器的,所以如果想要改变资源的状态,那么只能通过客户端传递某种“东西”来实现修改服务器的资源的状态。在这里的这个“东西”就是指资源的表现层,比如json或者xml。所以在这里表现层状态转换可以更进一步理解为通过在客户端传递资源的某种表现层来实现存储在服务器的资源的状态发生改变。粗俗一点可以说是通过使用patch方法传递json数据来实现修改存储在服务器的资源的值,更粗俗一点可以说是通过使用patch方法传递名字信息的表现层--{"name": "laoliang"}(json)修改存储在服务器的名字信息(本来是{"name": "laowang"})使其变成{"name": "laoliang"}。
那么完整的描述可以是:通过使用patch方法,传递{"name": "laoliang"}到服务器的某个接口(api),在这个接口中操作数据库的资源,把资源原本的状态信息{"name": "laowang"}修改为传递过来的以json作为表现层的资源的新状态。
这样子的话,假如有很多个客户端都需要操作数据库的这个名字信息的话,都只需要传递要修改的名字的新的以某种表现层作为载体的新的状态信息、值到这个api接口,便可以直接修改了。定义了这样子的api接口可以实现兼容多个不同的客户端。这是目前软件开发的一个潮流。
2、rest架构设计的具体规范:
参考资料: