【问题标题】:Calling web-services internally within the server在服务器内部调用 Web 服务
【发布时间】:2013-10-29 02:40:10
【问题描述】:

我有一个网络服务 getEmployee(),当传递一个 id 时,它会获取单个员工的员工详细信息。

同一服务器上的另一个 Web 服务 getEmployeeList() 在通过部门时获取整个员工列表。这会获取部门的 id,然后调用 getEmployee() 服务来获取所有详细信息。

网络服务 getEmployeeList() 的响应基本上是 getEmployee() 响应的集合。

我的问题是如何最好地实施它?是在内部从 getEmployeeList() 多次调用 getEmployee() 还是每次只调用 getEmployee() 的 process 方法更好(在 getEmployee() 中有一个 process 方法,它将 xml 作为输入并返回响应 xml )

【问题讨论】:

  • 如何存储整个员工数据集?您提到了个别员工的 xml 文件。它们是单独的 xml 文件吗?它是数据库中的xml数据吗?您在 getEmployee() 中寻找特定元素来解析它是一个大的 xml 文件吗?
  • @Chill 它存储在数据库中。 xml 文件只是 web 服务的输入,传入 id。它必须查询数据库,获取详细信息,并使用详细信息构建响应 xml

标签: java web-services rest


【解决方案1】:

确切的答案将取决于应用程序的内部结构,但通常我不会调用在同一服务器上运行的另一个 Web 服务 API 来为请求提供服务。这将是低效的,并将一种实现与另一种联系起来。

如果您需要返回员工列表,您的前端 REST 层应调用业务或中间层的方法来检索相关信息,通常以一组域对象的形式。这个中间层将负责从持久层或某种类型的获取实际数据 - 即从某种类型的数据库中获取正确的员工列表,尽管确切的实现细节不应该是相关的。

然后可以将这些转换为正确的格式以构建对客户端的响应 - 即 XML 的 JAXB 对象。 (您的中间层也可以直接返回这些 JAXB 对象,但这种方法有优缺点)

【讨论】:

    【解决方案2】:

    如果有可以在多个 Web 服务中重用的功能,那么该功能是一个很好的候选者,可以作为可以被另一个函数调用的单独函数,而不是仅仅让该功能存在于端点代码中 本身

    当我谈到需要创建这些类型的函数时,问题通常变成了它是model 功能还是helper 功能的问题。

    归根结底,如果您要从一个 API 向同一个 API 中的另一个端点发出 curl 请求,那么您只是在浪费不必要的时间来处理网络带宽……这通常会导致本地到本地的场景,但有时不是,在这种情况下,您会立即注意到这不是一个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2014-08-23
      相关资源
      最近更新 更多