2011-01-08 28 views
4

我想开发一个REST API。 REST准则指定该状态不得存储在服务器端。 但其余的方法,我想实现意味着用户连接管理。为了尊重无状态,我需要在每个REST方法请求中提供用户凭据吗?我发现效率很低...没有其他更有效的方法吗?REST无国籍和用户会话

回答

7

无国籍是一个REST架构的主要约束条件之一,可在原publication阅读:

5.1.3无国籍

接下来我们添加一个约束到客户端 - 服务器交互:通信本质上必须是无状态的,如第3.4.3节(图5-3)中的客户端无状态服务器(CSS)样式,以便客户端到服务器的每个请求都必须包含所有必要的信息理解请求,并且不能利用服务器上存储的任何上下文。 因此会话状态完全保留在客户端上。

所以你提到的凭据,您需要单独为他们提供在每次调用(即基本验证+ SSL)。当然,这是“真实的世界”出现的,应用程序开始有所不同。你也可以使用OAuth,固定标记等,但请记住,你则削弱了你的API的“RESTfulness”。

+0

好,感谢您的回答;)不,我并不需要使用OAuth因为我可以让不同的客户端知道用户凭据。 – ayorosmage 2011-01-08 15:20:45

3

进行认证每个请求并不一定需要通过用户名和密码在每次请求。一些系统将采用用户名和密码,验证它,然后创建某种类型的安全令牌,以便在每个请求上传递。

的想法是,令牌应该是快于做一个完整的用户名密码检查来验证。很明显,取决于令牌生成和验证的复杂程度,您可能会打开其他安全漏洞,但您必须决定它的重要性。