2014-07-12 68 views
2

我正在爲Yesod建立一個庫,我希望它能爲信用卡處理器Stripe提供一個接口。 (我計劃很快發佈它,因爲它的記錄不完善,我放棄了亞馬遜...)Yesod路由解析的解釋

我創建了一個子網站和類型類來處理Stripe API所需的路由。我設法弄清了我需要做什麼的「如何」,但我不太明白。

子網站有通過定義路線:

mkYesodSubData "Stripe" [parseRoutes| 
    /charge/#StripeId  ChargeR POST 
    /customer/#StripeId CustomerR POST 
|] 

和家長有定義爲路線:

/payment/stripe StripeR Stripe appStripe 

現在,我很好奇這行,其實就是。爲了進行比較,最其它途徑被定義,如:

/questions  QuestionsR GET 

據我明白,路徑產生器產生QuestionsR數據類型,並調度/questionsgetQuestionsR。但究竟什麼是路線產生與

/payment/stripe StripeR Stripe appStripe 

這樣做,我想這一定要建立一個StripeR類型。我知道appStripe :: App -> Stripe。但是這些東西扮演什麼角色?解析器如何知道確保StripeRStripe路由之一作爲參數?幕後發生了什麼,並且GET案件是另一種模式的特例?

+1

選中此項:[Yesod和子網站:一個無腦](http://monoid.se/haskell/yesod-and-subsites/) ;這是:[Yesod Book - 創建子網站](http://www.yesodweb.com/book/creating-a-subsite);這更深的視線:[Yesod書的基礎 - 路由](http://www.yesodweb.com/book/basics) –

+0

你的第一個鏈接似乎路由到垃圾郵件現在,僅供參考@GabrielRiba – Neikos

+0

@Neikos我很抱歉鏈接,但那裏有一些有趣的東西。網絡發佈商可能不會續訂互聯網域名。這裏是舊的東西:http://archive.is/20130418103559/monoid.se/haskell/yesod-and-subsites/ –

回答

1

根據我的理解,GET並不是一個特例,因爲我們明確地創建了一個子網站的資源。

有問題的行

/payment/stripe StripeR Stripe appStripe

說,在/支付/條紋的資源,我們要調用StripeR,這是一個Stripe(這是一個子網站),可與appStripe函數訪問。

例如,當您爲子網站定義你的基礎,你這樣做

data Stripe = Stripe 

但你也可以做

data Stripe = Stripe { 
    getStripeConfig :: String 
} 

然後在主站點你共同ULD做的處理器

handler :: Handler Html 
handler = do 
    app <- getYesod 
    let stripeConfig = getStripeConfig $ appStripe app 
    ...