gpt4 book ai didi

json - 将嵌套对象发布到 REST 服务器的最佳实践

转载 作者:行者123 更新时间:2023-12-04 02:54:16 25 4
gpt4 key购买 nike

我想知道在开发用于创建或更新嵌套数据的 REST API 服务器时通常的方法是什么。

假设我有一组数据库模型如下:

"client" (id, firstname, lastname, ForeignKey to "address")
"address" (id, street, city, state, country)
"email" (id, type, emailaddress, ForeignKey to "client")
"phone" (id, type, number, ForeignKey to "client")

换句话说,一个客户只有一个地址,但每个客户可以有多个电子邮件,每个客户可以有多个电话号码。现在假设我正在开发一个 REST API 服务器,它允许用户创建/编辑/删除这些对象中的任何一个。 “地址”、“电子邮件”和“电话”对象很简单。但是,“客户”呢?当用户想要创建一个新客户端时,该用户将向服务器发送一个 POST 命令,其数据结构采用 JSON 格式,如下所示:
{
"id": 123,
"firstname": "John",
"lastname": "Smith",
"address": {"street": "123 Anystreet", "city": "Los Angeles", "state": "California", "country": "USA"},
"emails": [
{"id": 7, "client_id": 123, "type": "home", "emailaddress": "john@home.com"},
{"id": 12, "client_id": 123, "type": "work", "emailaddress": "john.smith@work.com"}
],
"phones": [
{"id": 28, "client_id": 123, "type": "home", "number": "(555) 555-1234"},
{"id": 17, "client_id": 123, "type": "work", "number": "(555) 555-9876"}
]
}

那么 REST 服务器应该如何处理这些信息呢?显然它应该保存顶级客户端对象(带有 firstname 和 lastname 字段)但是它应该如何处理嵌套对象?它是否应该检查数据库中 id=7 的电子邮件并更新该电子邮件对象?或者它应该检查数据库以设置只有 id=7 或 id=12 的电子邮件指向这个客户端?我不清楚嵌套 REST 对象创建和更新操作的预期语义是什么。或者是/应该是 REST 创建/更新操作应该只在顶级对象上执行,如果用户想要创建或修改嵌套/嵌入的对象,那么用户应该进行额外的 REST 调用来这样做?

最佳答案

So what should the REST server do with this information?



它应该将消息传递给知道如何创建客户端的组件,或者更一般地说,它应该

process the representation enclosed in the request according to the resource's own specific semantics.



RFC 7231

is it/should it be the case that REST create/update operations should only be performed on the top level object



不,不要让它变得困难。 REST 与数据存储中的对象或实体无关。我们只是在操纵资源;在这种情况下,我们只是传递一个“请创建一个客户端”的请求。所以创建一个与消息中的描述相匹配的客户端;并报告该结果。或者,如果请求中有错误,则发回一条解释错误的消息。

反过来,创建此资源需要在数据库中创建一个实体,或在此实体与数据库中的其他实体之间创建关系,这一事实是 REST 不感兴趣的实现细节。

请记住,目标是让您的服务器就像一个充满文档的网站。

关于json - 将嵌套对象发布到 REST 服务器的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48779041/

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