我正在设计一个RESTful API,我正在试图弄清楚如何显示和更新资源的外键.
让我有一个对象User,它有一个id,name和一个外键(多对一关系)到实体:Computer.
我在大多数在线示例中看到的内容:
GET/users/1
{
id: 1,
name: "Bob",
computer: "<url>/computers/5"
}
Run Code Online (Sandbox Code Playgroud)
我可以理解,它是另一个资源的链接.但是当你想为鲍勃选择另一台电脑时,你会怎么做?
PUT/users/1
{
name: "Bob",
computer: "<url>/computers/4"
}
Run Code Online (Sandbox Code Playgroud)
这感觉很奇怪.我也在考虑以下情况:假设必须实现API的人可以使用下拉列表为Bob选择计算机,并且应该选择当前的计算机,我需要id来执行此操作.我是否必须自己解析网址来切断身份证?
我不应该这样做是有原因的:
GET/users/1
{
id: 1,
name: "Bob",
computerId: 5
}
Run Code Online (Sandbox Code Playgroud)
PUT/users/1
{
name: "Bob",
computerId: 4
}
Run Code Online (Sandbox Code Playgroud)
我很想在这里将 HATEOAS 正式化,并得到:
{
links: [
{ rel: "computer", href: "/users/1/computers/5" },
],
user: {
id: 1,
name: "Bob",
computer: 5,
}
}
Run Code Online (Sandbox Code Playgroud)
{
name: "Bob",
computer: 4,
}
Run Code Online (Sandbox Code Playgroud)
{
links: [
{ rel: "computer", href: "/users/1/computers/4" },
],
user: {
id: 1,
name: "Bob",
computer: 4,
}
}
Run Code Online (Sandbox Code Playgroud)
/computers/n如果您愿意的话,链接 URL 显然可以是这样。
这使得您的表示始终只是数据,并且 GET 的主体提供您的应用程序可以使用的 URL。这样,如果您更改 URL 层次结构(即从/computers/n到 )/users/m/computers/n),您不需要更改任何手动构造 URL 的客户端代码。
| 归档时间: |
|
| 查看次数: |
4061 次 |
| 最近记录: |