Autowire库(Scalajs)如何在doCall中执行多个HTTP方法类型?

时间:2016-05-30 06:42:22

标签: scala.js

查看示例并阅读lihaoyi的ScowJs Autowire库的文档,我看不出一种方法,一个autowire.Client可以执行GET和POST,因为它只允许覆盖doCall:

def doCall(req: Request): Future[PickleType]

请求只是:

  case class Request[PickleType](path : Seq[String], args: Map[String, PickleType])

是否有一个很好的解决方案(除了有多个autowire.Client实例)这个限制,以便我的api可以遵循GET获取,POST和UPDATE来创建和更新(REST约定)?

1 个答案:

答案 0 :(得分:1)

这取决于您的具体要求,但请记住, doCall内部可能会根据具体情况进行不同的调用。例如,in Querki我的doCall实现如下所示:

override def doCall(req: Request): Future[String] = {
  try {
    if (DataAccess.space.isEmpty) {
      makeCall(req, controllers.ClientController.rawApiRequest())
    } else {
      makeCall(req, controllers.ClientController.apiRequest(
        DataAccess.userName, 
        DataAccess.spaceId.underlying))
    }
  } catch {
    ...
  }
}

这是根据外部运行时信息选择要调用的API,但您可以内省Request,并决定以这种方式调用的API。我怀疑这就是你要找的东西。

它确实需要一些外部信息来告诉你哪个Request对应哪个方法,但我没有看到太多方法 - Autowire本身并不是关于HTTP(并且所有Autowire调用都很常见)单个HTTP入口点),所以你在做一些不同寻常的事情。如果您正在使用Play,我相信您可以从JavascriptReverseRouter获取方法信息;如果没有,你应该看看你的HTTP实现是否提供了你可以使用的任何内省......