Describes endpoints related to static assets (e.g.
Describes endpoints related to static assets (e.g. medias, scripts, stylesheets, etc.)
Provides vocabulary to describe endpoints that use Basic HTTP authentication.
Provides vocabulary to describe endpoints that use Basic HTTP authentication.
This trait works fine, but developers are likely to implement their own authentication mechanism, specific to their application.
Uses endpoints built-in error types:
Uses endpoints built-in error types:
- Invalid for client errors,
- and Throwable
for server error.
Both types of errors are serialized into a JSON array containing string error values.
A way to encode and decode values
A way to encode and decode values
Type of encoded values
Type of decoded values
A way to decode a From
value into a To
value.
A way to encode a From
value into a To
value
Algebra interface for describing endpoints made of requests and responses.
Algebra interface for describing endpoints made of requests and responses.
Requests and responses contain headers and entity.
/** * Describes an HTTP endpoint whose: * - request uses verb “GET”, * - URL is made of path “/foo”, * - response has no entity */ val example = endpoint(get(path / "foo"), emptyResponse)
This trait uses BuiltInErrors to model client and server errors.
Algebra interface for describing endpoints made of requests and responses.
Defines the error types used to model client and server errors.
Defines the error types used to model client and server errors.
The ClientErrors
type is used by endpoints to model errors coming
from the client (missing query parameter, invalid entity, etc.).
The ServerError
type is used by endpoints to model errors coming from
the server business logic.
The badRequest
and internalServerError
operations defined in Responses
define responses carrying entities of type ClientErrors
and ServerError
,
respectively.
Interpreters are expected to use the clientErrorsResponse
and serverErrorResponse
operations defined here to handle client and server errors, respectively.
Algebra interface for describing JSON entities in requests and responses.
Algebra interface for describing JSON entities in requests and responses.
/** * Describes an HTTP endpoint whose: * - request uses verb “GET”, * - URL is made of the segment “/user” followed by a `String` segment, * - response content type is JSON and contains a `User` */ val example = endpoint(get(path / "user" / segment[UUID]), jsonResponse[User])
Fixes both the JsonRequest
and JsonResponse
types to be Codec.
Partially applies the endpoints.algebra.JsonEntities algebra interface to fix the
JsonRequest
and JsonResponse
types to be JsonSchema
.
Provides a way to define endpoints that directly expose the low level APIs of the interpreters.
Provides a way to define endpoints that directly expose the low level APIs of the interpreters.
Using this trait is not recommended because endpoints defined using these methods miss the opportunity to share a consistent protocol between client and server interpreters. However, it can be useful for transitioning legacy code.
Example of endpoint definition:
val someEndpoint = endpoint(post(path, rawRequestEntity), rawResponseEntity)
Endpoint implementation:
someEndpoint.implementedBy { request => Ok(request.body.asText.getOrElse("Unable to decode request entity")) }
XMLHttpRequest call:
someEndpoint(xhr => "Foo") .map(response => println(response.responseText))
Algebra interface for describing endpoints such that one endpoint can handle several types of requests and responses.
Multiplexed request type
Algebra interface for describing URLs made of a path and a query string.
Algebra interface for describing URLs made of a path and a query string.
A path is itself made of segments chained together.
A query string is made of named parameters.
/** * Describes an URL starting with a segment containing “articles”, followed * by another `String` segment, and a query string containing * a mandatory `Lang` parameter named “lang”, and an * optional `Int` parameter named “page”. * * Examples of matching URLs: * * - /articles/kitchen?lang=fr * - /articles/garden?lang=en&page=2 */ val example = path / "articles" / segment[String]() /? (qs[Lang]("lang") & qs[Option[Int]]("page"))