具有身份验证的RESTful API URL设计

问题描述 投票:0回答:1

我的数据模型是这样的:

User: id, email, hashed_password
Item: id, name, color
UserItem: user_id, item_id, rating

并且我想编写一个RESTful API来获取这些资源。通过OAuth 2使用JWT令牌(包含已记录的用户ID)提供身份验证。

第一种方法

端点

URL结构的第一个想法是(我仍然没有身份验证时选择的一个:]

/items/{item_id}
/users/{user_id}
/users/{user_id}/items/{item_id}

在这种情况下,标识为1的用户可以使用:

  • GET /users/1以获取自己的信息;
  • GET /users/1/items获得自己的物品(带有等级);
  • [GET /items以获取可以添加到收藏夹的所有项目。

分析

我认为此解决方案很明确,但也很简单。

好:

  • 您可以轻松获取其他用户的信息(如果他们可用);
  • 端点与数据模型之间的一对一关系。

坏:

  • 更长的网址;
  • 存在冗余(为什么在令牌中已经有关于id 1的信息时为什么GET /users/1/items?]。>>
  • 第二种方法

端点

鉴于您可以从令牌中提取用户ID,因此结构也可以更简单:

/items/{item_id}
/users/{user_id}

在这种情况下,标识为1的用户可以使用:

  • GET /users/me以获取自己的信息;
  • GET /items?class=owned获得自己的物品(带有等级);
  • [GET /items?class=all以获取可以添加到收藏夹的所有项目。
  • 分析

此解决方案有点混乱,但可能更优雅。

好:

  • 更短的网址;
  • 较少冗余(GET /items来获得您自己的物品。
  • 坏:

  • 仅表示模型UserItem(即使在这种情况下,获得没有等级的Item可能几乎没有意义,如果用户尚未添加,则可以将其设置为null);
  • 不容易获得其他用户的物品(可能是GET /items?user=3之类的东西?]。
  • 结论

老实说,在这种情况下,我不知道什么是最佳实践。我觉得这两者都有些问题。也许我没有看到一种混合方法?

您将如何组织这样的模型?

我的数据模型是这样的:用户:id,电子邮件,hashed_pa​​ssword项目:id,名称,颜色UserItem:user_id,item_id,等级,我想编写一个RESTful API来获取这些资源。身份验证为...

rest api restful-authentication
1个回答
0
投票

您可以查看类似HAL的格式。 HAL为您提供了一种描述特定资源(项目)的方法,并允许您创建指向这些资源的多个集合。

© www.soinside.com 2019 - 2024. All rights reserved.