2017-04-12 173 views
0

我有一个wai/warp应用程序。我如何处理邮寄请求?我有这个:在Haskell处理/ Warp处理POST请求

app :: Application 
app request respond = 
    respond $ case rawPathInfo request of 
     "/" -> responseFile status200 ............ 
     "/some_post_req/" -> ..... 

如何指定some_post_req必须是POST?

+1

我看到'Network.Wai'一个'requestMethod'功能 - 你将能够匹配这个结果? – ryachza

回答

0

wai-extraparseRequestBody可以让你得到你想要的请求体的数据:

(params, files) <- parseRequestBody lbsBackEnd request 

但是这并没有什么规定,要求必须是POST请求。请记住wai可能是相当低的级别,并且有更高级别的软件包。

servant想到了一个允许您在类型级别定义API的包。对于servant,你一定可以指定你期望的HTTP动词。请参阅here

0

它应该是作为比较的Network.Wai.requestMethodNetwork.Wai.methodPost结果一样简单:

app request respond 
    | requestMethod request == methodPost 
    = respond $ case rawPathInfo request of 
    {- handle POST routes -} 

    | otherwise 
    = {- handle other request methods -} 

由于是methodPostmethodGet,&Ç常数,你不妨使用它们,但Method是一个别名为ByteString,所以你也可以使用OverloadedStrings扩展:

{-# LANGUAGE OverloadedStrings #-} 

,然后要么与比较一个字符串文字:

requestMethod request == "POST" 

或模式匹配:

case requestMethod request of 
    "POST" -> {- … -} 
    "GET" -> {- … -} 
    …