2

我正在编写一个 REST API,我想要一些反馈。我将拥有一个名为 Items 的资源。我希望它可以公开访问,也可以私有(只有用户可以看到)。我的第一个想法是放置一个指向公共项目的 URL,例如 /Root/Items 将存在公共项目,以及其他 URL,例如 /Root/User/Items 将存在私有项目。一个项目可以链接到另一个用户,因此它有权更新它。像 /Root/User/Operator/Items .... 但后来我意识到我创建了太多地址。

我不喜欢将所有项目放在 de /Root/Items url 中的想法,因为每个用户都会有不同的输出。并且仅将其放在 /Root/user/Items 内将无法列出所有公共项目(可以属于任何用户)。

知道我该如何设计吗?

4

1 回答 1

0

在 RESTful 架构中,如果您按照我的预期使用 HTTP,那么每个“事物”都应该有一个标识符,它是一个 URI。在您的情况下,每个项目都应该只有一个 URI。

我的第一个想法是放置一个指向公共项目的 URL,例如 /Root/Items 将存在公共项目,以及其他 URL,例如 /Root/User/Items 将存在私有项目。

我假设您不仅在谈论将返回项目集合的集合资源。我假设您还将拥有单项资源。在您的方案中,单个项目的 URI 可以是 /Root/Items/42 或 /Root/User/Items/23。

如果它可以帮助您完成所需的授权,您可以为公共和私人项目使用不同的 URI 方案。但无论如何,URI 在 REST 中并不重要。URI 应始终被视为不透明的。如果您对公共和私人项目使用不同的方案,则必须确保公共项目永远不会成为私人项目,反之亦然。如果是这样,项目的 URI 将发生变化,这与更改数据库中行的主键相同。标识符不应更改。如果您对公共和私人项目使用不同的 URI 方案,那么您正在做的是将项目的隐私级别编码到那里的标识符中。如果您的问题域允许这样做,那没关系。

一个项目可以链接到另一个用户,因此它有权更新它。像 /Root/User/Operator/Items .... 但后来我意识到我创建了太多地址。

这听起来像是您想要更改项目的隐私级别。正如我之前所说,一个项目应该有一个永远不会改变的 URI。如果您正在谈论收集资源,您的方案可能是。我不确定你在这里的意思。

最后:您需要的是身份验证和授权。如果用户想要访问另一个用户的私有项目,无论其 URI 是什么,您都需要返回 403 Forbidden。

于 2012-01-18T10:00:36.417 回答