我似乎无法在我的Mac上安装一些Haskell软件包(10.6.8).我第一次尝试了哈普斯塔克,它失败了,然后我尝试了Snap.
有时当我运行ghci时,我会遇到分段错误.
其他时候它的工作原理如下:
GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>
Run Code Online (Sandbox Code Playgroud)
在尝试获取Snap时:
....
....
....
Loading package vector-0.10.0.1 ... linking ... done.
Loading package zlib-0.5.4.0 ... linking ... done.
Loading package zlib-bindings-0.1.1.3 ... linking ... done.
Loading package zlib-enum-0.2.3 ... linking ... done.
Loading package snap-core-0.9.3.1 ... linking ... done.
Loading package snap-server-0.9.3.3 ... linking ... done.
Loading package …Run Code Online (Sandbox Code Playgroud) 我知道它很少使用,但是可以在Snap中访问客户端证书吗?
如果没有,是否可以使用不同的Web堆栈?
我有一些旧的代码,它在Web API上公开服务,它基本上用于HTTP动词.我想将此项目移至使用超媒体控件(HATEOAS).我想知道是否有任何库已经支持根据HAL或JSON-LD规范在子资源的资源表示中嵌入链接.我用Google搜索了但我找不到任何东西.很高兴知道Yesod,Snap或Happstack等成熟项目是否计划支持此功能?
编辑:为了澄清,我对REST成熟度模型的第3级感兴趣
上周,我们三个人花了两天时间尝试使用Happstack构建一个简单的Web应用程序.我们关注的一个问题是身份验证,看起来曾经有一个Happstack.Auth看起来非常好的软件包.不幸的是原来的项目似乎已经被放弃了,虽然有一个fork,但是我们无法构建fork.
人们建议在Happstack中进行身份验证有哪些替代方案?是否happstack-auth可行?
我正在尝试使用Happstack,Heist和Web路由编写应用程序服务器,但是我很难弄清楚如何让拼接访问不是源自我的应用程序的monad堆栈的值.
出现这种情况有两种情况:
请考虑以下尝试提供以下URL的示例程序:
由于参数显示在URL路径而不是查询字符串中,因此它将通过Web路由而不是来自ServerPartT monad提取.但是,从那里开始,没有明确的方法将参数放在拼接可以看到的位置,因为它们只能访问应用程序monad.
将ReaderT粘贴在monad堆栈上的明显解决方案有两个问题:
从Snap文档中窥视,看起来Snap通过有效地将它们复制到查询字符串中来处理URL路径中的参数,从而回避问题.但这不是Happstack和网络路由的选择,此外,有两种不同的方式让URL指定相同的值会让我觉得安全性是一个坏主意.
那么,是否有一种"正确"的方式将非应用程序monad请求数据公开给拼接,或者我是否需要放弃Heist并使用像Blaze-HTML这样的东西而不是问题?我觉得我错过了一些明显的东西,但无法弄清楚它可能是什么.
示例代码:
{-# LANGUAGE TemplateHaskell #-}
import Prelude hiding ((.))
import Control.Category ((.))
import Happstack.Server (Response, ServerPartT, nullConf, ok, simpleHTTP)
import Happstack.Server.Heist (render)
import Text.Boomerang.TH (derivePrinterParsers)
import Text.Templating.Heist (Splice, bindSplices, emptyTemplateState, getParamNode)
import Text.Templating.Heist.TemplateDirectory (TemplateDirectory, newTemplateDirectory')
import Web.Routes (RouteT, Site, runRouteT)
import Web.Routes.Boomerang (Router, anyString, boomerangSite, int, lit, (<>), (</>))
import Web.Routes.Happstack (implSite)
import qualified Data.ByteString.Char8 as C …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过开发web-app-ish服务来更熟悉Haskell.
假设我正在开发一个Web服务器,我希望在请求之间保持持久状态; 例如,一个柜台.什么是Haskell的做事方式?
我在Google搜索中遇到了这个讨论.建议的解决方案看起来像是不该做的一个很好的例子.
我的一个想法是让请求处理程序接受一个MVar:
requestHandler :: MVar State -> IO (Maybe Response)
Run Code Online (Sandbox Code Playgroud)
注册处理程序时,可以使用在main中创建的MVar进行curry.
肯定有更好的办法.我不禁想到我正在以非功能性的方式解决这个问题.
谢谢!
我可以在Yesod或任何其他具有可比数据库功能的Haskell Web框架中进行长时间轮询吗?
确切地说,我想延迟HTTP响应,直到发生一些有趣的事情.还应该有一个超时,在此之后客户端将被提供响应,说"没有发生",然后客户端将发出相同的请求.
为了让生活更加复杂,我想到的应用程序是通过HTTP/HTML5和MIDP客户端的一个非常紧凑的UDP协议提供所有的东西.来自任一协议的事件都可以在任一协议中释放响应
TIA,阿德里安.
我有这个代码(在happstack里面,但可能只是IO monad):
accountHandler conn = do
sessionId <- optional $ readCookieValue "sessionId"
case sessionId of
Nothing -> seeOther ("/" :: String) $ toResponse ()
Just s -> do
result <- loggedInUserId conn s
case result of
Just userId -> seeOther ("/account/" ++ unUserId userId) $ toResponse ()
Nothing -> seeOther ("/" :: String) $ toResponse ()
Run Code Online (Sandbox Code Playgroud)
我想删除嵌套的case语句并写下如下内容:
accountHandler conn = do
let action = do
sessionId <- optional $ readCookieValue "sessionId"
userId <- loggedInUserId conn sessionId
return $ seeOther ("/account/" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Happstack创建一个JSON REST api.它应该允许带有JSON主体的POSTS.我怎样才能做到这一点?happstack的API中的所有函数似乎都根据参数名称查找.它认为身体总是经过网址编码.
如果使用Happstack是不可能的,我应该使用哪个框架?
我似乎无法找到有关此主题的任何文档,任何博客或其他资源.
从我到目前为止看来似乎有所支持,FastCGI但该项目已经有4年的承诺.然后mod_proxy可能会被使用.也许您可以将Happstack应用程序作为守护程序运行,该守护程序可以自行处理所有请求.
我只是在这里猜测,看看有经验的人说的真是太好了!