我想开发一个REST API。 REST准则指定不得将状态存储在服务器端。 但我想实现的REST方法意味着用户连接管理。为了尊重无状态,我是否需要在每个REST方法请求中提供用户凭据?我觉得效率很低......是不是还有其他更有效的方法?
答案 0 :(得分:7)
无状态是REST架构的主要约束之一,可以在原始publication中阅读:
5.1.3无国籍
我们接下来为客户端 - 服务器交互添加一个约束:通信本质上必须是无状态的,如3.4.3节(图5-3)的客户端无状态服务器(CSS)样式,这样每个请求从客户端到服务器必须包含理解请求所需的所有信息,并且不能利用服务器上任何存储的上下文。 会话状态因此完全保留在客户端上。
因此,对于您提到的凭据,您应该在每个呼叫中单独提供它们(即基本身份验证+ SSL)。当然,这是“现实世界”,应用程序开始有所不同。您也可以使用OAuth,固定令牌等,但请记住,您正在削弱API的“RESTfulness”。
答案 1 :(得分:3)
对每个请求进行身份验证并不一定要求在每个请求中传递用户名和密码。一些系统将获取用户名和密码,验证它,然后创建某种安全令牌,可以在每个请求上传递。
这个想法是令牌应该比进行完整的用户名密码检查更快地进行身份验证。显然,根据令牌生成和验证的复杂程度,您可能会打开其他安全漏洞,但您必须决定其重要程度。