【问题标题】:REST API designREST API 设计
【发布时间】:2012-01-12 21:09:24
【问题描述】:

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

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

知道我该如何设计吗?

【问题讨论】:

  • 你需要一个控制器、mod_rewrite 和身份验证
  • user247245 不明白这个问题。
  • /items 的返回内容因访问的用户而异,有什么问题?这就是动态内容的美妙之处。用户只会看到他们有权查看的项目的链接。这是一个经典的概念。
  • 以下是非常相似的问题。在那里查看我的答案:stackoverflow.com/questions/35070866/…

标签: api http rest restful-url


【解决方案1】:

在 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2015-07-24
    • 1970-01-01
    • 2011-08-04
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多