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

时间:2017-03-15 17:57:00

标签: api hateoas hypermedia

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

例如:我向 http://myapi.com 提出了请求,并返回

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

但是,通过这种方式,如果根有20个资源,它将非常大。

那么,直接请求 order_types 而不是请求root,然后请求order_types是反模式?

2 个答案:

答案 0 :(得分:1)

这是一个难以回答的问题,因为我想到的第一件事是:它实际上是那么大吗?

现在,例如,每个链接大约需要40个字节。对于20个资源,即800字节。 gzip响应(或brotli,如果你可以支持它),你可以使这个更小。如果您的总文件有一些开销(比如另外200个字节)并且我们假设为1KB,那么像gzip这样的东西你可能会把它减少到400字节或更小。

您可以在此文件上设置缓存标题,以便只在蓝色月亮中请求一次。

现在你的主要问题是什么?这是一种反模式吗?我会说是的,你应该只有一个带书签的网址。

答案 1 :(得分:1)

由于我目前在大规模的HATEOAS样式REST API下遭受了很多苦难,从我的角度来看,请帮助自己并将所有链接(方法)放在起始页面上。

您真的不想按照几个链接来查找要使用(或测试)的方法。当然你可以使用直接路径,但是再次它只是RPC风格。

而且我很遗憾地说,HATEOAS的整个概念虽然听起来并不好恕我直言,但在实施和测试方面真的很痛苦。