Ratpack:定义从列表中读取的路线
Ratpack: define routes reading from a list
我想使用 Ratpack 创建一个 "mock" 服务器。
首先,我从一个文件夹中读取并定义一个对列表,每对都有:
- 一条路
- 该路径的模拟响应
我想启动定义这些路由和响应的服务器:
// this is already done; returns smth such as:
def getServerRules() {
[ path: "/books", response: [...] ],
[ path: "/books/42", response: [ title: "this is a mock" ] ],
[ path: "/books/42/reviews", response: [ ... ] ],
...
]
def run() {
def rules = getServerRules()
ratpack {
handlers {
get( ??? rule.path ??? ) {
render json( ??? rule.response ??? )
}
}
}
}
我可以迭代那些 rules
以便以某种方式为每个项目定义处理程序吗?
您可以通过遍历定义的服务器规则列表来定义所有处理程序,就像在这个 Ratpack Groovy 脚本中一样:
@Grapes([
@Grab('io.ratpack:ratpack-groovy:1.5.0'),
@Grab('org.slf4j:slf4j-simple:1.7.25'),
@Grab('org.codehaus.groovy:groovy-all:2.4.12'),
@Grab('com.google.guava:guava:23.0'),
])
import static ratpack.groovy.Groovy.ratpack
import static ratpack.jackson.Jackson.json
def getServerRules() {
[
[path: "", response: "Hello world!"],
[path: "books", response: json([])],
[path: "books/42", response: json([title: "this is a mock"])],
[path: "books/42/reviews", response: json([])],
]
}
ratpack {
handlers {
getServerRules().each { rule ->
get(rule.path) {
render(rule.response)
}
}
}
}
如您所见,所有处理程序都在 for-each 循环内定义,该循环遍历预定义的服务器规则。有两件事值得一提:
- 不要以“/”开头 URL 路径,否则端点将无法定义
- 如果你想 return JSON 响应用
ratpack.jackson.Jackson.json(body)
方法包装你的响应主体,类似于我在示例中所做的
输出
curl localhost:5050
Hello World!
curl localhost:5050/books
[]
curl localhost:5050/books/42
{"title":"this is a mock"}
curl localhost:5050/books/42/reviews
[]
希望对您有所帮助。
我想使用 Ratpack 创建一个 "mock" 服务器。
首先,我从一个文件夹中读取并定义一个对列表,每对都有:
- 一条路
- 该路径的模拟响应
我想启动定义这些路由和响应的服务器:
// this is already done; returns smth such as:
def getServerRules() {
[ path: "/books", response: [...] ],
[ path: "/books/42", response: [ title: "this is a mock" ] ],
[ path: "/books/42/reviews", response: [ ... ] ],
...
]
def run() {
def rules = getServerRules()
ratpack {
handlers {
get( ??? rule.path ??? ) {
render json( ??? rule.response ??? )
}
}
}
}
我可以迭代那些 rules
以便以某种方式为每个项目定义处理程序吗?
您可以通过遍历定义的服务器规则列表来定义所有处理程序,就像在这个 Ratpack Groovy 脚本中一样:
@Grapes([
@Grab('io.ratpack:ratpack-groovy:1.5.0'),
@Grab('org.slf4j:slf4j-simple:1.7.25'),
@Grab('org.codehaus.groovy:groovy-all:2.4.12'),
@Grab('com.google.guava:guava:23.0'),
])
import static ratpack.groovy.Groovy.ratpack
import static ratpack.jackson.Jackson.json
def getServerRules() {
[
[path: "", response: "Hello world!"],
[path: "books", response: json([])],
[path: "books/42", response: json([title: "this is a mock"])],
[path: "books/42/reviews", response: json([])],
]
}
ratpack {
handlers {
getServerRules().each { rule ->
get(rule.path) {
render(rule.response)
}
}
}
}
如您所见,所有处理程序都在 for-each 循环内定义,该循环遍历预定义的服务器规则。有两件事值得一提:
- 不要以“/”开头 URL 路径,否则端点将无法定义
- 如果你想 return JSON 响应用
ratpack.jackson.Jackson.json(body)
方法包装你的响应主体,类似于我在示例中所做的
输出
curl localhost:5050
Hello World!
curl localhost:5050/books
[]
curl localhost:5050/books/42
{"title":"this is a mock"}
curl localhost:5050/books/42/reviews
[]
希望对您有所帮助。