簡體   English   中英

REST-API數據庫關系反向引用

[英]REST-API database-relationships back-referencing

我正在使用NodeJS和帶有MySQL后端的Express開發REST-API。 現有的數據庫有很多1:n關系,而我正在努力為這些特定情況找到正確的URI方案。

一個簡單的例子:

user {
    id 
    name
}
comment {
    id
    text
    user_id
}

現在,當我嘗試獲取所有用戶的列表時,我的uri將是: /users
-對於一個特定用戶: /user/{id}
-一個特定用戶的數據: /user/{id}/name
-有關所有評論的列表: /comment
-一條具體評論: /comment/{id}
-一項特定評論的數據: /comment/{id}/text

現在,我正在努力的部分。
用戶和評論之間存在1:n關系。 一個用戶可以有多個評論,一個評論屬於一個用戶。 我想實現類似“后向引用”的功能,這樣當我訪問一條特定評論的數據(意味着一個特定字段)時,我還可以獲得“屬於”該評論的用戶信息。
API不了解這些關系,我也不使用ORM,因此無論如何我都必須對有關關系的信息進行硬編碼。
我已經實現了一條路由,可以在/comment/{id}/user_id上發出請求,將請求重定向到帶有注釋所屬ID的/user/{id} 但是,當我只想獲取該評論的用戶ID而不是用戶的整個數據集時,這將是相同的請求。
我已經閱讀了很多有關REST體系結構的文章,roy fielding總是談論使API“可瀏覽”或“可探索”。 我想到的一種方法是在鏈接的數據集中添加一個參考uri,在我的示例中,這意味着將user_id字段擴展為如下所示:

user_id {
    id:id
    ref:/user/id
}

我從數據庫中得到的結果比那要復雜得多,提取相應的字段並添加此信息對於解決這個“簡單”問題似乎有些困難。

我不知道我是否在這里缺少任何東西,我正在為一個項目開發此API,同時我也寫了一篇論文,我力求盡可能地遵循REST體系結構的規則,但是我我現在有點卡住了

像這樣在用戶資源“下方”發布評論呢?

/user/{userid}
/user/{userid}/comments/{commentid}

請注意,您不必在REST API中一對一發布“數據庫行”。 實際上,REST人員通常對此並不滿意。

另請注意,您不必將資源的每個屬性都發布為資源。 資源/user/{userid}可以很好地返回包含所有必要數據的復雜表示形式(json,xml等)。 當然,有理由按照您的方式進行操作,例如,如果注釋文本以pdf,text,html或我無法控制的其他格式提供,我會將注釋文本作為單獨的資源。

關於Fielding的“可瀏覽” API的一點要點:他的意思是這些資源通過返回的數據表示形式中的鏈接相互引用。 評論將引用用戶(指向用戶的鏈接),而用戶應引用其評論(指向評論的鏈接)。 客戶端永遠不必自己“猜測”或“構造” URI,它只應通過以下鏈接來“瀏覽”資源!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM