在HTML上下文和各种API格式上下文中,超媒体链接正变得越来越重要。但是,没有单一的常见超媒体格式,也没有一种通用的方式来表示格式之间的链接。
该规范旨在为PHP开发人员提供一种简单,通用的方式来表示超媒体链接,而不依赖于所使用的序列化格式。这反过来允许系统将具有超媒体链接的响应序列化为一种或多种有线格式,而与决定这些链接应该是什么的过程无关。
该规范的关键目标之一是PSR-7响应对象。设计的响应对象必须是不可变的。其他值对象实现可能还需要不可变的接口。
此外,某些链接提供程序对象可能不是值对象,而是给定域中的其他对象,它们能够动态生成链接,可能不是数据库结果或其他基础表示。在这些情况下,可写提供程序定义将不兼容。
因此,此规范将访问器方法和可演化方法拆分为单独的接口,允许对象仅根据其用例实现只读或可演化版本。
不同的超媒体标准处理具有相同关系的多个链接。有些链接具有多个rel定义的链接。其他人有一个rel条目,然后包含多个链接。
唯一地定义每个链接但允许它具有多个rels提供了最兼容的分母定义。可以根据需要将单个LinkInterface对象序列化为给定超媒体格式的一个或多个链接条目。但是,指定多个链接对象,每个链接对象具有单个rel但具有相同的URI也是合法的,并且超媒体格式也可以根据需要对其进行序列化。
在许多情况下,一组链接将附加到其他对象。这些对象可用于所有相关的是其链接或其链接的某个子集的情况。例如,可以定义表示不同REST格式的各种不同值对象,例如HAL,JSON-LD或Atom。从这样的对象中均匀地提取这些链接以进行进一步处理可能是有用的。例如,可以从对象中提取下一个/前一个链接,并将其作为链接头添加到PSR-7响应对象。或者,许多链接对于用“预加载”链接关系表示是有意义的,这将指示与HTTP 2兼容的web服务器,链接的资源应该在预期后续请求的情况下流式传输到客户端。
所有这些情况都与对象的有效负载或编码无关。通过提供访问此类链接的公共接口,我们启用链接本身的通用处理,而不管生成它们的值对象或域对象。