一种迭代分页响应 Http4 的简单方法
A simple way to iterate over paginated reponse Http4s
我正在尝试在不使用字符串插值的情况下处理分页,并且还利用了 http4s 功能。
我遇到了 OptionalQueryParamDecoderMatcher
,但我不知道它是否适合我的用例。
因此,响应包含 header,其中包含有关 Link 属性中页数的信息 它已将 rel 设置为 prev、next、first 或 last。如下:
<https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=1&per_page=3>; rel="prev", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=3&per_page=3>; rel="next", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=1&per_page=3>; rel="first", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=3&per_page=3>; rel="last"
我的想法是获取最后指定的页数(即总页数),然后自增1得到所有结果。
我想到的第一种方法是字符串插值,但我相信会有更简单的方法来实现它,尤其是利用 http4s。
谁能赐教一下?我愿意接受你的建议。
注意:httpRoute 指定为本示例:
val routes = HttpRoutes.of[IO] {
case GET -> Root /"projects"/project_name/"Details"
}
如in documentation所述,您可以使用查询匹配器从查询中提取数据。
object Page extends OptionalQueryParamDecoderMatcher[Int]("page")
object PerPage extends OptionalQueryParamDecoderMatcher[Int]("per_page")
val routes = HttpRoutes.of[IO] {
case GET -> Root / "projects" / project_name / "Details" :? Page(page) :? PerPage(perPage) =>
...
}
OptionalQueryParamDecoderMatcherand
确实是正确的用法。
(就个人而言,我更喜欢使用 Tapir 或 Endpoint4s 之类的东西来定义 API(出于多种原因,我发现它更明智),然后将其解释为 HTTP4。这是避免 HTTP4 的许多特性的一种非常简单的方法或 Akka HTTP)。
我正在尝试在不使用字符串插值的情况下处理分页,并且还利用了 http4s 功能。
我遇到了 OptionalQueryParamDecoderMatcher
,但我不知道它是否适合我的用例。
因此,响应包含 header,其中包含有关 Link 属性中页数的信息 它已将 rel 设置为 prev、next、first 或 last。如下:
<https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=1&per_page=3>; rel="prev", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=3&per_page=3>; rel="next", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=1&per_page=3>; rel="first", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=3&per_page=3>; rel="last"
我的想法是获取最后指定的页数(即总页数),然后自增1得到所有结果。 我想到的第一种方法是字符串插值,但我相信会有更简单的方法来实现它,尤其是利用 http4s。
谁能赐教一下?我愿意接受你的建议。
注意:httpRoute 指定为本示例:
val routes = HttpRoutes.of[IO] {
case GET -> Root /"projects"/project_name/"Details"
}
如in documentation所述,您可以使用查询匹配器从查询中提取数据。
object Page extends OptionalQueryParamDecoderMatcher[Int]("page")
object PerPage extends OptionalQueryParamDecoderMatcher[Int]("per_page")
val routes = HttpRoutes.of[IO] {
case GET -> Root / "projects" / project_name / "Details" :? Page(page) :? PerPage(perPage) =>
...
}
OptionalQueryParamDecoderMatcherand
确实是正确的用法。
(就个人而言,我更喜欢使用 Tapir 或 Endpoint4s 之类的东西来定义 API(出于多种原因,我发现它更明智),然后将其解释为 HTTP4。这是避免 HTTP4 的许多特性的一种非常简单的方法或 Akka HTTP)。