将webservice直接暴露给Web客户端或在其间保留瘦服务器端脚本层?

max*_*max 6 java architecture web-services

我正在开发一个REST Web服务(Java,Jersey).我正在这样做的人希望通过Javascript直接访问web服务.一些本能告诉我这不是一个好主意,但我无法真正解释这种本能.我的自然方法是让webservice进行真正的逻辑和数据库访问,但也有一些(相对较薄的)服务器端脚本层(例如在PHP中).客户端将与PHP层进行通信,而PHP层又与Web服务进行通信.(web服务对于apache/PHP服务器来说是本地的,并且隐含地信任来自脚本层的调用.脚本层将负责会话管理.)(顺便说一下,我不是说只是将web服务隐藏在Apache之后重定向呼叫.)

但是当我发现自己缺乏解释我的直觉的言论/论据时,我想知道我的直觉是否正确 - 请注意,虽然我已经用各种语言和框架开发了各种各样的软件17年,但这是我第一次开发web服务.

所以我的问题基本上是:你的意见是什么?有没有标准的设置?我的直觉完全错了吗?还是部分?,P

非常感谢,

马克斯

PS:我可能会添加一些有关整个应用程序计划使用情况的信息:

  • 将由不同类型的用户访问,部分是普通公众,部分特权
  • 因此,所有主要的OS /浏览器组合都可以作为客户端
  • 但是,写客户不是我的责任
  • 可能会有很高的负载/流量
  • webservice的逻辑将在以后大规模扩展为另一个产品,该产品基本上是当前项目功能的超集
  • 很有可能在某些时候应该暴露出可供第三方开发人员使用的API - 显然,有一些限制
  • 在某些时候,产品的公众视图也应该可以通过智能手机访问(换句话说,可能是网站的自定义版本,以适应较小的显示和不同的输入方法)

Daf*_*aff 3

我不认为通过 JavaScript 等直接访问 REST Web 服务通常不是一个坏主意,因为 REST 架构就是为此设计的。对于您的用例,您可能需要考虑一些影响:

  • 您的网络服务必须负责用户管理。由于 REST 架构不支持服务器端会话状态,因此您必须对每个请求进行身份验证和授权。用户必须在客户端维护他们的状态。
  • 您的 Web 服务实现必须处理缓存和负载平衡等问题以及您可能分配给 PHP“代理”脚本的所有其他问题

对于您的要求:

所有主要操作系统/浏览器组合都可以作为客户端

由于您的 Web 服务只会传递数据(例如 JSON 或 XML),所以这应该不是问题。JavaScript 部分只需要注意发出正确的请求。

可能会有非常高的负载/流量

如果您严格遵循 REST 架构,则可以使用 http 缓存。但请记住,无国籍的性质总是会导致更多的流量。

Webservice 的逻辑稍后将针对另一个产品进行大规模扩展,该产品基本上是当前项目功能的超集

开放式 Web 服务的好处是您可以将它们松散地耦合在一起。

很可能在某个时候应该公开可供第 3 方开发人员使用的 API - 显然,有一些限制

同样,通过 RESTful Web 服务,您已经为开发人员公开一个 API。这是好事还是坏事,由您的客户来决定。

在某些时候,公众应该可以通过智能手机查看该产品

另一个使您的 REST Web 服务可公开访问的专业人士。大多数智能手机 API 支持 HTTP 请求,因此您只需为特定智能手机平台开发 GUI,即可直接调用 Web 服务。