liberator-mixin.hal.core

A liberator mixin to add HAL support to liberator.

In short:

  • Adds application/hal+json as a supported media type.
  • Adds support for JSON serialisation for maps and seqs for the HAL media type.
  • Adds support for halboy resource serialisation.
  • Adds a default handler responding with an empty HAL resource for :handle-not-found.
  • Adds a HAL error representation for use with the validation mixin.

Depends on:

Optionally extends:

JSON serialisation support

The JSON serialisation support for the application/hal+json media type uses the same underlying JSON encoder as the JSON mixin. If that mixin is configured with a custom JSON encoder, all application/hal+json responses will use the custom JSON encoder.

halboy Resource support

The halboy resource support will add a :discovery link to any returned resource and expects bidi :routes to be available in the context, containing a route named :discovery. The hypermedia mixin adds routes to the context so nothing further is needed if that mixin is in use.

hal-media-type

The HAL media type string.

with-exception-handler

(with-exception-handler)

Returns a mixin which adds a generic exception handler, logging the exception and returning an error representation masking the exception.

This mixin expects a :logger to be present on the resource. If no :logger is found, nothing will be logged.

with-forbidden-handler

(with-forbidden-handler)

with-hal-error-representation

(with-hal-error-representation)

Returns a mixin adding a HAL error representation factory function to the resource, at :error-representation, for use by other mixins, such as liberator-mixin.validation when they need to render errors.

The error representation factory function expects the context to include a :self href, an :error-id and an :error-context used in the resulting representation.

with-hal-media-type

(with-hal-media-type)

Returns a mixin to add the HAL media type to the available media types.

with-hal-mixin

(with-hal-mixin _)

with-not-found-handler

(with-not-found-handler)

with-unauthorized-handler

(with-unauthorized-handler)