snaplet-rest alternatives and similar packages
Based on the "snaplet" category.
Alternatively, view snaplet-rest alternatives based on common mentions on social networks and blogs.
-
snaplet-mongodb-minimalistic
Minimalistic MongoDB Snaplet. -
snaplet-purescript
Automatic (re)compilation of Purescript code -
snaplet-wordpress
A haskell library that communicates with wordpress over its api. -
snaplet-amqp
A snaplet providing a convenience interface to the Haskell AMQP package. -
snaplet-hslogger
An HSLogger snaplet for snap (snap's logging facilities are poor and not configurable). -
snaplet-mandrill
A snaplet for providing mandrill configuration and a convenience runner. -
snaplet-recaptcha
A ReCaptcha snaplet with connection sharing.
Static code analysis for 29 languages.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of snaplet-rest or a related project?
README
REST resources for the Snap framework.
import Data.CaseInsensitive (CI)
import Snap.Snaplet.Rest
As an example, let's translate the following datatype into a resource.
data User = User { user :: Username, name :: String, age :: Int }
deriveJSON ''User
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 { partName :: Maybe String, partAge :: Mabe 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
Because we derived JSON 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