用于身份验证的 REST API URL 的最佳实践

Posted

技术标签:

【中文标题】用于身份验证的 REST API URL 的最佳实践【英文标题】:Best practice for REST API URL for authentication 【发布时间】:2020-11-12 07:51:20 【问题描述】:

我是 REST API 开发的初学者,我在网上阅读了一些文档,现在我正在为具有不同类型用户的 2 个平台开发一个 REST API。

在 REST API 开发中为身份验证端点选择 URL 的最有效方法是什么?

第一条规则之一是切勿在 REST API URL 中使用动词,因此这些 URL 不正确。

/auth/resetPassword /auth/refreshToken /auth/登录 ...

重置、刷新、登录都是动词。这个网址正确吗?有什么更好的选择?

那么如果我有更多那么一种用户可以正确使用这些?

/auth/customers/login /auth/admins/login 等

登录是动词,对吗? 然后 /auth/:entity/ 在我看来不太适合我阅读的有关 REST API 的内容。

【问题讨论】:

【参考方案1】:

“无动词”规则并不是硬性规则,它们只是人们喜欢的一种设计方法。

虽然绝对可以将每个端点转换为类似于名词的东西,并且您只是将状态推到管道中,但这并不总是可取的。如果你真的觉得你是在尝试在一个圆孔中钉方钉,那么你可能就是这样,像“登录”端点这样的东西绝对是一个经典的例子。

但是,如果您将所有内容都转换为“所有内容都必须是名词,并且我们正在 PUTing 和 GETing 状态”的 REST 样式,那么可以这样看待:

    您没有登录,您正在创建一个新会话(使用 PUT 或 POST)。 您不是在“重置密码”,而是向password 端点发送PUT 请求。

但我不确定是否会推荐引入这种复杂性。

我还建议您研究 OAuth2,因为您正在做的事情似乎至少有一些重叠,并且重新发明***可能是不可取的。

【讨论】:

确定我不想重新发明***,我只是问这种操作通常如何执行。感谢您的回复。

以上是关于用于身份验证的 REST API URL 的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

自定义 REST 服务的 API 身份验证最佳实践

使用 Django rest 框架在两个 api 之间配置身份验证的最佳方法是啥?

Django REST 框架:令牌身份验证不适用于生产

在 laravel 中使用 REST API 的最佳身份验证方法是啥?

无需对移动应用进行用户身份验证即可保护私有 REST API 的最佳方法

Swift iOS 应用程序到 REST PHP API - 身份验证的最佳实践是啥?