airship-0.1.0.0: A Webmachine-inspired HTTP library

Safe HaskellNone
LanguageHaskell2010

Airship.Resource

Synopsis

Documentation

data Resource s m Source

Constructors

Resource 

Fields

allowMissingPost :: Handler s m Bool

Whether to allow HTTP POSTs to a missing resource. Default: false.

allowedMethods :: Handler s m [Method]

The set of HTTP methods that this resource allows. Default: GET and HEAD. If a request arrives with an HTTP method not included herein, 501 Not Implemented is returned.

contentTypesAccepted :: Handler s m [(MediaType, Handler s m ())]

An association list of MediaTypes and Handler actions that correspond to the accepted Content-Type values that this resource can accept in a request body. If a Content-Type header is present but not accounted for in contentTypesAccepted, processing will halt with 415 Unsupported Media Type. Otherwise, the corresponding Handler action will be executed and processing will continue.

contentTypesProvided :: Handler s m [(MediaType, Webmachine s m (ResponseBody m))]

An association list of MediaType values and ResponseBody values. The response will be chosen by looking up the MediaType that most closely matches the Content-Type header. Should there be no match, processing will halt with 406 Not Acceptable.

deleteCompleted :: Handler s m Bool

When a DELETE request is enacted (via a True value returned from deleteResource), a False value returns a 202 Accepted response. Returning True will continue processing, usually ending up with a 204 No Content response. Default: False.

deleteResource :: Handler s m Bool

When processing a DELETE request, a True value allows processing to continue. Returns 500 Forbidden if False. Default: false.

entityTooLarge :: Handler s m Bool

Returns 413 Request Entity Too Large if true. Default: false.

forbidden :: Handler s m Bool

Checks if the given request is allowed to access this resource. Returns 403 Forbidden if true. Default: false.

generateETag :: Handler s m (Maybe ETag)

If this returns a non-Nothing ETag, its value will be added to every HTTP response in the ETag: field.

implemented :: Handler s m Bool

Checks if this resource has actually implemented a handler for a given HTTP method. Returns 501 Not Implemented if false. Default: true.

isAuthorized :: Handler s m Bool

Returns 401 Unauthorized if false. Default: true.

isConflict :: Handler s m Bool

When processing PUT requests, a True value returned here will halt processing with a 409 Created.

knownContentType :: Handler s m Bool

Returns 415 Unsupported Media Type if false. We recommend you use the contentTypeMatches helper function, which accepts a list of MediaType values, so as to simplify proper MIME type handling. Default: true.

lastModified :: Handler s m (Maybe UTCTime)

In the presence of an If-Modified-Since header, returning a Just value from lastModifed allows the server to halt with 304 Not Modified if appropriate.

languageAvailable :: Handler s m Bool

If an Accept-Language value is present in the HTTP request, and this function returns False, processing will halt with 406 Not Acceptable.

malformedRequest :: Handler s m Bool

Returns 400 Bad Request if true. Default: false.

movedPermanently :: Handler s m (Maybe ByteString)

When processing a resource for which resourceExists returned False, returning a Just value halts with a 301 Moved Permanently response. The contained ByteString will be added to the HTTP response under the Location: header.

movedTemporarily :: Handler s m (Maybe ByteString)

Like movedPermanently, except with a 307 Moved Temporarily response.

multipleChoices :: Handler s m Bool

When handling a PUT request, returning True here halts processing with 300 Multiple Choices. Default: False.

previouslyExisted :: Handler s m Bool

When processing a request for which resourceExists returned False, returning True here allows the movedPermanently and movedTemporarily functions to process the request.

processPost :: Handler s m (PostResponse s m)

When handling POST requests, the value returned determines whether to treat the request as a PUT, a PUT and a redirect, or a plain POST. See the documentation for PostResponse for more information. The default implemetation returns a PostProcess with an empty handler.

resourceExists :: Handler s m Bool

Does the resource at this path exist? Returning false from this usually entails a 404 Not Found response. (If allowMissingPost returns True or an If-Match: * header is present, it may not).

serviceAvailable :: Handler s m Bool

Returns 503 Service Unavailable if false. Default: true.

uriTooLong :: Handler s m Bool

Returns 414 Request URI Too Long if true. Default: false.

validContentHeaders :: Handler s m Bool

Returns 501 Not Implemented if false. Default: true.

Instances

data PostResponse s m Source

Used when processing POST requests so as to handle the outcome of the binary decisions between handling a POST as a create request and whether to redirect after the POST is done. Credit for this idea goes to Richard Wallace (purefn) on Webcrank.

Constructors

PostCreate [Text]

Treat this request as a PUT.

PostCreateRedirect [Text]

Treat this request as a PUT, then redirect.

PostProcess (Handler s m ())

Process as a POST, but don't redirect.

PostProcessRedirect (Handler s m ByteString)

Process and redirect.

serverError :: Handler m s a Source

A helper function that terminates execution with 500 Internal Server Error.

defaultResource :: Resource s m Source

The default Airship resource, with "sensible" values filled in for each entry. You construct new resources by extending the default resource with your own handlers.