【免费下载链接】howtographql
The Fullstack Tutorial for GraphQL
项目地址:
https://gitcode.com/gh_mirrors/ho/howtographql
点击查看 免费下载
本指南是 howtographql 教程 Elixir 后端路线中「Getting Started」章节的完整实战讲解。你将基于 Elixir、Phoenix 与 Absinthe 搭建一个名为 Community 的类 Hacker News 应用(以用户提交与投票为核心的内容社区),并完成 GraphQL 服务器开发前的全部准备工作:环境依赖安装、Phoenix 项目生成、Absinthe 依赖引入、数据表与种子数据初始化。学完本章,你便拥有了一个可运行、可继续开发 GraphQL Schema 与 Resolver 的完整项目骨架。
章节定位:Community 应用与 Elixir 技术栈
教程采用的技术组合是 Elixir(函数式编程语言)与 Phoenix(Elixir 的 Web 框架),并以 Absinthe 作为 GraphQL 的 Elixir 实现来接收并执行经 Phoenix 提交的 GraphQL 查询。Elixir 运行在 Erlang VM(BEAM)之上,以低延迟、分布式与容错能力著称;其函数式风格与 GraphQL 的字段解析模型天然契合,并发模型也让订阅(subscriptions)这类能力实现起来非常顺手。这些背景在教程的 0-introduction.md 中有详细阐述,你可以在本仓库中继续阅读。
本教程在当前仓库中的位置为 content/backend/graphql-elixir/,配套章节还包括 Schema 定义与查询(2-queries.md)、变更(3-mutations.md)与总结(4-summary.md);站点数据中也将该教程登记为标题 graphql-elixir 的后端路线教程(见 src/data/stacks.ts)。
第一步:安装依赖
开始创建项目之前,需要先在你的机器上装好以下三样东西:
- Elixir 与 Erlang:Elixir 编译并运行在 Erlang VM 上,因此两者必须同时安装,具体安装方式以 Elixir 官方安装指南为准(不同操作系统各有对应方案)。
- Postgres:本教程使用 Postgres 作为应用的数据库。OS X 用户可以执行 brew install postgres 快速安装,其他操作系统可参考 Postgres 官方的详细安装指南。
与一些自带全套脚手架的框架不同,Phoenix 工作在普通 Elixir 应用的标准目录结构之内,但它提供了自己的生成器,用来往项目里添加基础 Phoenix 代码,方便你快速起步。
安装 Phoenix 项目生成器
先通过 mix 安装 Hex 包管理器、rebar 构建工具以及 phx_new 生成器归档:
mix local.hex –force && \\
mix local.rebar –force && \\
mix archive.install hex phx_new
逐条说明这三条命令的作用:
- mix local.hex –force:安装(或更新)Hex——Elixir 的包管理器,后续 mix deps.get 拉取依赖都要依赖它;–force 跳过交互式确认。
- mix local.rebar –force:安装 rebar——Erlang 生态的构建工具,部分依赖在编译时会用到。
- mix archive.install hex phx_new:从 Hex 安装 phx_new 归档。它是一个生成器归档文件,安装后即可在任意目录通过 mix phx.new 生成新的 Phoenix 项目。
第二步:生成 Phoenix 应用
你要构建的应用名叫 Community,可以把它理解成一个迷你版的 Hacker News、Slashdot 之类基于用户提交与投票来展示内容的站点。
使用 phx.new 生成器创建项目(提示时输入 y 确认):
mix phx.new community –no-assets –no-html
这里两个标志位值得说明:
- –no-assets:跳过 assets(JavaScript/CSS)脚手架。由于我们要做的是一个纯 GraphQL API 后端,不需要浏览器端资源。
- –no-html:跳过 HTML 视图与模板。同样是因为后端只对外暴露 JSON 形式的 GraphQL 接口。
当生成器询问是否获取并安装依赖时回答 y,然后 cd 进入生成的 community 应用目录继续后续操作。
第三步:为 GraphQL 添加 Absinthe 依赖
要让应用支持 GraphQL,还需要在 mix.exs 文件中追加两个依赖,它们位于 defp deps do 函数内部的依赖列表里:
{:absinthe, "~> 1.6"},
{:absinthe_plug, "~> 1.5"}
这两个依赖的分工如下:
- absinthe:Elixir 生态的 GraphQL 实现,提供完整的 Schema DSL、类型系统、编译期类型检查与 Resolver 机制,是后续章节编写 Schema 与查询解析的核心库。
- absinthe_plug:把 Absinthe 接入 Phoenix/Plug HTTP 层的桥梁,提供 Absinthe.Plug(处理 GraphQL 请求)与 Absinthe.Plug.GraphiQL(提供浏览器内的 GraphiQL 调试界面)等模块。
版本约束采用 Elixir 常见的 ~> 语义:~> 1.6 表示允许 >= 1.6.0 且 < 2.0.0 的版本;~> 1.5 同理,保证补丁版本可自动升级但不会跨大版本。
追加完成后运行:
mix deps.get
这一步会依据 mix.exs 从 Hex 拉取并锁定所有依赖(包括刚加入的 absinthe 及其传递依赖)。
第四步:生成数据库表与种子数据
为了让后续章节(查询与变更)可以直接在已有数据上开发调试,现在就把数据库表结构和初始数据准备好。
用 phx.gen.context 生成 News Context 与 Link 表
mix phx.gen.context News Link links url:string description:text
这条生成器命令的参数含义:
- News:Context 模块名,生成 Community.News 模块,作为业务领域的数据访问入口。
- Link:Schema 模块名,生成 Community.News.Link 结构体,映射到数据表。
- links:数据库表名(复数形式)。
- url:string、description:text:定义表字段及其 Ecto 类型,其中 url 用字符串、description 用文本类型。
生成器会产出 Context 模块、Schema 模块以及对应的数据库迁移文件。从后续章节可以看到这些产物的实际用法:在 2-queries.md 中,查询解析器直接调用 News.list_links() 获取全部链接;在 3-mutations.md 中,变更解析器通过 News.create_link(args) 写入新链接。也就是说,Resolver 只负责 GraphQL 层面的参数与结果转换,数据库访问全部委托给 Community.News 中的这些函数——这种间接层在应用成长、其他模块也需要创建链接时会非常有用。
写入种子数据
向 priv/repo/seeds.exs 文件中加入以下内容,让数据库里有一些基础链接数据:
alias Community.News.Link
alias Community.Repo
%Link{url: "http://graphql.org/", description: "The Best Query Language"} |> Repo.insert!
%Link{url: "http://dev.apollodata.com/", description: "Awesome GraphQL Client"} |> Repo.insert!
这里先用 alias 引入 Community.News.Link(由上一步生成器创建)与 Community.Repo,然后构造两个 Link 结构体,通过管道运算符 |> 交给 Repo.insert! 写入数据库。insert! 的感叹号表示失败时直接抛异常,适合种子数据这种"必须成功"的场景。
初始化数据库
运行:
mix ecto.setup
ecto.setup 会依次完成:创建数据库、运行所有迁移(此时 links 表随之建立)、执行 seeds.exs 种子数据。执行完成后,数据表已创建、迁移已运行,应用的数据层就绪。
如果之后任何时候想清空一切重新来过,只需运行:
mix ecto.reset
该命令会删除并重建数据库、重新跑迁移与种子,让环境回到初始状态。
排查 Postgres 连接问题
如果执行上述命令时遇到 Postgres 连接错误,优先检查开发环境配置 config/dev.exs 中的数据库凭据——包括用户名、密码、主机名、端口与数据库名等设置。默认配置通常假定本机 postgres 用户可免密连接,如果你的本地 Postgres 设置了密码或使用了不同账号,需要在这里同步修改。
完成初始化:接下来做什么
到这一步,你的开发环境已全部就绪:
- Phoenix 应用 community 已生成并安装依赖;
- Absinthe 与 Absinthe.Plug 已接入项目;
- links 表已通过迁移创建,且写入了两条种子链接。
接下来的开发主线在后续章节中展开:先定义 GraphQL Schema(在 lib/community_web/schema.ex 中建立 :link 对象与 all_links 根查询字段,注意 Absinthe 的蛇形命名会自动适配 GraphQL 的驼峰写法),再编写对应的 Resolver 函数,并通过 iex -S mix phx.server 启动服务器、在 GraphiQL 界面(/graphiql 路由)中测试查询;随后实现 create_link 变更,让客户端能够提交新链接。相关完整代码示例与测试步骤,可以继续阅读仓库中的 2-queries.md 与 3-mutations.md。
赞
【免费下载链接】howtographql
The Fullstack Tutorial for GraphQL
项目地址:
https://gitcode.com/gh_mirrors/ho/howtographql
点击查看 免费下载
相关推荐
Bebas Neue字体完全指南:2025年免费开源标题字体的终极解决方案
EPPlus完整指南:.NET开发者的Excel自动化解决方案
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网硕互联帮助中心


评论前必须登录!
注册