2016-11-13 76 views
0

最近,我设计了一个RESTful API,并且我想使用Link头字段来实现HATEOAS。有没有一种标准的方法来定义HTTP头字段中的CURIE?

这一切都很好,没有任何实际问题,但我想让API的客户端更容易。

Link头例如可能是这样的:

Link: <https://api.domain.com/orders/{id}>; rel="https://docs.domain.com/order"

在这种情况下,客户将不得不通过搜索在rel属性https://docs.domain.com/order值找到的链接。

这是有效的,但由于文档的URI可能会改变它的脆弱性,并且由于它的长度,它使得它作为搜索关键词有点不切实际。

所以我想尝试和使用居里使它像这样代替:

Link: <https://api.domain.com/orders/{id}>; rel="[rc:order]"

这样一个URI变化的问题得以减轻,在大多数情况下,这是更紧凑使客户更容易搜索。

我的问题是,因为我使用的是Link头字段来实现HATEOAS,我觉得它将CURIE作为HTTP头字段最为一致,而不是在响应主体中引入元数据。由于整个API使用标准HTTP头字段和所有元数据(分页,版本控制等)的状态代码,所以我宁愿不要将元数据引入响应主体来定义CURIE。

但是,如果我使用HTTP头字段,我应该使用哪个字段的CURIE?

是否有一个标准的方式来做到这一点与HTTP头字段?

如果不是,我应该只使用一个自定义标题字段,如X-Curie: <https://docs.domain.com>; name="rc",并将其文档记录在客户端?

我环顾四周,大部分资源都是参考XML或HAL标准,所以任何有关HTTP头字段的信息都将不胜感激。

回答

0

不,你不能那样做。链接关系是一个字符串 - 仅此而已。

,你应该问自己为什么要首先使用不稳定的链接关系的名字的问题...

+0

因为这就是RFC链接所需的网页。它指出:“不希望注册关系类型的应用程序可以使用扩展关系类型,它是唯一标识关系类型的URI [RFC3986]”然后它会说:“当扩展关系类型进行比较时,它们必须作为字符串进行比较(如果以不同的格式序列化,转换为URI后,例如Curie [W3C.CR-curie-20090116])“。所以需要一个URI并且允许CURIE,我只是想知道是否有标准的方法来定义CURIE。这并不意味着URI绝对不稳定,但CURIE更好。 –

+0

至少这是我对RFC的理解。当然,我并不想使用CURIE,我只是想,如果有一种标准的方法可以在HTTP头域中定义一个CURIE,这会使客户端更好一些。 –

+0

@JakeLucas - 你误解了那部分;它是关于链接关系以除HTTP头域之外的其他格式显示的。 –

0

即使你不使用Link头,居里也不会解决这个问题,你当下。因为CURIE的标准状态表明缩短的URI必须在执行任何比较之前“展开”。这也适用于再次比较所讨论的链接关系。

更实用的方法是投入自己的URI,如foo:order。然后,您可以使用一些自定义网址缩短方法来解决相关关系的文档网址。这种方法被超媒体格式使用,如HAL+JSON(HAL格式使用curies实际上是误导性的,它只能用作解决URL到文档的方法)。

0

居里在HTTP标头Linkrel性能不会得到扩大,因为所有rel性能与简单的字符串匹配相提并论,没有被视为的URI。

我的主要关注点是“因为文档的URI可以改变它的脆弱性” - 然后选择一个不会改变的URI。即使您使用重定向到文档深处的某个位置的URL,如果您希望客户端开发人员能够解决该问题,您为链接关系选择的URI也必须是永久性的。

相关问题