2014-07-12 4 views
2

Yesod 용 라이브러리를 구축 중이며 신용 카드 프로세서 인 Stripe 용 인터페이스가 공개됩니다. (곧 출시 할 계획입니다. API가 제대로 문서화되지 않았기 때문에 Amazon에서 포기했습니다 ...)Yesod 경로 구문 분석에 대한 설명

Stripe API에 필요한 경로를 처리하기 위해 하위 사이트와 typeclass를 만들었습니다. 나는 내가해야 할 일의 "방법"을 알아낼 수 있었지만, 나는 그것을 이해하지 못했다.

하위 사이트에 의해 정의 된 경로가 있습니다

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

를 부모로 정의 경로가 있습니다

/payment/stripe StripeR Stripe appStripe 

지금, 나는이 라인은 실제로 무엇을 의미하는지에 대해 궁금합니다.

/questions  QuestionsR GET 

는 지금까지 내가 이해, 경로 발생기는 QuestionsR 데이터 유형을 생성하고, getQuestionsR-/questions를 전달합니다 : 같은 비교를 위해, 대부분의 다른 경로가 정의되어 있습니다. 그러나 정확히 나는 그것이 StripeR 유형을 생성해야 가정

/payment/stripe StripeR Stripe appStripe 

로하고 경로 생성기 것입니다. 그리고 저는 그걸 알고 있습니다 appStripe :: App -> Stripe. 그러나 이러한 일이 어떤 역할을합니까? 구문 분석기는 StripeRStripe 경로 중 하나를 인수로 사용한다는 것을 어떻게 알 수 있습니까? 배후에서 어떤 일이 벌어지고 있으며, 다른 패턴의 특별한 경우는 GET입니까?

+1

[Yesod 및 하위 사이트 : no-brainer] (http://monoid.se/haskell/yesod-and-subsites/) ; 및 이것 : [Yesod Book - 하위 사이트 만들기] (http://www.yesodweb.com/book/creating-a-subsite); 그리고 더 깊은 광경을 위해 : Yesod book basics - routing] (http://www.yesodweb.com/book/basics) –

+0

첫 번째 링크가 스팸 메일로 바뀐 것 같습니다. FYI @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 
} 

을 할 수있는 뭔가가 다음 마스터 사이트에 당신이 자민련은에서 할 공동 수행 처리기

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