RoutePattern
RoutePattern
defines a pattern for matching routes by examining both the HTTP method and the path. In addition to specifying a method, patterns contain segment patterns, which can consist of literals, integers, longs, and other segment types.
A RoutePattern
is composed of a Method
and a PathCodec
:
case class RoutePattern[A](method: Method, pathCodec: PathCodec[A])
To create a Route
we need to create a RoutePattern
and then bind it to a handler using the ->
operator:
import zio.http._
Routes(
Method.GET / "health-check" -> Handler.ok,
)
In the above example, Method.Get / "health-check"
represents a RoutePattern
used to match incoming requests with the appropriate path and method.
Building RoutePatterns​
Typically, the entry point for creating a route pattern is Method
:
// GET /users
val pattern: RoutePattern[Unit] =
Method.GET / "users"
To match a path segment, various methods like string
, int
, long
, and uuid
are available.
For example, let's enhance the previous example to match a user id of type Int
:
// GET /users/:user-id
val pattern2: RoutePattern[Int] =
Method.GET / "users" / int("user-id")
The type of the RoutePattern
becomes Int
because it matches a path segment of type Int
.
Multiple path segments can be matched by combining multiple PathCodec
values. Let's extend the example to match a post id of type String
:
// GET /users/:user-id/posts/:post-id
val pattern2: RoutePattern[(Int, String)] =
Method.GET / "users" / int("user-id") / "posts" / string("post-id")
With more path segments, the type of the RoutePattern
becomes a tuple of the types of the path segments, in this case, (Int, String).
Matching Methods​
The Method
data type represent an HTTP method, and it offers the following predefined HTTP methods: GET
, POST
, PUT
, DELETE
, PATCH
, DELETE
, TRACE
, OPTIONS
, HEAD
, TRACE
and CONNECT
.
The METHOD.ANY
is a wildcard method that matches any method.