仆人
Servant 是一个用于在类型级别声明 API 的库,然后:
- 写服务器(这部分服务员可以被认为是一个 Web 框架),
- 获取客户端函数(在 haskell 中),
- 为其他编程语言生成客户端函数,
- 生成 Web 应用程序的文档
- 和更多…
Servant 拥有简洁而强大的 API。一个简单的 API 可以用很少的代码行编写:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
import Data.Text
import Data.Aeson.Types
import GHC.Generics
import Servant.API
data SortBy = Age | Name
data User = User {
name::String,
age::Int
} deriving (Eq, Show, Generic)
instance ToJSON User -- automatically convert User to JSON
现在我们可以声明我们的 API:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
其中声明我们希望使用类型为 SortBy
的查询参数 sortby
将/users
暴露给 GET
请求,并在响应中返回 User
类型的 JSON。
现在我们可以定义处理程序:
-- This is where we'd return our user data, or e.g. do a database lookup
server::Server UserAPI
server = return [User "Alex" 31]
userAPI::Proxy UserAPI
userAPI = Proxy
app1 :: Application
app1 = serve userAPI server
侦听端口 8081
并为我们的用户 API 提供服务的主要方法:
main::IO ()
main = run 8081 app1
注意, Stack 有一个模板用于在 Servant 中生成基本 API,这对于快速启动和运行非常有用。