【问题标题】:Resolving an API's own hypermedia links解析 API 自己的超媒体链接
【发布时间】:2013-05-11 02:36:44
【问题描述】:

假设我们有一个 RESTful API 方法:

POST /people
{
    "name" : "John",
    "_links" : {
        "address" : {
            "href" : "/addresses/2"
        }
    }
}

您可以看到address 有一个指向另一个资源的链接。

要解析该资源的address_id,服务器应该:

  1. 分解 URL 并识别路由的“id”部分

  2. 甚至向自身发出 curl 请求,以获取该链接资源的 address_id

【问题讨论】:

  • 你在问什么是正确的方法吗?从哪个角度看?

标签: api rest hypermedia


【解决方案1】:

我觉得,正如您可能会做的那样,#2 是它应该完成的方式,而#1 只是基于内部知识的 hack。如果客户端发送了一个绝对 URI 的 href,http://yoursite.com/addresses/2,您是否仍想使用 #1,并尝试检测 ID?
假设您的站点使用已定义和记录的 MIME 类型发送地址资源表示。如果客户端发送了一个指向第三方 URI 的 href 值,该 URI 也返回了该格式的响应,并假设您想要支持它。无论如何,您都必须实施#2。在这种情况下,几乎没有理由为自己使用它(性能是主要的)。

老实说,我可能会选择 #1,直到需要 #2。

【讨论】:

  • 听起来很合理。应用程序必须通过 HTTP 与“自己”对话会让人感觉有点过分。如果基于基础 API(如 Twitter.com)构建的应用程序通过 HTTP 调用自己,有什么想法吗?
  • 许多客户端-服务器应用程序(我主要考虑多人游戏)通过 TCP/IP 与 localhost 通信。发生这种情况时,现代操作系统会短路网络堆栈,并且您会得到与 IPC 套接字一样好的东西。在 Apache 前面拥有一个轻量级的反向代理,例如 Nginx 或 Lighttpd,这意味着大部分 HTTP 成本都被抵消了,但你仍然需要支付 IPC 代价,而不是在一个进程中完成所有事情。好处是您只有一个代码路径来处理“数据请求”。
猜你喜欢
  • 2013-08-23
  • 1970-01-01
  • 2012-08-30
  • 2012-12-20
  • 2011-12-22
  • 2014-12-30
  • 2018-05-20
  • 2016-12-06
  • 2013-04-10
相关资源
最近更新 更多