gpt4 book ai didi

api - 如何管理 REST API 中 3 个资源之间的关系

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

我正在创建一个基于 REST 概念的 API,但在谈论相关资源时我仍然有些困惑。

我有一个网站,人们可以在其中注册多个组并选择多个角色。例如,让我们以在公司注册的人作为场景:

公司

  • Facebook
  • 谷歌
  • 苹果

  • 角色
  • 营销
  • 销售
  • 发展
  • 客户支持

  • 因此,当我想在具有某些角色的新公司中创建用户时,我会将这样的内容传递到/users 端点的 POST 请求中
    {
    "username" : "raffaele.izzia",
    "email" : "example@email.com",
    "groups" : [{
    "id" : 1,
    "roles" : ["Sales","Customer support"]
    },
    {
    "id" : 2,
    "roles" : ["Sales","Marketing"]
    }]
    }

    使用这种方法,一旦我从 API 获得一些用户,我总是知道他们在哪些组/角色中。

    但是/groups 端点上的请求呢?

    如果我 GET/groups/google 我也应该收到有关用户/角色的信息。所以它可能是这样的
    { 
    groups: [{
    "id" : 2,
    "name" : "Google",
    "users" : [2,3,4,10,35,50] //role will be included in the single resource once you expand this collection
    }]
    }

    或者这个:
    { 
    groups: [{
    "id" : 2,
    "name" : "Google",
    "roles" : [{
    "name" : "Sales"
    "users" : [2,3,4,10]
    },{
    "name" : "Marketing"
    "users" : [4,10,8,57]
    }]
    }]
    }

    您认为这种关系的最佳解决方案是什么?

    最佳答案

    这是一个很好的问题。绝对是一个棘手的情况。

    我认为典型的 RESTful 答案是根据名词(AKA 资源)进行思考。即使您将这种三向连接视为名词之间的关系,连接本身也是一个名词。这就是您希望 REST API 公开的内容。

    由于缺乏更好的术语,您的连接名称可能是 作业 (或 分配 ,或其他)。例如。 “爱丽丝在谷歌的营销工作”是一项任务。

    这现在开辟了新的可能性,应该可以满足您的需求。

    例如。一个赋值对象:

    {
    "id": "...",
    "user": {...}, // e.g. Alice
    "group": {...}, // e.g. Google
    "role": "Marketing"
    }

    并获取 /users/alice/assignments返回她所有作业的列表。

    同样,获取 /groups/google/assignments返回在 Google 工作的人员的所有分配对象的列表。

    这样做的好处是现在您的作业确实是一流的。您现在可以执行诸如跟踪旧分配之类的操作,同时让您的主要 API 仅返回当前分配。等等(这里的灵感来自 this answer 的 Prop 。)

    希望这可以帮助!

    关于api - 如何管理 REST API 中 3 个资源之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22499254/

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