Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api 我可以为一个web应用保存多少状态变量?_Api_Web Applications_Rest_Rpc - Fatal编程技术网

Api 我可以为一个web应用保存多少状态变量?

Api 我可以为一个web应用保存多少状态变量?,api,web-applications,rest,rpc,Api,Web Applications,Rest,Rpc,我正在为我正在创建的web应用程序编写REST/RPC API。据我所知,REST背后的核心思想之一似乎是不保持任何状态。也就是说,我发现自己正在做一些事情,比如在服务器端将会话标记为已验证,这感觉就像在保存状态。这种做法我应该走多远?我应该在哪里划界?还有其他一些东西可以很方便地保存为会话变量的一部分,但我想知道如何知道何时不应该或不应该这样做 我希望这是提出这个问题的正确地点。我就是否在程序员中发布它进行了辩论,但我觉得这更合适 更新: 我被告知使用票务系统比使用会话变量来维护身份验证信息更

我正在为我正在创建的web应用程序编写REST/RPC API。据我所知,REST背后的核心思想之一似乎是不保持任何状态。也就是说,我发现自己正在做一些事情,比如在服务器端将会话标记为已验证,这感觉就像在保存状态。这种做法我应该走多远?我应该在哪里划界?还有其他一些东西可以很方便地保存为会话变量的一部分,但我想知道如何知道何时不应该或不应该这样做

我希望这是提出这个问题的正确地点。我就是否在程序员中发布它进行了辩论,但我觉得这更合适

更新:


我被告知使用票务系统比使用会话变量来维护身份验证信息更好。是否有人能提供一个对这种票务系统如何工作有高度描述的答案?

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

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

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


QuickBase的工作方式是这样的-您发送一个带有用户名、密码和API应用程序令牌的API_Auth操作,并获得一张票证作为回报。然后在后续调用中传递api应用程序令牌和票证,包括GET请求和POST发送。

据我所知,在会话变量中保存身份验证状态是相当标准的做法。我说错了吗?或者正在这样做的人不符合REST?绝对正确-在会话中保存身份验证状态是标准做法。同样正确的是,为REST通话而这样做的人是不符合要求的。在许多情况下,REST的目的是使服务器端API和Javascript Ajax API易于使用。但是,这两种类型的调用都不能保证能够处理存储身份验证和其他会话信息的服务器的需要。改用票务系统。对于GET请求,这种方法不容易受到MitM攻击吗?如果有人只是嗅探你发送的url,他们将能够看到你的标记并模仿你。GET和POST都容易被嗅探。我通常使用POST来表示类似的内容,只是更容易在GET请求中显示。我为Intuit建立了一个类似Yammer的网站,使用Laconica作为基础,但最初的作者是这样获得的。我让它基于SSL、POST和票证来更好地保护它。SSL GET和SSL POST一样安全——两者都使用公共站点密钥加密。只有从域服务器检索到的IP地址是“透明的”。让我们看看您是否考虑过HTTP基本身份验证?是的,但我听说它的安全性非常糟糕。也就是说,凭证是以纯文本形式传递的。它的安全性不亚于带有会话的纯HTML表单。您将看到所有请求参数和cookie。如果要加密传输,只需使用HTTPS。
$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);