我使用 Ratpack 和 Groovy 创建了一个 API。我想要一个 POST API,这样数据应该被处理并存储在 2 个 cassandra 数据库中,比如 table-A 和 table-B。现在我在我的 Ratpack.groovy 中有这个,因此每当需要推送数据时我都必须调用这两个 API:
prefix("A") {
post { registry.get(PostEndpointA).handle(context) }
}
prefix("B") {
post { registry.get(PostEndpointB).handle(context) }
}
我想要一个像这样的单个 POST API 调用,以便通过单个 API 调用可以将请求一起委托给两个端点:
prefix("post") {
post { registry.get(PostEndpointA).handle(context) }
post { registry.get(PostEndpointB).handle(context) }
}
或者,我想要这个:
prefix("post") {
post { registry.get(PostEndpoint).handle(context) }
}
在 PostEndpoint 中,我可以像这样执行这两个操作:
saveJsonAsA(context)
.promiseSingle()
.then { ItemA updatedItem ->
context.response.headers
.add(HttpHeaderNames.LOCATION, "/item/api/A")
context.response.status(HttpResponseStatus.CREATED.code())
.send()
}
saveJsonAsB(context)
.promiseSingle()
.then { ItemB updatedItem ->
context.response.headers
.add(HttpHeaderNames.LOCATION, "/item/api/B")
context.response.status(HttpResponseStatus.CREATED.code())
.send()
}
在这两种情况下,该项目仅添加到表 A 而不是 B 或之前在代码中编写的任何内容。
注意ItemA和ItemB本质上是同一个DB,只是主键不同,方便2种方式的GET。知道如何在 Ratpack 中执行此操作吗?