【发布时间】:2016-05-13 01:57:34
【问题描述】:
我正在开发一个带有 NodeJS 的 REST-API 和带有 MySQL 后端的 Express。现有数据库有很多 1:n 关系,我正在努力为这些特定情况找到正确的 URI 方案。
一个简单的例子:
user {
id
name
}
comment {
id
text
user_id
}
现在,当我尝试获取所有用户的列表时,我的 uri 将是:/users
- 对于一个特定的用户:/user/{id}
- 一位特定用户的数据:/user/{id}/name
- 所有 cmets 的列表:/comment
- 对于一个特定的评论:/comment/{id}
- 一条特定评论的数据:/comment/{id}/text
现在,我正在苦苦挣扎的部分。
用户和评论之间存在 1:n 的关系。一个用户可以有多个cmet,一个评论属于一个用户。我想实现类似“反向引用”的东西,这样当我访问一条特定评论的数据(即一个特定字段)时,我还可以获得评论“所属”的用户信息。
API 不知道这些关系,我也没有使用 ORM,所以无论如何我都必须在某处硬编码有关这些关系的信息。
我已经实现了一个路由,我可以在/comment/{id}/user_id 上发出请求,我将请求重定向到/user/{id},并带有评论所属的id。但是,当我只想获取该评论的用户 ID,而不是用户的整个数据集时,这将是相同的请求。
我已经阅读了很多关于 REST 架构的内容,并且 roy fielding 总是谈论使 API “可浏览”或“可探索”。我遇到的一种方法是向链接数据集添加参考 uri,在我的示例中,这意味着将 user_id 字段扩展为类似这样的内容:
user_id {
id:id
ref:/user/id
}
我从数据库中得到的结果比这复杂得多,提取相应的字段并添加这些信息似乎对于这个“简单”的问题有点费力。
我不知道我是否在这里遗漏了什么,我正在为一个项目开发这个 API,我还写了一篇关于该项目的论文,并且我尽量遵循 REST 架构的规则,但我现在有点卡住了。
【问题讨论】:
标签: mysql node.js rest express