我对RESTful API设计有疑问。遵循REST的指导原则,所有端点都应该是名词和复数,并且永远不应该是动词。但是,通常认证路由是:
/login
/logout
这两个都是动词。如果您应该遵守指南,那么这些路线应该更像这样:
/users?action=login
/users?action=logout
但是我从未使用任何具有此特定身份验证实现的API,每个人都使用第一个,包括我。但是我想知道这是因为很多人没有完全遵循这些指导原则而且它已成为一种习惯还是有其他原因?
答案 0 :(得分:5)
如果您希望符合其他准则,您的api应该公开安全令牌资源,例如:
/security/token
就是这样......你可以获得安全令牌(登录),使用它们,然后删除它们(注销)
答案 1 :(得分:0)
根据服务器端的stateless constraint of REST维护客户端会话是不允许的。所以你的问题没有任何意义。这些是REST最简单的auth解决方案:
通过受信任的客户端,您必须在每个请求中发送用户名和密码,例如在HTTP(基本)身份验证标头中。您必须使用加密连接。
通过第三方(非信任)客户端,您必须通过注册向客户端添加唯一的API密钥。在此之后,当客户首次尝试使用客户端时,您会向她显示一个对话框,在该对话框中,她可以为客户端注册唯一的访问令牌。所以这样她就可以访问她的帐户了。之后,第三方客户端会向每个与客户帐户相关的请求发送API密钥和访问令牌。
回答有关URI的问题。根据{{3}}:
您将URI映射到资源而不是映射到操作。这就是他们不应该包含动词的原因。您可以使用动词来选择正确的HTTP方法。您可以将几乎所有操作名称减少为几个HTTP方法和不错的URI。
URI对客户端没有意义,因为客户端会使用带语义注释的超链接(例如uniform interface constraint或link relation)。
好的URI有助于检查你是否真的将它们映射到资源(如果没有,那么它们包含动词)。
当您在服务器端手动编写路由逻辑或调试请求时,好的URI很好。
答案 2 :(得分:-2)
使用JWT(Json Web Token)。它非常轻巧。