查看示例并阅读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约定)?
答案 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实现是否提供了你可以使用的任何内省......