gpt4 book ai didi

RESTful 多对多可能吗?

转载 作者:行者123 更新时间:2023-12-04 01:57:47 24 4
gpt4 key购买 nike

如何为 REST 帖子表示复杂的资源?

你好,
目前我有一个应用程序,当用户点击“保存”时,它会遍历所有表单元素并创建一个质量对象来管理:

  var = params = [{ 
attributes1: form1.getValues(),
attributes2: form2.getValues(),
.. ..
}];

然后我通过 RPC POST 将这个质量对象发送到我的“实体”模型服务。
我希望为其保留数据的这个实体非常复杂。总而言之,数据分布在大约 30 个表中。为了帮助解释我的实际问题,“实体”是建筑物(如在物理属性(property)/房屋/公寓中)。

我想要的是能够将我的困惑变成用于保存属性的 RESTful API。
我遇到的问题是,为跨单个表的单个模型保存详细信息是可以的。当模型具有传输时,如何构建我的数据对象以进行传输
  • 多对多关系
  • 一对多关系
  • 一对一的关系

  • 例如:

    这是我在房产和示例数据上可能拥有的内容的 WATERED 版本
    propertyId: 1,
    locationId: 231234,
    propertyName: "Brentwood",
    kitchenFeatures: [
    { featureId: 1, details: "Induction hob"},
    { featureId:23, details: "900W microwave"}
    ],
    propertyThemes: [ 12,32,54,65 ]

    这实际上还有很多……但是您可以了解一般要点。 kitchenFeatures将是多对多的一个例子,其中我有一个 featuresTable,它具有如下所有功能:
    `featureId`, `feature`
    1 "Oven Hob"
    23 "Microwave"

    和 propertyThemes 将是另一个多对多的例子。

    我应该如何形成我的 RESTful 服务的“对象”?这甚至可能吗?

    即。如果我想保存这个属性,我会将它发送到:
    http://example.com/api/property/1

    最佳答案

    我在这里使用的方法是超媒体和链接:

    /property
    /property/{id}
    /property/{id}/features/{id}

    根据您的域,您甚至可能逃脱:
    /property/{id}/features/{name}


    /property/{id}/features/byname/{name}

    因此你可以做 REST 操作 并提供 JSON 或 XHTML 超媒体 .

    属性(property)详情:
    Request: GET /property/1
    Response:
    {
    ..
    "name": "Brentwood",
    "features": "/property/1/features"
    ..
    }

    布伦特伍德的特点:
    GET /property/1/features
    {
    ..
    "Kitchen": "/property/1/features/1",
    "Dog Room": "/property/1/features/dog%20room",
    ..
    }

    GET /property/1/features/1
    {
    ..
    "Induction hob": "/property/1/features/1/1",
    "900W microwave": "/property/1/features/1/23",
    "nav-next" : "/property/1/features/dog%20room",
    ..
    }

    要添加关系,您可以执行以下操作:
    POST /property/1/features
    {
    ..
    "Name": "Oven Hob"
    ..
    }

    如果您知道关系是什么,您可以使用 PUT:
    PUT /property/1/features/23
    {
    ..
    "Name": "Oven Hob"
    ..
    }

    您可以提供多种媒体类型:
    GET http://host/property/1/features/dog%20room.json

    GET http://host/property/1/features/dog%20room.xhtml

    对于 xhtml 中的响应,响应可以使用如下命名链接:
    ..
    <a href="http://host/property/1/features/1" rel="prev">Kitchen</a>
    ..

    您可以使用 REST 的其他方面,例如我上面没有包括的响应代码。

    因此,要对关系建模,您可以使用链接本身,链接本身可以是一种资源,可以使用 GET、PUT、POST 和 DELETE 甚至自定义动词(例如 ASSOCIATE 或 LINK)进行操作。但前四个是人们习惯的。记住 PUT 是 幂等 但不是 POST。见 PUT vs POST in REST

    编辑:您可以将链接分组到 JSON 数组中,以便为您的超媒体提供结构。

    关于RESTful 多对多可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424184/

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