繁体   English   中英

设置RESTful Web服务

[英]Setting up a RESTful web service

我刚刚开始使用REST,并已开始按照此设计模型构建我的第一个应用程序。 据我所知,我们的想法是像您自己的网站的使用者一样使用api来构建您的服务。

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

同样,进行ajax调用也可以,但是,我只需要显示用户个人资料的视图,这是否意味着我现在还需要对我的api进行curl调用以提取此数据。 在这一点上,我知道我在内部工作,所以甚至需要身份验证吗?

一些说明:

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

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

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

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

转换为:

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

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

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

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

乍一看似乎有点不稳定,但这意味着您的应用程序随着它的变大而不再需要使用会话状态进行复杂的负载平衡等等,一个简单的代理方案就可以很好地工作。 这大大减少了架构复杂性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM