RESTFULL

本文最后更新于:9 个月前

什么是RESTFUL架构

REST代表Respersontational State Transfer,通常理解为表现层状态转移,他是围绕资源展开的,每个组件都是资源,都是可以通过唯一的URL访问到的,REST体系将所有的内容都视为资源,这些资源可以是文本、HTML页面、图像、视频或者业务数据。REST Server只提供对资源的访问,REST Client访问和修改这些资源,REST可以使用各种的形式来表现这些资源,主要是使用JSON,也可以是Text或者XML。

REST的约束条件

客户端-服务器

  通过将用户接口和数据存储的问题分开,提高了接口的可移植性。

无状态

  RESTful Web服务不应该在服务器保存客户端的状态,这种限制被称为无状态,客户端负责把上下文传递给服务器,然后服务器去存储他的上下午以供服务器进行进一步的处理和请求,比如我们需要获得某个用户的信息,我们应该是通过客户端传递userId给服务器,服务器处理好了返回结果给我们,对服务器而言他不知道每次的状态是什么。这样可以使得Web服务不需要维护客户端以前的交互(因为他不知道这个客户端之前干嘛了)

可缓存

  指客户端应该将服务器的响应存储在客户端本身中,如此客户端无需一次又一次的向服务器请求相同的资源。同事服务器响应应该有如何进行缓存的信息,以方便客户端在一段时间内进行缓存响应。如以下服务器应该具备的响应头以便客户端配置缓存

Sr.No. Header & Description
1 Date
资源创建的日期和时间
2 Last Modified
资源上次修改的日期和时间
3 Cache-Control
用于控制缓存的主标记头
4 Expires
缓存的到期日期和时间
5 Age
从服务器获得资源后的持续时间
Sr.No. Directive & Description
1 Public
公共的可缓存资源
2 Private
表示资源只可以被客户端和服务器缓存,中介不能缓存的资源
3 no-cache/no-store
指资源不可以缓存
4 max-age
表示缓存的最长有效期。超过事件后就需要客户端再次请求
5 must-revalidate
在超过有效期后,服务器必须重新验证资源

RESTful传递消息的方式

  因为REST的无状态限制,HTTP无状态协议和他很契合。客户端通过HTTP请求发送消息,服务器以HTTP形式响应。常见的有四种动作:GET,POST,PUT,DELETE其中要考虑的是:

  • GET操作是只读的并且是安全的。
  • PUT和DELETE操作是幂等的,这意味着无论调用多少次这些操作,其结果都将始终相同。
  • PUT和POST操作几乎相同,不同之处仅在于PUT操作是幂等的,而POST操作可能导致不同的结果

    关于RESTful架构的寻址要求

    寻址是指定位服务器上的一个或者多个资源。因为REST架构的每个资源都通过URL来标识,所以关于寻址的URL我们需要考虑以下几点:
  • 使用复数名词定义
    例如,我们要访问用户资源应该使用users而不是user
  • 避免使用空格而使用_或者-代替
  • 使用小写字母
  • 保持向后兼容
      因为一些Web服务一旦上线,可能需要保证始终可用,一旦我们的资源移动了位置,我们需要通过HTTP的3xx状态告知客户端将就URL重定向新的URL
  • 使用HTTP动词,URL不包含动词
    我们使用POST、GET等动词来表示请求方式,之后的URL里的资源应该使用名词来形容,比如我们需要获得User信息,../UserManagement/rest/UserService/getUser/1,其中使用getUser是不太好的,因为使用UserManagement/rest/UserService/users/1,来形容我们的资源。
    参考自:restful

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!