知海

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 仓库

帮助我们改进文档

发现翻译问题或内容错误?请告诉我们。