Ratpack: определение маршрутов чтения из списка
Я хочу создать "фиктивный" сервер, используя Ratpack.
Во-первых, я читаю из папки и определяю список пар, каждая пара имеет:
- Тропинка
- Ложный ответ для этого пути
Я хочу запустить сервер, который определяет эти маршруты и ответы:
// 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
чтобы определить обработчик для каждого элемента как-нибудь?
1 ответ
Решение
Вы можете определить все ваши обработчики, перебирая список определенных правил сервера, как в следующем скрипте 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 с "/" в начале, иначе конечная точка не будет определена
- если вы хотите вернуть ответ 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
[]
Я надеюсь, что это помогает.