RESTAPI:资源的组或视图

RESTAPI:资源的组或视图,api,rest,restful-architecture,Api,Rest,Restful Architecture,我的RESTAPI有许多/资源,需要将它们的权重分配到/存储桶 例如,GET/bucket/1给出如下内容: { "id": 1, "name":"BucketOne", "resources": [ { "id": 1, "weight": 0.03 }, { "id": 234, "weight": 0.23 },

我的RESTAPI有许多
/资源
,需要将它们的权重分配到
/存储桶

例如,
GET/bucket/1
给出如下内容:

{
     "id": 1,
     "name":"BucketOne",
     "resources": [
        {
          "id": 1,
          "weight": 0.03
        },
        {
          "id": 234,
          "weight": 0.23
        },
        {
          "id": 23,
          "weight": 0.5
        },
        ...
    ],
    ...
}
资源
以树状结构聚合为
资源组
。定义了几种
策略
,以简化
资源
分配到存储桶中的输入,允许仅为
资源组
指定权重

模型如下:

strategy (1)----(*) resourceGroup (1)----(*) resource
我想使用
策略
启用桶资源分配的定义,以简化用户交互并抽象分配策略

对于给定的策略,应该能够在
resourceGroup
级别上指定资源权重分配。然后,处理请求的后端服务将负责在资源级别上进行资源分配

该行为可与可编辑的实体化视图进行比较

不过,我不确定在RESTAPI中实现这一点的最佳实践是什么。 以下是我看到的可能性(按优先顺序列出):

  • 资源组
    视为单独的资源

    /bucket/1/分配策略/策略名称/资源组

    因此,
    GET/bucket/1/allocation strategies/strategy name/resourceGroups
    将仅检索
    资源组的列表及其权重

    PUT
    放在同一URI中可以直接使用ResourceGroup更改此策略的资源分配

    优点:这个请求仍然是无状态的,因为我们发送了所有必需的资源组/权重

    缺点:
    resourceGroups
    和实际的
    resources
    权重映射需要由服务实现保持同步。i、 e.对
    资源组
    的更改需要传播到
    资源
    ,反之亦然。这些副作用可以接受吗

  • resourceGroups
    用作伪
    resources
    ,需要将两个特殊属性
    isGroup
    strategyId
    添加到这些伪
    资源中,并将
    resourceGroupId
    添加到每个叶资源中

    GET/bucket/1/strategy?=strategy name
    将只返回
    资源组及其权重

    但要更新此
    分配,需要执行以下操作:

    PUT/bucket/1/
    仅使用
    resourceGroups

    优点:
    resourceGroups
    组由服务实现的同一部分处理,这可能使
    resourceGroups
    资源
    之间的同步更容易。尽管如此,我不喜欢发送PUT请求来更新资源的一部分,而实际上是更新许多其他部分。在我看来这是一个糟糕的模式

    缺点:API不再是无状态的,因为PUT请求只发送资源的一部分

  • 使用HTTP头请求特定的资源分组

    缺点:不标准,不可缓存。。。对我来说只是个坏主意


  • 我将非常感谢你的想法和评论。提前谢谢。

    我想帮忙,我看了问题2遍,但是你的领域(或你对它的描述)太复杂了。@AdamSiemion:谢谢你花时间阅读我的问题。恐怕我弄错了。假设方法1是正确的,那么问题是:“如果resourceA在发布到/resourceB的帖子上被更新了,可以吗?”根据其他问题,像这样是完全可以的。过几天我将删除这个问题。