1

我刚刚开始使用 REST,并开始按照这个设计模型构建我的第一个应用程序。据我所知,这个想法是构建您的服务,就像您的网站本身就是消费者的 api 一样。

这对我来说很有意义,因为我的 Web 应用程序执行了很多 AJAX 调用,但是对每个请求进行身份验证以避免使用会话似乎有点浪费。作为 REST 设计过程的一部分,这只是我必须接受的吗?

此外,进行 ajax 调用工作正常,但是说,我只需要显示用户配置文件的视图,这现在是否意味着我还需要对我的 api 进行 curl 调用以提取这些数据。此时我知道我在内部工作,所以甚至需要身份验证吗?

4

3 回答 3

1

一些备注:

虽然您可以将整个应用程序设置为具有 REST接口,但您应该将其设置为仍然能够在内部调用它。从 HTTP 调用它并通过 HTTP 获取结果只是输入处理和输出渲染。所以,如果你把这些问题分开,你会得到一个流程:input-processing -> method call -> data return -> data rendering. 第一个和最后一点的剃须,你还剩下什么?返回数据的函数调用,您可以在代码中使用。将“外部”函数调用转换为“内部”函数调用并将“内部”数据呈现为“外部”(xml、json、html,无论您想要什么)的单独功能,使您的应用程序高效,并且仍然完全支持 REST。

如果您允许外部呼叫,则需要进行身份验证,即使您不“告诉”其他用户数据可以以某种方式检索,它仍然很容易被发现。我不知道您为什么不想使用会话进行此身份验证(这很可能发生在前面提到的从“外部”调用到内部调用的转换中。我不会要求“不使用会话”,但是没有理由您不能允许多种身份验证方法(会话、每个请求的重新身份验证、令牌等)。

于 2012-06-25T23:34:55.320 回答
0

通常我更喜欢生成一个可以使用标准 PHP 调用的接口,然后添加一个接口来添加身份验证和 RESTful 访问。因此,您可以访问例如:

http://example/api/fetchAllFromUsers?auth-key=XXXXX

翻译为:

$internalInterface = new Api();
$internalInterface->fetchAllFromUsers();
于 2012-06-25T23:33:37.117 回答
0

不是每次都进行身份验证,而是保存一个标识您的会话的状态块(例如,cookie),然后使用它。然后它成为 GET 的参数(使用?name-value语法)或可以成为 URI 本身的一部分,例如

 http://example.com/application/account/ACCTNO/TOKEN

分别在哪里ACCTNOTOKEN标识帐户和真实会话。

起初这可能看起来有点不稳定,但这意味着您的应用程序随着它变得越来越大,从不需要复杂的会话状态负载平衡等等——一个简单的代理方案就可以正常工作。这大大降低了架构的复杂性。

于 2012-06-25T23:35:29.023 回答