React.js HATEOAS客户端

时间:2016-10-26 20:15:01

标签: javascript reactjs hateoas

如果我在资源/人员上执行以下http调用我的api并返回

{
  "_embedded": {
    "people": [
      {
        "id": 1,
        "firstName": "John",
        "lastName": "Doe",
        "_links": {
          "self": {
            "href": "http://localhost:8080/person/1"
          },
          "person": {
            "href": "http://localhost:8080/person/1"
          }
        }
      }
    ]
  },
  "_links": {
    "self": {
      "href": "http://localhost:8080/person"
    }
  }
}

数据正在屏幕上呈现在表格中,目前我从后端公开了我的ID,并使用以下链接为我的react-router处理

<Link to={`person/${this.props.person.id}`}>Detail</Link>

在这里,我无法在渲染链接中传递链接,并且必须传递id才能在我的后端执行详细调用。但是,我没有手动构建href,而是想在我的下一个组件中使用_links.self.href处的网址。

如果不在我的React应用程序中暴露id,我怎样才能实现这一目标?

2 个答案:

答案 0 :(得分:0)

发现了一个问题here

在链接使用中:

<Link to={{pathname: "/person", state: { person: person }}} />

在引用的组件中:

this.props.location.state.person

答案 1 :(得分:0)

您的问题几乎与我在回答此问题时给出的示例相同:https://stackoverflow.com/a/18083285/760706

我将对您提供的内容提出的主要问题是,您在_embedded部分(/person/1)中包含的资源未包含在集合资源的链接中,即{ {1}}部分。相反,您已在人员自己的链接中将其列在_links旁边。

我看到的第二个问题是您使用的链接关系,&#34;人员&#34; (实际上链接到个人),不是URI,也不是IANA注册的链接关系列表。这是链接关系中仅有的两种合法类型。在这种情况下,您的集合应使用已注册的关系self指向其成员。对于自定义关系,您的URI应该是您控制的域下的HTTP URL,指向文档,以便用户可以通过转到URL来查找该链接关系的文档。