GET和“GET”的常规模型正常吗;“平坦”;从设计REST的角度看POST的模型?
关于在RESTAPI中为POST和GET方法提供不同模型的可能性的问题已经被问了好几次,但我想澄清一个具体的问题。 假设我们正在设计关于体育竞赛的api 模型和相应的资源:GET和“GET”的常规模型正常吗;“平坦”;从设计REST的角度看POST的模型?,rest,Rest,关于在RESTAPI中为POST和GET方法提供不同模型的可能性的问题已经被问了好几次,但我想澄清一个具体的问题。 假设我们正在设计关于体育竞赛的api 模型和相应的资源: 1) Player { "id" : 2, "firstName" : "Nikolay", "lastName": "Grigoryan", ..... } /球员/2 2) 比赛 { "id" 1, "name": "Some tournament", "date" "01.02.2019
1) Player
{ "id" : 2,
"firstName" : "Nikolay",
"lastName": "Grigoryan",
.....
}
/球员/2
2) 比赛
{ "id" 1,
"name": "Some tournament",
"date" "01.02.2019",
.......
}
/锦标赛/1
3) 参与者
{
"id": 2,
"tournament": { "id" 1,
"name": "Some tournament",
"date" "01.02.2019",
.......
},
"player": { "id" : 2,
"firstName" : "Nikolay",
"lastName": "Grigoryan",
.....
}
}
/锦标赛/1/参与者/2
当我请求某些锦标赛的参与者时,有一个单独的名为玩家的字段,包含所有可用字段的完整嵌套玩家模型,这非常方便。但当我创建一个新的参与者时,情况对我来说就不同了。我更愿意让playerId作为帖子主体提供:
/锦标赛/1/参与者
职位
但不是
{
....,
"player": {
"id": 2,
....
}
}
这里似乎不需要嵌套模型,但只有playerId就足够了,因此根本不需要只为保存id而嵌套对象
对POST请求进行这样的模型简化可以吗?或者它们应该具有相同的结构?这样的结论可能让我错过了一些重要的东西。如果是这样的话,我将非常感谢您的解释
提前谢谢
对POST请求进行这样的模型简化可以吗?或者它们应该具有相同的结构?这样的结论可能让我错过了一些重要的东西。如果是这样的话,我将非常感谢您的解释
作为一个网站,您将如何做到这一点
您可能会有某种形式,带有一个下拉控件,列出您可能使用的标识符。客户机将从列表中选择标识符,然后提交表单。结果将是一条HTTP请求消息,其标识符位于请求正文中
对POST请求进行这样的模型简化可以吗?或者它们应该具有相同的结构?这样的结论可能让我错过了一些重要的东西。如果是这样的话,我将非常感谢您的解释
作为一个网站,您将如何做到这一点
您可能会有某种形式,带有一个下拉控件,列出您可能使用的标识符。客户机将从列表中选择标识符,然后提交表单。结果将是一条HTTP请求消息,该消息的标识符位于请求正文中。至少可以借鉴的一种方法是查看 如果一场比赛有球员,这是一种多对多关系,那么球员通过链接与比赛关联可能是有意义的
- 要获得玩家列表,只需嵌入玩家资源
- 要识别玩家,您不需要使用他们的id,而是使用他们的url
- 要将玩家与锦标赛关联,可以更新链接
另一方面,我认为接收(GET)和发送(POST)的模型都是相同的,这是一个非常好的特性,使事情更容易理解,但在适当的情况下放弃这个规则也是完全好的。我发现,尤其是在人们经常需要不同方法的情况下,多个资源/模型相互关联。没有一种优雅的方法可以解决这个问题,但是使用链接而不是id可能会给你一些工具,以一种适用于任何地方的通用方式来解决这个问题。至少可以从中获得灵感的一种方法是看一看 如果一场比赛有球员,这是一种多对多关系,那么球员通过链接与比赛关联可能是有意义的
- 要获得玩家列表,只需嵌入玩家资源
- 要识别玩家,您不需要使用他们的id,而是使用他们的url
- 要将玩家与锦标赛关联,可以更新链接
另一方面,我认为接收(GET)和发送(POST)的模型都是相同的,这是一个非常好的特性,使事情更容易理解,但在适当的情况下放弃这个规则也是完全好的。我发现,尤其是在人们经常需要不同方法的情况下,多个资源/模型相互关联。没有一种优雅的方法可以解决这个问题,但是使用链接而不是id可能会为您提供一些工具,以一种适用于所有地方的通用方式解决这个问题。谢谢您的回答。不幸的是,我没有领会你的意思。更确切地说,我不明白你对我的建议是什么-在两种情况下(POST和GET)是否使用相同的模型?关于可能的客户端用例-是的,可能用户应该从下拉列表中选择所需的玩家,Http请求将发送到服务器,其中包含有关锦标赛和要添加的玩家的信息。对于Post请求,我只能发送该玩家的ID。但是对于GET请求,我想在一个请求中获得关于球员的所有信息,与给定的锦标赛相关,而不需要通过球员id发送额外的请求。谢谢您的回答。不幸的是,我没有领会你的意思。更确切地说,我不明白你对我的建议是什么-在两种情况下(POST和GET)是否使用相同的模型?关于可能的客户端用例-是的,可能用户应该从下拉列表中选择所需的玩家,Http请求将发送到服务器,其中包含有关锦标赛和要添加的玩家的信息。对于Post请求,我只能发送该玩家的ID。但对于GET请求,我希望在一个请求中获得与给定锦标赛相关的球员的所有信息,而不需要通过球员id发送额外的请求。
{
....,
"player": {
"id": 2,
....
}
}