gpt4 book ai didi

RESTful API设计-如何处理外键?

转载 作者:行者123 更新时间:2023-12-04 08:05:30 24 4
gpt4 key购买 nike

我正在设计RESTful API,并且试图弄清楚如何显示和更新资源的外键。

让我们有一个对象User,它具有一个ID,名称和一个到实体的外键(多对一关系):Computer。

我在网上的大多数示例中看到的是:

GET/users/1

{
id: 1,
name: "Bob",
computer: "<url>/computers/5"
}

据我了解,这是指向其他资源的链接。但是,当您想为鲍勃挑选另一台计算机时该怎么办?

PUT/users/1
{
name: "Bob",
computer: "<url>/computers/4"
}

感觉真奇怪。
我还在考虑以下情况:假设必须实现API的人可以使用下拉列表为Bob选择一台计算机,并且应该选择当前计算机,我需要ID来执行此操作。我是否必须自己解析URL才能砍掉ID?

我为什么不应该这样做呢?

GET/users/1
{
id: 1,
name: "Bob",
computerId: 5
}

PUT/users/1
{
name: "Bob",
computerId: 4
}

最佳答案

我很想在这里稍微正式化HATEOAS并拥有:

GET/用户/1

{
links: [
{ rel: "computer", href: "/users/1/computers/5" },
],
user: {
id: 1,
name: "Bob",
computer: 5,
}
}

PUT/用户/1
{
name: "Bob",
computer: 4,
}

GET/用户/1
{
links: [
{ rel: "computer", href: "/users/1/computers/4" },
],
user: {
id: 1,
name: "Bob",
computer: 4,
}
}

如果您愿意,则链接URL显然可以是 /computers/n

这样一来,您的表示就可以始终只是数据,而GET主体可以提供应用程序可以使用的URL。这样,如果您更改URL层次结构(即从 /computers/n更改为 /users/m/computers/n),则无需更改任何手动构造URL的客户端代码。

关于RESTful API设计-如何处理外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33938669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com