name: snaplet-rest version: 0.1.0 homepage: http://github.com/zimothy/snaplet-rest license: MIT license-file: LICENSE author: Timothy Jones maintainer: Timothy Jones copyright: (c) 2013 Timothy Jones category: Web build-type: Simple cabal-version: >=1.10 synopsis: REST resources for the Snap web framework description: REST resources for the Snap framework. . As an example, let's translate the following datatype into a resource. . > data User = User Username String Int > > type Username = CI String . We need a type to represent changes to the resource. This 'partial' type indicates what properties to change: either the name, the age, or both. . > data UserPart = UserPart (Maybe String) (Maybe Int) . This type also acts as a search mechanism: we can search by names, ages, or both. We can use either a username or a @UserPart@ search to find users, and define a function to convert URL query string parameters to this search. . > type UserId = Either Username UserPart > > userIdFromParams :: Params -> Maybe UserId . Now we have the pieces required to define our CRUD behaviour. . > createUser :: User -> AppHandler () > > readUser :: UserId -> AppHandler [User] > > updateUser :: UserId -> UserPart -> AppHandler Bool > > deleteUser :: UserId -> AppHandler Bool . If we've implemented Aeson instances, we can add JSON as a media format without having to define these manually. Once the behaviour is attached to the resource, it can be served in the handler. . > serveUser :: AppHandler () > serveUser = serveResource $ resource > & addMedia jsonInstances > & setCreate createUser > & setRead readUser > & setUpdate updateUser > & setDelete deleteUser > & setFromParams userIdFromParams library hs-source-dirs: src ghc-options: -Wall default-language: Haskell2010 default-extensions: MultiParamTypeClasses OverloadedStrings other-extensions: FlexibleInstances IncoherentInstances OverlappingInstances Rank2Types TupleSections exposed-modules: Snap.Snaplet.Rest Snap.Snaplet.Rest.Config Snap.Snaplet.Rest.FromRequest Snap.Snaplet.Rest.Resource other-modules: Snap.Snaplet.Rest.Failure Snap.Snaplet.Rest.FromRequest.Internal Snap.Snaplet.Rest.Media Snap.Snaplet.Rest.Options Snap.Snaplet.Rest.Proxy Snap.Snaplet.Rest.Resource.Builder Snap.Snaplet.Rest.Resource.Internal Snap.Snaplet.Rest.Resource.Media Snap.Snaplet.Rest.Serve build-depends: aeson >= 0.6.2 && < 0.7, base >= 4.6.0 && < 4.7, blaze-builder >= 0.3.1 && < 0.4, bytestring >= 0.10.0 && < 0.11, case-insensitive >= 1.0.0 && < 1.1, http-media >= 0.1.0 && < 0.2, lens >= 3.9.0 && < 3.10, mtl >= 2.1.2 && < 2.2, snap >= 0.13.0 && < 0.14, snap-accept >= 0.1.0 && < 0.2, snap-core >= 0.9.4 && < 0.10, text >= 0.11.3 && < 0.12, utf8-string >= 0.3.7 && < 0.4, xmlhtml >= 0.2.3 && < 0.3 source-repository head type: git location: git://github.com/zimothy/snaplet-rest.git