Erlang:graphql-erlang(GraphQL 实现)
graphql-github-io-zh-Hans生态项目与库
概述
graphql-erlang 是一个用 Erlang 语言实现的 GraphQL 服务端库,为 Erlang/OTP 生态提供了完整的 GraphQL 查询解析、校验与执行能力。项目由 shopgun 团队维护,基于 Erlang 的函数式编程模型构建,能够与现有 OTP 应用无缝集成。
核心信息
| 条目 | 内容 |
|---|---|
| 项目名称 | graphql-erlang |
| 项目简介 | 面向 Erlang 的 GraphQL 实现 |
| 源码仓库 | https://github.com/shopgun/graphql-erlang |
| 维护组织 | shopgun |
技术特点
- 纯 Erlang 实现:不依赖外部 C 扩展或 Node.js 运行时,可直接嵌入任何 OTP 应用。
- 协议完整:支持 GraphQL 查询语法解析、变量替换、指令处理及内省系统。
- 并发友好:利用 Erlang 进程模型处理并发请求,天然适配高吞吐场景。
- 可扩展解析器:通过 resolver 函数将 GraphQL 字段映射至 Erlang 数据结构和业务逻辑。
- Schema 驱动:以 Erlang 术语(tuple/list)定义类型系统,支持对象、接口、联合、枚举、标量等全部 GraphQL 类型。
快速上手
以下示例展示如何使用 graphql-erlang 定义 Schema 并执行查询。
erlang
%% 1. 定义 Schema(使用 Erlang map 或 tuple 形式)
Schema = #{
query => #{
<<"hello">> => #{
type => string,
resolve => fun(_, _) -> <<"world">> end
}
}
},
%% 2. 编译 Schema(可选,提高后续执行效率)
{ok, CompiledSchema} = graphql:compile(Schema),
%% 3. 执行查询
Query = <<"{ hello }">>,
{ok, #{<<"data">> := #{<<"hello">> := <<"world">>}}} =
graphql:execute(CompiledSchema, Query).
构建与使用
通过 rebar3 添加依赖:
erlang
{erl_opts, [debug_info]}.
{deps, [
{graphql_erlang, {git, "https://github.com/shopgun/graphql-erlang.git", {branch, "master"}}}
]}.
序列化与反序列化
graphql-erlang 提供了将内部 GraphQL 表示转换为二进制 JSON 的能力:
erlang
%% 将查询结果序列化为二进制 JSON
JsonBinary = graphql:serialize(#{<<"data">> => #{<<"hello">> => <<"world">>}}).
解析请求中的 JSON 字符串:
erlang
{ok, DecodedMap} = graphql:decode(JsonBinary).
API 概览
| 函数 | 说明 |
|---|---|
graphql:compile/1 |
将 Schema 定义编译为内部存储结构,便于复用 |
graphql:execute/2,3,4 |
执行 GraphQL 查询,可传入变量与操作名称 |
graphql:serialize/1 |
将响应映射转换为二进制 JSON |
graphql:decode/1 |
将 JSON 二进制解析为 Erlang map |
graphql:parse/1 |
将 GraphQL 查询字符串解析为 AST |
项目状态与参考
- 项目遵循 Apache 2.0 许可证。
- 文档与示例见仓库
doc/目录及examples/目录。 - 适用于需要完全基于 Erlang/OTP 构建 GraphQL 网关或 BFF(Backend for Frontend)层的场景。
更多细节请访问 官方 GitHub 仓库。
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
