超媒体 API - 直接请求是一种反模式吗?

Hypermedia API - Is direct requests an anti pattern?

我正在使用超媒体概念设计 API。我看到这是一个很好的做法,有一个根路由 returns 其他 API 链接到导航。

例如:我向 http://myapi.com 发出请求,它 returns

{
  links: [
    { 'rel': 'profile', href: '/profile' },
    { 'rel': 'orders', href: '/orders' },
    { 'rel': 'order_types', href: '/order_types' },
    ...
  ]
}

但是,这样一来,如果root有20个资源,那就会很大了。

所以,直接请求 order_types 而不是请求 root 然后请求 order_types 是反模式吗?

这个问题有点难回答,因为我首先想到的是:它真的有那么大吗?

例如,现在您的每个链接大约需要 40 个字节。对于 20 个资源,即 800 字节。 gzip 响应(或 brotli,如果你能支持的话),你可以使它更小。如果您的总文件有一些开销(比如另外 200 字节),我们假设为 1KB,使用 gzip 之类的东西,您可能可以将其降低到 400 字节或更小。

您可以在此文件上设置缓存 headers,这样它只会在极少数情况下被请求一次。

现在你的主要问题是?是anti-pattern吗?我会说是的,你应该只有一个书签 url。

由于我目前在大规模 HATEOAS 风格的 REST 下遭受了很多痛苦 API,从我的角度来看,请帮自己一个忙,将所有链接(方法)放在起始页上。

您真的不想通过几个链接来找到您要使用(或测试)的方法。当然,您可以使用直接路径,但又只是 RPC 风格。

我很遗憾地说,HATEOAS 的整个概念虽然听起来不错恕我直言,但在实施和测试时确实很痛苦。