2012-06-25 180 views
1

我刚开始使用REST,并开始构建遵循此设计模型的第一个应用程序。从我可以收集的想法是建立你的服务,就像你的网站本身就是消费者的api。设置REST风格的Web服务

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

此外,使ajax调用正常工作,但是说,我只需要显示用户配置文件的视图,这是否意味着我也需要对我的api进行curl调用来提取这些数据。在这一点上我知道我在内部工作,所以认证甚至是必需的?

回答

1

一些言论:

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

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

0

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

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

翻译为:

$internalInterface = new Api(); 
$internalInterface->fetchAllFromUsers(); 
0

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

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

其中ACCTNOTOKEN分别标识帐户和真实会话。

这看起来可能有点片面,但这意味着您的应用程序越来越大,从不需要使用会话状态等进行复杂的负载平衡 - 一个简单的代理方案可以正常工作。这大大降低了架构的复杂性。