2014-07-12 70 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 
    ...