【问题标题】:Is it good practice to have seperate projects/deployments for web and service endpoints?为 Web 和服务端点分别进行项目/部署是一种好习惯吗?
【发布时间】:2011-11-22 22:16:15
【问题描述】:

如果我有一个托管的 Web 应用程序,在 tomcat 中将 Web 和 api Web 服务拆分为 2 个不同的项目/托管应用程序是一种好习惯吗?

我可以看到,如果人们试图滥用 API,它会影响 Web 应用程序的性能。

如果我要创建 2 个单独的项目(或者如果不是最初但构建是为了有可能将事情分开),我可以以某种方式在 2 个项目之间共享我的休眠数据层吗?

我正在使用 IntelliJ,我该怎么做?是否会为休眠创建一个单独的模块(域实体、Dao 和服务类)。

【问题讨论】:

  • 应该是程序员 SE immo

标签: java hibernate spring intellij-idea jersey


【解决方案1】:

我不会说一般来说是一个好习惯,但在某些情况下可能是一个好主意。

在面向服务的体系结构中,服务层不仅被 Web 层使用,还可能被其他客户端使用。在这种情况下,在单独的服务器中构建 Web 和服务层可能是个好主意。

另一种情况是您想要执行单独的部署,因为例如两层的工作由不同的团队或在不同的工作流中完成 - 我会质疑这是否是一种好的做法,尽管与团队在垂直功能而不是层中工作相反。

您可以通过多种不同方式创建服务层:

  • 作为网络服务。当您需要互操作性时。
  • 作为远程 EJB(这在 TomEE 中是可能的)。当不需要互操作性时。
  • 您也可以创建上述两者的组合,它们并不相互排斥。

在拆分项目方面,您可以创建:

  • jar 模块中的一组域对象,将在您的 Web 层和服务层之间共享。
  • Web 层的战争模块。
  • 服务层接口的 jar 模块,它是 Web 层的依赖项。
  • 包含服务和 DAO 的服务层的 jar/war 模块。

【讨论】:

    【解决方案2】:

    从客户端的角度来看,您所说的“web”和“api web service”有什么区别?程序化客户端可以“滥用”其中任何一个,因此不确定出于这个原因拆分它们是否有意义。您可以使用负载均衡器进行横向扩展。

    【讨论】:

    • 我在考虑这个问题,如果需要,我可以轻松地将对 /api/ 的调用重定向到另一组服务器。
    【解决方案3】:

    您可以创建一个 Web 界面使用的内部 API,以及一个使用内部 API 的 Web api。

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      相关资源
      最近更新 更多