Clojure:alumbra(GraphQL 组件集)
graphql-github-io-zh-Hans生态项目与库
Clojure:alumbra(GraphQL 组件集)
简介
alumbra 是一套可复用的 Clojure GraphQL 组件,遵循 alumbra.spec 所定义的数据结构。它提供了一种简洁、声明式的方式来构建 GraphQL 服务端,并可与 claro 等解析库无缝集成。
功能特性
- 基于 Clojure 数据结构定义 GraphQL schema
- 兼容 GraphQL 标准查询语法
- 与 Claro 的
Resolvable协议集成,方便实现字段解析 - 可快速构建 HTTP 服务(示例中使用 Aleph)
安装依赖
在 project.clj 或 deps.edn 中添加 alumbra 依赖:
clojure
[alumbra "0.3.11"] ; 请以实际版本为准
同时需要引入示例中的 claro 和 aleph。
快速开始
以下示例展示如何使用 alumbra 创建一个简单的 GraphQL 服务。
1. 定义 Schema
使用 GraphQL SDL 字符串声明类型:
clojure
(def schema
"type Person { name: String!, friends: [Person!]! }
type QueryRoot { person(id: ID!): Person, me: Person! }
schema { query: QueryRoot }")
2. 实现解析逻辑
通过实现 data/Resolvable 协议来解析 Person 类型:
clojure
(defrecord Person [id]
data/Resolvable
(resolve! [_ _]
{:name (str "Person #" id)
:friends (map ->Person (range (inc id) (+ id 3)))}))
定义根查询对象:
clojure
(def QueryRoot
{:person (map->Person {})
:me (map->Person {:id 0})})
3. 创建 HTTP 处理器
使用 alumbra 的 handler 函数生成应用处理器:
clojure
(def app
(alumbra/handler
{:schema schema
:query QueryRoot}))
4. 启动服务
可以借助 Aleph 启动 HTTP 服务器:
clojure
(defonce my-graphql-server
(aleph.http/start-server #'app {:port 3000}))
5. 发起查询
服务启动后,通过 curl 发送 GraphQL 查询:
bash
$ curl -XPOST "http://0:3000" -H'Content-Type: application/json' -d'{
"query": "{ me { name, friends { name } } }"
}'
返回结果如下:
json
{"data":{"me":{"name":"Person #0","friends":[{"name":"Person #1"},{"name":"Person #2"}]}}}
相关项目
- alumbra.spec:定义 alumbra 组件所依赖的数据结构规范
- claro:Clojure 的解析库,用于处理字段级解析
总结
alumbra 提供了一套轻量、模块化的 GraphQL 工具,适合在 Clojure 生态中快速搭建类型安全、可组合的 GraphQL API。通过结合 Claro 等库,可以进一步简化数据解析流程。
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
