【问题标题】:Implementing the REST Hypermedia Constraint with a two backend services使用两个后端服务实现 REST 超媒体约束
【发布时间】:2012-03-20 13:55:46
【问题描述】:

我正在尝试构建一个系统,该系统使用 nodejs 和 express 来根据来自另一个后端服务的数据呈现 html 页面。后端服务提供 JSON 数据,nodejs 服务器使用这些数据呈现 html,然后传递给浏览器。阅读了 REST 和 Hyemedia 约束后,我想在设计中使用它,但似乎无法弄清楚。一个简单的示例是一个提供项目列表的页面,其中每个项目都是一个链接,可以单击该链接以获取该项目的完整详细信息。所以后端服务可能会生成一些类似于

的 JSON
{
  "title": "List of items"
  "self": "http://api.hostname.com/items
  [
    { 
      "title":"item1",
      "url": "http://api.hostname.com/items/1
    }
    { 
      "title":"item2",
      "url": "http://api.hostname.com/items/2
    }        { 
      "title":"item3",
      "url": "http://api.hostname.com/items/3
    }
}

然后我让 nodejs 在 html 中呈现一个页面,其中包含一个使用“标题”作为名称的链接列表。那么问题是我不知道该使用什么href。如果 href 是一个可以渲染项目的视图,它会起作用

href="/items/2

但我无法将“url”字段传递回节点,因此节点可以将其传递给后端服务。我最终基于视图 url 为后端服务构建了 url。如果我理解 REST 不是超媒体方式的话。这意味着我的节点代码必须知道后端服务的 url 格式,而不是获取 url 并直接使用。

那么有没有像添加“url”字段作为 href 的查询参数以将其保留在客户端的如此聪明的功能?我误解了超媒体约束还是应该尝试使用它?

【问题讨论】:

    标签: html http rest node.js service


    【解决方案1】:

    是否应该使用超媒体约束是一个见仁见智的问题。 (我有一个blog post stating my own opinion)。

    作为更具体的答案,我将指出您在此应用程序中实际上有 2 个独立的 REST 系统,其中一个用于提供 html,另一个用于提供 json。如果它们在功能上是等价的,那么超媒体约束会期望它们实际上是一个单一系统,其中请求可以根据 Accepts http 标头返回不同的媒体类型。这消除了您的问题(因为网址变得相同)。

    【讨论】:

    • 现在我决定不担心超媒体的限制。感谢您提供的链接,我发现它很有用(而且很平静)。
    猜你喜欢
    • 2011-10-13
    • 2013-11-29
    • 1970-01-01
    • 2015-11-06
    • 2014-02-05
    • 2011-07-21
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多