文章目录
  1. 1. 如何在XML表述中使用链接
  2. 2. 如何在JSON表述中使用链接
  3. 3. 何时以及如何使用链接标头
  4. 4. 如何分配链接关系类型
  5. 5. 如何使用链接来管理应用程序的流程
  6. 6. 如何处理临时URI
  7. 7. 何时以及如何使用URI模版
  8. 8. 如何在客户端使用链接

链接提供了一种方式,可以从一个资源导航到另一个资源。

本章我们就将讨论如何在RESTful Web服务中使用链接。

如何在XML表述中使用链接

HTML、XHTML及Atom建立了在表述中包含链接的规则。理解这些格式语义的客户端可以发现表述中的链接。然而,XML是通用格式,应该由服务器负责设计在XML格式表述中包含链接并将其设计文档给客户端。

XML表述可以使用Atom中定义的link元素。该元素在http://www.w3.org/2005/Atom命名空间定义且具有下列属性:

href    包含链接的RUI
rel        指示链接的类型
title(可选)    人可读的链接标题。
type(可选)    服务器为链接URI返回表述的媒体类型
hreflang(可选)    服务器为链接URI返回表述的内容语言
length(可选)    服务器为链接URI返回表述的内容长度

href既可以是绝对URI也可以是相对URI(需要在link元素中包含xml:base属性)。

如何在JSON表述中使用链接

对应Atom的link定义,在JSON表述中可以使用link(或links)特性。

不管采用哪种形式,重要的是抓住Atom中link元素的本质。确保最起码为每个URI带上链接关系类型。

何时以及如何使用链接标头

Link标头提供了一种格式无关的方式来传送链接。除了使用表述体内的嵌入链接,也可以使用link标头。Link标头适用于下列场景:

  • 表述使用二进制格式,例如图像、富文本文档、表单等。
  • 表述的格式不容易很容易发现链接(例如普通文本文档)。
  • 当客户端/服务器软件需要不解析表述体添加或读取链接。

    # Response 
    HTTP/1.1 200 OK 
    Content-Type: image/jpeg 
    Link: ; 
          rel="alternate;type="application/xml" 
    Link: ; 
          rel="http://www.example.org/rels/owner" 
    ... bytes ..
    

如何分配链接关系类型

对链接中的URI没有分配有意义的语义,链接自身就没有什么作用。链接关系类型的主要目的是作为与链接关联的语义多标识符,传送了链接的角色和目的。一旦客户端与服务器对这些类型的含义达成一致,客户端就能发现并使用链接中的URI了。有两种方式为链接关系类型分配值。

  1. 当链接目的与下列表中的标准类型匹配,使用该值。

    self    使用此类型链接资源的推荐URI
    alternate    使用此类型提供相同资源替换版本的URI链接(例如某pdf文档的英文版和中文版)
    appendix    使用此类型提供作为资源集合附录的资源URI链接
    bookmark    在博客系统使用此类型提供摘要URI链接
    chapter、section和subsection    使用这些类型用于链接资源集合中的章、节和子节URI
    contents    使用此类型用于链接资源集合的目录URI
    copyright    使用此类型用于链接资源的著作权声明URI
    current    使用此类型用于链接资源集合中最近条目URI
    describedby    使用此类型用于链接描述链接上下文的URI
    edit    使用此类型链接客户端能编辑资源的URI
    edit-media    使用此类型用于与媒体类型关联的Atom条目文档
    enclosure    使用此类型链接可能很大的相关资源URI(例如视频预览片段里提供完全版本视频的链接)
    firstlastnextnext-archive、prevpreviousprev-archive和start    使用这些类型提供用于滚动浏览资源有序序列的链接
    glossary    使用此类型链接术语表URI
    help    使用此类型链接帮助文档URI
    index    使用此类型链接索引URI
    license    使用此类型链接许可权URI
    payment    使用此类型链接购买或支付的URI
    related    使用此类型链接有关资源
    replies    使用此类型链接回复本链接的URI
    service    使用此类型链接Atom种子的服务文档URI
    stylesheet    使用此类型链接表单URI
    up    客户端使用此类型来进入上一层资源的链接 URI
    via    使用此类型标识消息源的资源URI
    
  2. 当链接的目的无法与标准类型匹配,使用下列惯例定义一个扩展链接关系类型。

    将链接关系类型表达成URI,例如http://www.example.org/rels/create-po。
    对该URI提供HTML文档方式的信息通告资源,描述链接关系类型语义和支持的HTTP方法、对请求和响应的支持表述格式及商业规则等细节。
    如果链接关系类型用于公共使用,向IANA注册链接类型。
    

如何使用链接来管理应用程序的流程

超媒体链接的一个关键应用是将客户端从学习服务器用来管理应用程序流程的规则中解耦出来。服务器能提供包含应用状态的链接,因此使用超媒体作为应用程序状态的引擎。

对每个表述进行设计,使其仅包含客户端可能转移到的下一步的链接。

如何处理临时URI

Web完整性是基于永久URI的,然而有时URI会是临时的。例如,一个URI可能仅对单个用户有效或在特定时间后到期终止。下面列举了几种依赖临时URI的场景:

  • Web服务向客户端提供安全令牌。客户端使用该令牌能在短时间内访问某个资源。
  • 保险报价Web服务生成报价,每个报价针对特定用户且仅在72小时内有效。报价到期终止后,客户端必须重新获取新报价。
  • 当用户在网上注册,服务器通过邮件发送安全令牌给用户并期望用户用之验证邮箱地址。

为了支持短期存活的URI,需要在链接内交互短期URI。为这些链接分配扩展关系类型,并将URI有效期和到期终止后客户端所需操作文档化。当客户端对到期终止URI发送请求,返回适当的4xx错误并在消息体内指示客户端能够采取的操作。

何时以及如何使用URI模版

当服务器无法为链接提供用于生成有效且完整URI信息时,服务器可以向客户端提供URI模板。URI模板是在符号外括上大括号的字符串。

为了让符号易于匹配和替换,符号仅限用于URI的下列部分:

为了在表述中包含URI模板,使用下列方式:

  • 对于XML表述,使用自己的应用程序XML命名空间内定义的link-template元素
  • 对于JSON表述,使用link-template或link-templates特性。

如何在客户端使用链接

Web浏览器是客户端使用链接进行浏览的最好例子。

为了支持服务器提供的URI和URI模板,基于已知链接关系类型从链接中抽取URI和URI模板。这些链接及其他资源数据构成了应用程序的当前状态。

如果应用程序长时间运行,将URI和关系类型同其他表述数据一同存储。

基于链接存在与否决定程序流程。

检查链接关系文档以学习任何关联的商业规则、鉴权、URI长期性、支持的方法和媒体类型等等。

文章目录
  1. 1. 如何在XML表述中使用链接
  2. 2. 如何在JSON表述中使用链接
  3. 3. 何时以及如何使用链接标头
  4. 4. 如何分配链接关系类型
  5. 5. 如何使用链接来管理应用程序的流程
  6. 6. 如何处理临时URI
  7. 7. 何时以及如何使用URI模版
  8. 8. 如何在客户端使用链接