【问题标题】:Retrieve and integrate Webservices data into Grails Models检索 Web 服务数据并将其集成到 Grails 模型中
【发布时间】:2012-03-16 08:06:39
【问题描述】:

我想知道如何使用 Grails 以简洁和模块化的方式处理以下情况:

我在本地数据库中有一些数据(比如书籍、作者、评论),我需要使用来自一个或多个外部 WS 的信息来增强这些数据。可能有不同的场景:

  1. 增强实体的属性(例如,我的数据库中没有图书出版年份,因此每次用户想要一本书时我都需要从 WS 获取它)
  2. 联合来自 DB 和 WS 的实体(例如,对于每本书,我在本地都有一些评论,但我可以从外部 WS 获得更多评论)

在 Grails 中处理这个问题的最佳方法是什么?

【问题讨论】:

    标签: web-services design-patterns grails model integration


    【解决方案1】:

    这个问题有点宽泛(我们不知道您要使用哪种网络服务),但我想我会:

    • 如果每个使用的 Web 服务基于 SOAP,则使用 groovyWS,如果它们是 RESTful,则使用 RestClient(如果需要,您可以使用 Rest plugin,但它看起来还没有更新虽然...)
    • 创建一个 Grails 服务来处理查询本地数据库和 web 服务的逻辑...执行以下操作:

      class BookService {
      
          def bookWS
      
          def findByAuthor = { author ->
              def books = []
              // From local db
              books << Book.findAllByAuthor(author);
      
              // From a webservice 
              books << bookWS.findBooksByAuthor(author);
              return books
          }
      
      }
      
    • 在我的控制器操作中使用我的本地 bookservice

      class BookController {
          def bookService
      
          def list() {
              def author = Author.findByName(params.author)
              [allBooks : bookService.findByAuthor(author)]
          } 
      }
      

    【讨论】:

    • 感谢您的回答。但现在真正的问题来了:bookWS 应该返回什么样的对象? JSON 对象(假设 REST+JSON)?书籍模型?如果我创建一个中间 Book 类来从底层数据源中抽象出来会更好吗?
    • 好吧,在我的示例中,我假设您的 WS 存根 (bookWS) 具有将远程 Web 服务响应转换为 Grails 应用程序中的 Book 模型的方法。转换的逻辑由你决定……
    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多