Yesod路由解析的解释

时间:2014-07-12 23:23:12

标签: haskell yesod

我为Yesod建立了一个库,我希望它能为信用卡处理器Stripe提供一个界面。 (我计划很快发布它。我放弃亚马逊,因为它的API记录很差......)

我创建了一个子网站和类型类来处理Stripe API所需的路由。我设法弄清楚"怎么"我需要做什么,但我不太了解它。

子网站的路由定义为:

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

并且父级的路由定义为:

/payment/stripe   StripeR Stripe appStripe

现在,我对这条线的实际含义感到好奇。为了比较,大多数其他路线定义如下:

/questions       QuestionsR GET

据我了解,路由生成器生成QuestionsR数据类型,并将/questions发送给getQuestionsR。但是路由生成器到底做了什么呢

/payment/stripe   StripeR Stripe appStripe

我认为必须创建StripeR类型。我知道appStripe :: App -> Stripe。但是这些东西扮演什么角色?解析器如何确保StripeRStripe路由中的一个作为参数?幕后发生了什么,GET案例是另一种模式的特例?

1 个答案:

答案 0 :(得分:1)

GET并不是我理解的特殊情况,因为我们明确创建了一个子网站资源。

有问题的行

/payment/stripe StripeR Stripe appStripe

我们将调用/ payment / stripe中的资源StripeR,它是Stripe(这是一个子网站),可以使用appStripe函数进行访问。< / p>

例如,当您为子网站定义基础时,您可以执行类似

的操作
data Stripe = Stripe

但你也可以这样做

data Stripe = Stripe {
  getStripeConfig :: String
}

然后在主站点中,您可以在处理程序中执行

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