【发布时间】:2021-12-10 17:28:27
【问题描述】:
我正在为我构建的一个小型 SaaS 重新设计 REST API。目前有一个路由/entries 不需要任何身份验证。但是,如果客户端以足够的权限进行身份验证,服务器将发送附加信息(例如:与每个条目关联的帐户)。
我看到的主要问题是,尝试请求权限不足的受保护数据的客户端仍会收到 200 响应,但没有预期的数据,而不是 401 Unauthorized。
我想出的替代方案是:
-
将端点分成两个端点,例如
/entries和/admin/entries。这种方法的问题在于,现在对于本质上相同的资源有两个不同的端点。但是,它具有易于使用 OpenAPI 记录的优点。 (此外,它允许添加/entries/:id/account端点。) -
接受查询参数
?admin=true。这个选项更难记录。另一方面,它避免了单个条目有多个 URI。
有没有标准的方式来构建这样的东西?
【问题讨论】:
-
我认为这个问题对于这个网站来说太基于意见了。底线是 REST 并不是为了惯用地处理这样的复杂逻辑而构建的。这也是构建 GraphQL 的原因之一。您描述的两种方法都在大型科技公司中广泛部署。选择一个而不是另一个的决定通常是由确切的用例驱动的。例如,如果客户是外部客户并且拥有自己的复杂分租系统与只是内部管理员相比,“易于记录”就完全不同了。无论哪种方式,您都必须根据自己的用例进行选择
标签: http api-design rest