サンプルがなさ過ぎてやりたかったことをやるまでエライ時間がかかってしまったので完全個人的なメモ。

実装したいAPI一覧はこんな感じ。

1
2
3
4
/users/<userName>
/users/<userName>/
/users/<userName>/activity?from=<number>
/users/<userName>/statistics

ここの<userName>とかは固定ではなくて可変にしたい。これをザックリ実装したらこんな感じになった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
val route = get {
pathEndOrSingleSlash {
complete(HttpEntity(ContentTypes.`application/json`, "{\"message\": \"API is ready\"}"))
} ~ pathPrefix("users") {
// users/YoshinoriN
pathPrefix(".+".r) { userName =>
// users/YoshinoriN
// users/YoshinoriN/
pathEndOrSingleSlash {
complete(HttpResponse(200, entity = "/users/YoshinoriN or /users/YoshinoriN/"))
} ~
// users/YoshinoriN/activity
path("activity") {
// users/YoshinoriN/activity?from=<number>
parameters('from.as[Int]) { from =>
complete(HttpResponse(200, entity = "/users/YoshinoriN/activity?from=xxxx"))
}
} ~ // users/YoshinoriN/statistics
path("statistics") {
complete(HttpResponse(200, entity = "/users/YoshinoriN/statistics"))
}
}
}
}

おわり。

参考


[Akka-HTTP]ルーティングDSLの基本となるPathMatcherのまとめ