如何使用 swagger2 和 servant 记录通用身份验证组合器
How are Generalized Authentication Combinators Documented with swagger2 and servant
我有一个自定义身份验证机制,我希望它与 servant-swagger 输出的 swagger 文档兼容。
data AuthUser = AuthUser
{ auth_user_id :: Int64
, auth_user_email :: Text
} deriving (Eq, Show, Generic)
type instance AuthServerData (AuthProtect "JWT") = AuthUser
这是一项授权 Header。我目前收到以下错误:
• No instance for (HasSwagger
(Servant.API.Experimental.Auth.AuthProtect "JWT"
Servant.API.Sub.:> Servant.API.Verbs.Get
'[Servant.API.ContentTypes.JSON] Int))
这条路线:
:<|> "todo" :> AuthProtect "JWT" :> ReqBody '[JSON] NewTodo :> Post '[JSON] Int64
是否有为通用验证编写 HasSwagger 实例的任何文档。
看起来 servant-swagger
只是还没有添加必要的实例来让它工作,可能是因为它仍然被标记为实验性的。如果您正在编写一个程序而不是一个库,那么您可以添加这个孤儿实例以使其工作:
{-# LANGUAGE ScopedTypeVariables #-}
instance HasSwagger sub => HasSwagger (AuthProtect tag :> sub) where
toSwagger _ = toSwagger (Proxy :: Proxy sub)
请注意,这是一个存根实例,它将在编译时成为 "work",但它不会在文档中生成任何关于身份验证的提及。如果你想要那样,你必须编写 toSwagger
的真正实现。如果您想这样做,the rest of the instances 可能是一个有用的起点。
我有一个自定义身份验证机制,我希望它与 servant-swagger 输出的 swagger 文档兼容。
data AuthUser = AuthUser
{ auth_user_id :: Int64
, auth_user_email :: Text
} deriving (Eq, Show, Generic)
type instance AuthServerData (AuthProtect "JWT") = AuthUser
这是一项授权 Header。我目前收到以下错误:
• No instance for (HasSwagger
(Servant.API.Experimental.Auth.AuthProtect "JWT"
Servant.API.Sub.:> Servant.API.Verbs.Get
'[Servant.API.ContentTypes.JSON] Int))
这条路线:
:<|> "todo" :> AuthProtect "JWT" :> ReqBody '[JSON] NewTodo :> Post '[JSON] Int64
是否有为通用验证编写 HasSwagger 实例的任何文档。
看起来 servant-swagger
只是还没有添加必要的实例来让它工作,可能是因为它仍然被标记为实验性的。如果您正在编写一个程序而不是一个库,那么您可以添加这个孤儿实例以使其工作:
{-# LANGUAGE ScopedTypeVariables #-}
instance HasSwagger sub => HasSwagger (AuthProtect tag :> sub) where
toSwagger _ = toSwagger (Proxy :: Proxy sub)
请注意,这是一个存根实例,它将在编译时成为 "work",但它不会在文档中生成任何关于身份验证的提及。如果你想要那样,你必须编写 toSwagger
的真正实现。如果您想这样做,the rest of the instances 可能是一个有用的起点。