Request
ZIO HTTP Request
is designed in the simplest way possible to decode HTTP Request into a ZIO HTTP request.
It supports all HTTP request methods (as defined in RFC2616 ) and headers along with custom methods and headers.
Creating a Request
Request
can be created with method
, url
, headers
, remoteAddress
and data
.
Creating requests using Request
is useful while writing unit tests.
The below snippet creates a request with default params, headers
as Headers.empty
, data
as Body.Empty
, remoteAddress
as None
:
import zio.http._
import zio._
Request(method = Method.GET, url = URL(Root))
// res0: Request = Request(
// version = Default,
// method = GET,
// url = URL(
// path = Path(flags = 3, segments = IndexedSeq()),
// kind = Relative,
// queryParams = QueryParams(map = Map()),
// fragment = None
// ),
// headers = Iterable(),
// body = Body.empty,
// remoteAddress = None
// )
Accessing the Request
body
to access the content of request as aBody
headers
to get all the headers in the Requestmethod
to access request methodurl
to access request URLremoteAddress
to access request's remote address if availableversion
to access the HTTP version
Creating and reading a Request with query params
Query params can be added in the request using url
in Request
, URL
stores query params as Map[String, List[String]]
.
The below snippet creates a request with query params: ?q=a&q=b&q=c
Request.get(url = URL(Root, queryParams = QueryParams("q" -> Chunk("a","b","c"))))
// res1: Request = Request(
// version = Default,
// method = GET,
// url = URL(
// path = Path(flags = 3, segments = IndexedSeq()),
// kind = Relative,
// queryParams = QueryParams(map = HashMap("q" -> IndexedSeq("a", "b", "c"))),
// fragment = None
// ),
// headers = Iterable(),
// body = Body.empty,
// remoteAddress = None
// )
url.queryParams
can be used to read query params from the request