资源(Resource):数据库
REST的基础就是资源这个概念。
json
资源能够是任何能够被访问或处理的东西。举例来讲,资源包括“视频”,“博客日志”,“用户资料”,“图像”,甚至任何能够感触的事物,如人和设备等。浏览器
资源能够关联到其余资源。如在一个电商平台中,一个顾客能够为任意数量的产品下订单。在这个场景中,产品资源就和对应的订单资源产生了关联。spa
资源还能够分组到集合(collections)中。用上面的电商平台的例子,"多笔订单"(orders) 就是单个订单资源的集合。
日志
表现(Representation):视频
REST的资源是一个个抽象的实体。资源中的数据和元数据在发送给客户端以前须要序列化到一个表现(Representation)中。xml
表现能够看做是资源在某个给定时点的状态的快照(snapshot)。资源
假设在上面的那个电商系统中,有一个数据库表存储了全部可售产品的信息。开发
当在线买家用他们的浏览器购买产品和请求产品信息时,电商系统会以HTML网页的形式将产品的细节信息提供给他们;get
如今,当一个正在开发原生移动应用的开发人员请求产品细节时,电商系统会以XML或者JSON的格式将产品信息返回给开发者。
在上面的两个场景中,客户端并无直接和实际的资源:数据库进行交互。取而代之的是资源的表现:每一个客户端只处理各自的资源表现。
注意:REST的组件经过传输资源的表现和资源进行来回交互。它们从不直接和资源发生交互。
正如上面的产品的例子中所提到的那样,同一个资源能够有几种不一样的表现,从基于文本的HTML,XML,和JSON格式到诸如PDF,JPEG,和MP4等二进制格式。
客户端请求某种特定的表现是能够的,而这一处理过程的术语是“内容议付”(Content negotiation)。
如下是两种可能的内容议付策略:
URI后缀表现:示例:一个发出以JSON为表现格式对产品细节的请求的客户端,将可以使用以下形式的URI:
http://www.example.com/products/143.json.
另外一个客户端可能使用以下的URI
http://www.example.com/products/143.xml 来获取XML格式的产品细节信息。
使用Accept头部:客户端能够在HTTP 的Accept头部附上须要的表现格式,而后和request一块儿发送。处理该资源的应用将会使用Accept头部信息值去序列化被请求的表现。
注意:JSON已经成为REST服务事实上的标准的表现形式。