2016-10-26 40 views
0

如果我做了以下HTTP調用到我的資源/人的API,並返回React.js HATEOAS客戶

{ 
    "_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處的url。

如何在不暴露ID的React應用程序中實現這一目標?

+0

'我不能通過它作爲參數,因爲它是一個鏈接'你可以擴展一點嗎?另外,你怎麼路由?反應路由器? –

+0

你說的對不清楚,現在好點了嗎? – jgeerts

+0

更清楚了,謝謝。但不會'<鏈接到= {'$ {this.props.person._links.self.href}'}>詳細'做你想做的事?我假設'person'是你的API響應中該數組的結構。 –

回答

0

發現同一問題的問題here

在鏈接使用:

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

而且在引用的組件:

this.props.location.state.person 
0

你的問題幾乎是相同的,我給我的回答這個問題的例子:https://stackoverflow.com/a/18083285/760706

我將採取與您提出的主要問題是,您已包含在_embedded部分(/person/1)未包含在收集資源的鏈接中,主要爲_links部分。相反,您已在該人員自己的鏈接中將其列在self旁邊。

我看到的第二個問題是,您使用的「人員」(實際上鍊接到個人)的鏈接關係不是URI,也不是IANA註冊的鏈接關係列表。這是鏈接關係的唯一兩種合法類型。在這種情況下,您的收藏應該使用註冊關係item指向其成員。對於自定義關係,您的URI應該是您所控制的域下的HTTP URL,指向文檔,以便用戶可以通過轉到URL來查找該鏈接關係的文檔。