在servant/阿威应用程序中,请求主体可以使用组合符获得,例如ReqBody '[JSON] Book
。在这种情况下,主体被提取为Book
类型的值。不清楚如何在不将其转换为类型的情况下访问原始请求主体。
可能需要原始请求正文来验证其签名。一个例子是在stripe webhook(即stripe.com)中,可能需要原始请求正文来进行验证。www.example.com上有一个很好的库hackage.org(stripe-hs),它可以进行此验证,但没有解释如何获得原始请求正文。
我想一种方法是通过中间件,在中间件中请求主体可以被一次性使用。还有其他方法吗?
2条答案
按热度按时间idv4meu81#
最后,我创建了一个新的数据类型
data WebhookJSON
,并为该数据类型创建了相应的MimeUnrender和MimeRender示例。就像对JSON
类型所做的那样。我在组合子中使用了该数据类型,例如ReqBody '[WebhookJSON] ByteString
。希望(我还没有测试过),这是一种访问原始请求主体的方法。mec1mxoz2#
在7puns的自我回答中添加:
值得注意的是,这绕过了Servant的许多奇妙的自动类型机制,只有当您绝对需要以字符串形式访问
Content-Type: application/json
请求的原始主体时,它才真正有用(例如,计算传入webhook的安全签名)。