2017-04-12 218 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" -> {- … -} 
    …