【发布时间】:2016-06-06 16:55:47
【问题描述】:
我使用 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,只是主键不同,方便两种方式的GET。知道如何在 Ratpack 中执行此操作吗?
【问题讨论】:
-
您能否将您的要求作为一系列请求/响应预期提供?那是 POST /endpointA -> 应该发生一些事情 POST /endpointB -> 其他事情 GET /endpointA -> 更多事情
-
POST: endpointA -> 解析请求 JSON 并将对象保存到表 A.endpointB -> 解析请求 JSON 并将对象保存到表 B. GET: /api/A/123 ->从标识符 = 123 /api/B/123 的表 A 返回所有属性 -> 从标识符 = 123 的表 A 返回所有属性 GET 部分没问题,但我在处理多个 POST 部分时遇到问题。
-
谁能帮我解决这个问题?
标签: api post groovy cassandra ratpack