【问题标题】:REST: Link resources with dependencyREST:将资源与依赖项联系起来
【发布时间】:2013-07-01 20:26:37
【问题描述】:

我正在尝试设计两个具有依赖关系的不同资源之间的关系。场景是:

两个资源,第一个叫做“account”,第二个叫做“person”。

在我的 API 中,“人”资源是现实世界中人的代表,包括姓名、年龄、性别、地址、电话等。帐户是负责对人进行身份验证的资源,例如登录名。

所以“人”资源的表示如下:

{
    "id": "7828292",
    "name": "Joseph Climber",
    "email": "yourmail@email.com",
    "gender": "M",
    "telephones": {
        "main": {
            "number": "898987777"
        },
        "secondary": {
            "number": "909099090"
        },
        "business": {
            "number": "937363902"
        }
    },
    "address": {
         "rel": "address",
         "href": "person/{ID}/address"
     }
} 

“帐户”资源的表示形式如下:

{
    "id": "login@email.com",
    "tokenAccess": "5E69FAE25F4B4F3E8CC5DE09A8163520",
    "link": {
         "rel": "person",
         "href": "person/{id}"
     }
}

我的问题是:当我创建一个新人(POST person)时我没有办法对新人进行身份验证,在这种情况下需要创建一个新帐户才能做到这一点,所以这似乎有点让 API 使用者感到困惑,因为 API 不能自然地表达这种关系(良好 API 设计的基本概念)。

表示帐户和人员资源之间这种依赖关系的最佳方式是什么?

【问题讨论】:

  • “认证新人”是什么意思?你说的是 API 消费者吗?

标签: api rest resources relationship


【解决方案1】:

如果有人尝试在没有访问令牌的情况下将POST 转换为/person,则返回一个状态码401 Unauthorized,其正文如下:

{
    "@type": "error",
    "description": "You must be authenticated to POST to person. If you do not have an account, then POST to /account to get an access token."
}

我想这对于使用 API 的开发人员来说已经足够直观了。

【讨论】:

  • 您好,感谢您的回答,但我认为这样 API 仍然感到困惑。例如,我遇到的另一个问题是:如果两者的创建过程不同,我如何将一个帐户关联到一个人(反之亦然)?
  • 您能详细说明您感到困惑的地方吗?如果我打电话给/person 并返回错误消息You must first call /account,我不会觉得这令人困惑——它确切地告诉我该怎么做。是因为用户在拨打电话之前不知道依赖关系吗?如果是这样,也许您在 API 文档中添加了一些内容。 Swagger 对每个 API 调用都有一个免费文本部分,您可以在其中向您的用户解释此类内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 2011-07-14
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
相关资源
最近更新 更多