Mar*_*rko 26 rest service haskell
我想在一个应该很适合它的小项目上尝试Haskell.我想将它用作小型ajax应用程序的后端.
Haskell后端应该能够进行身份验证(基本,表单,等等......),跟踪用户会话(除了用户名之外没有太多数据),并根据uri和请求类型向处理程序发送请求.它还应该能够序列化对xml和json格式的响应,具体取决于请求参数.
我认为处理程序非常适合Haskell,因为该服务基本上是无状态的,但我不知道从哪个故事开始.
搜索hackage并没有给我太多暗示.
优选纯haskell服务器的解决方案.
Mtn*_*ark 16
我最近写了一个内部使用的生产质量Web服务.我使用了以下包:
另外,对于不同的项目,我也使用:
这些都不是Haskell可用的最高级别组件,但它们都非常可行且相当完整.我避免使用更高级别的抽象,因为我需要将其放入现有的更大系统中,这些包就像我在其他Web服务项目中使用的类似组件一样工作.
我作为Apache2 w/mod_fcgid的基于fastCGI的处理程序运行该服务.这似乎是一种可靠而有效的设置.我想一个基于Haskell的服务器,与服务一起编译可能会更快,但这非常合理,只需要很少的工作.我在四CPU,2.6GHz,Linux服务器上每秒获得> 1,400个请求.
有几个Haskell纯服务器.大多数都有自己的服务代码API,尽管它们都很相似.看一眼:
这可能有很多东西可以咀嚼.让我们知道怎么回事!
同时,如果您想了解更多信息,可以访问HaskellWiki.
mrs*_*eve 11
它现在是2011年5月,只是对当前趋势的更新.
我认为今天的大多数Web开发都是使用yesod或snap框架工作完成的.两者都非常好,非常好发展(感谢所有参与的人!!).还有包装包装.
我的小REST示例(或者是非常好的服务器).(好吧也许这个例子不是一个真正的宁静服务器,但它显示了你如何处理GET/PUT请求,其余的由你决定...)
如果在浏览器中打开http:// localhost:8000/mytest,则会显示"获取请求".如果您使用rest-client(也是localhost:8000/mytest)发出PUT请求,请求正文的内容将存储在"/tmp/restrq.txt"中.
此代码是Snap-Framework的Site.hs文件的一部分:
- | Constants
tempFilePath :: String
tempFilePath = "/tmp/restrq.txt"
-- | Helper Functions
-- Bytestring Conversion
strictToLazy :: B.ByteString -> BL.ByteString
strictToLazy x
| B.null x = BL.Empty
| otherwise = BL.Chunk x BL.Empty
lazyToStrict :: BL.ByteString -> B.ByteString
lazyToStrict = B.concat . BL.toChunks
getRequestString :: MonadSnap m => m B.ByteString
getRequestString = do message <- getRequestBody
return (lazyToStrict message)
-- | Action for PUT request
action :: Application ()
action = do message <- getRequestString
liftIO $ B.writeFile tempFilePath (B8.append (B8.pack "--- REST BODY ---\n") message)
-- | /mytest (GET and PUT requests possible)
mytest :: Application ()
mytest = method GET (writeBS "Get request") <|> method PUT action
-- | The main entry point handler.
site :: Application ()
site = route [ ("/", index)
, ("/mytest", mytest)
]
<|> serveDirectory "resources/static"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10766 次 |
最近记录: |