浅谈RESTful
RESTful
1、RESTful是什么?
REST(representational state transfer)译为表现层状态转化或表述性状态转移,是WEB服务的一种架构风格,它使用HTTP、URI、JSON、XML、HTML等广泛流行的标准和协议。如果一个架构符合REST原则,就称它为为RESTful架构。
2、资源
REST的名称“表现层状态转化”,其实是省略了主语的,“表现层”实际上指的是“资源”(Resources)的“表现层”。
资源就是网络上的一个实体,或者说是网络上的一个具体信息。可以是一段文本、一张图片、一首歌曲等等,总之就是一个具体的、实实在在存在的东西。你可以用一个URI(统一资源标识符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每个资源的地址或独一无二的识别符。
3、表现层
“资源”是一种信息实体,它可以有多种外在表现形式。“资源”具体呈现出来的形式,则叫做它的“表现层”(Representation)。
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式。
4、状态转化
访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必会设计到数据和状态的变化。
互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化“。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。他们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用来更新资源),PUT用来更新资源,DELETE用来删除资源。
5、为什么会出现RESTful
在出现RESTful之前我们的CRUD操作:
http://127.0.0.1/user/query/1 //GET 根据用户id查询用户数据
http://127.0.0.1/user/save //POST 新增用户
http://127.0.0.1/user/update //POST 修改用户信息
http://127.0.0.1/user/delete //GET/POST 删除用户信息
RESTful用法:
http://127.0.0.1/user/1 //GET 根据用户id查询用户数据
http://127.0.0.1/user //POST 新增用户
http://127.0.0.1/user //POST 修改用户信息
http://127.0.0.1/user //GET/POST 删除用户信息
两者看起来并没有什么区别,但实际上原本的操作每次请求接口或者地址,都在做描述,例如查询的时候用了query,新增的时候用了save,其实完全没有这个必要,因为使用了GET请求,就是查询了,使用了POST请求,就是新增的请求,意图很明显,完全没有必要做描述,这就是为什么有了RESTful。
6、RESTful原则条件?
网络上所有事务都被抽象为资源,每个资源都有一个唯一的资源标识符,同一个资源具有多种表现形式(XML、JSON等),对资源的各种操作不会改变资源标识符,所有的操作都是无状态的。
在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的”集合“(collection),所以API中的名词也应该使用复数。RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。
WEB应用程序最重要的REST原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必须的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用URI得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的HTTP方法,比如GET、PUT、POST和DELETE。
7、HTTP状态码都有哪些?
2 开头状态码
2XX(成功)表示成功处理的请求的状态码。
200(成功)服务器已经成功处理了请求。
3 开头状态码
3XX(重定向)表示要完成请求,需要进一步操作。通常,这些代码用来重定向。
304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
4 开头状态码
4XX(请求错误)这些状态码表示请求可能出错,妨碍了服务器的处理。
400(错误请求)服务器不理解请求的语法。
403(禁止)服务器拒绝请求。
404(未找到)服务器找不到请求的网页。
5 开头状态码
5XX(服务器错误)这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
500(服务器内部错误)服务器遇到错误,无法完成请求。
501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
503(服务器不可用)服务器目前无法使用(由于超载或停机维护)。通常,只是暂时状态。
504(网关超时)服务器作为网关或代理,但没有及时从上游服务器收到请求。
503(服务器不可用)服务器目前无法使用(由于超载或停机维护)。通常,只是暂时状态。
504(网关超时)服务器作为网关或代理,但没有及时从上游服务器收到请求。
505(HTTP版本不受支持)服务器不支持请求中所用的HTTP协议版本。
上一篇: Harris角点检测原理与opencv(python)实现
下一篇: python入门opencv