Haskell:mu-haskell(GraphQL 服务端)
graphql-github-io-zh-Hans生态项目与库
Haskell:mu-haskell(GraphQL 服务端)
所属分类:生态项目与库
简介
Mu-Haskell 是一个用于构建微服务(gRPC、HTTP)和 GraphQL API 的 Haskell 库。它允许在类型层面表示 GraphQL schema,并且这些类型级表示能够从 schema 文件自动生成。
项目主页:https://higherkindness.io/mu-haskell/
GitHub 仓库:https://github.com/higherkindness/mu-haskell
示例
以下是一个 GraphQL 服务端的示例实现,其中 schema 的类型级表示是自动生成的:
haskell
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
-- imports omitted for brevity...
graphql "Library" "library.graphql" -- all the magic happens here! 🪄🎩
-- ... a bit more code...
libraryServer :: SqlBackend -> ServerT ObjectMapping i Library ServerErrorIO _
libraryServer conn =
resolver
( object @"Book"
( field @"id" bookId,
field @"title" bookTitle,
field @"author" bookAuthor,
field @"imageUrl" bookImage
),
object @"Author"
( field @"id" authorId,
field @"name" authorName,
field @"books" authorBooks
),
object @"Query"
( method @"authors" allAuthors,
method @"books" allBooks
),
object @"Mutation"
( method @"newAuthor" newAuthor,
method @"newBook" newBook
),
object @"Subscription"
(method @"allBooks" allBooksConduit)
)
where
bookId :: Entity Book -> ServerErrorIO Integer
bookId (Entity (BookKey k) _) = pure $ toInteger k
-- ... more resolvers...
代码中的 graphql 宏负责从 library.graphql 文件自动生成类型级 schema 表示,使服务端能够以类型安全的方式实现 resolver。随后通过 resolver、object、field、method 等组合子定义对象类型(如 Book、Author)以及操作(查询、变更、订阅)。
相关链接
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
