我可以在Web应用程序的会话变量中保存多少状态?

时间:2011-10-19 00:27:59

标签: api web-applications rest rpc

我正在为我正在创建的Web应用编写REST / RPC API。从我所学到的,似乎REST背后的核心思想之一就是不维持任何状态。这就是说我发现自己做的事情就像在服务器端将事务标记为已认证,这就像保存状态一样。我应该在多长时间内采取这种做法?我应该在哪里画线?作为会话变量的一部分,还有其他一些非常方便的东西,但我想知道我怎么知道什么时候不应该或不应该这样做。

我希望这是提出这个问题的正确场所。我是否将它发布在程序员中进行了辩论,但这感觉更恰当。

更新

我被告知使用票务系统比使用会话变量维护auth信息更好。有人可以包括并回答有关这种票务系统如何运作的高度描述吗?

1 个答案:

答案 0 :(得分:2)

你是对的 - REST调用理想上是无状态的,并且将某些内容存储在会话变量中,并将其用于REST调用,这是令人厌恶的。例如,您不能保证RESTful客户端甚至可以发送会话变量所需的cookie信息。

如果您需要身份验证,那么您应该让REST调用返回类似票证的内容,然后REST调用者会将该票证作为另一个调用的一部分发送。

<强>更新 对于票务系统,您通常希望使用相同的身份验证或类似的身份验证系统。例如,如果您需要用户名和密码,您可能希望票证请求POST。票证是在后续调用中传递的GUID。服务器上的票证可以存储在会话中,也可以存储在数据库中(我通常有一个TICKETS表,其中包含过期日期等)。

$result = file_get_contents('http://site.com?action=auth&user=matt&password=pass');
// parse $result XML for ticket or auth error
// subsequent calls...
$result = file_get_contents('http://site.com?action=getSomething&ticket=" . $ticket);

QuickBase以这种方式工作 - 您使用用户名,密码和api应用程序令牌发送API_Auth操作,并获得回复的票证。然后在后续调用中传递api app令牌和票证 - GET请求和POST发送。