首页/新闻资讯/正文详情

使用 Elixir、Phoenix 与 Absinthe 搭建 GraphQL 服务器:环境准备与项目初始化实战

发布时间:2026/9/25 1:51:04 来源:云帆数科 栏目:资讯中心
使用 Elixir、Phoenix 与 Absinthe 搭建 GraphQL 服务器:环境准备与项目初始化实战
【免费下载链接】howtographqlThe 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函数式编程语言与 PhoenixElixir 的 Web 框架并以 Absinthe 作为 GraphQL 的 Elixir 实现来接收并执行经 Phoenix 提交的 GraphQL 查询。Elixir 运行在 Erlang VMBEAM之上以低延迟、分布式与容错能力著称其函数式风格与 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 与 ErlangElixir 编译并运行在 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跳过 assetsJavaScript/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}这两个依赖的分工如下absintheElixir 生态的 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这条生成器命令的参数含义NewsContext 模块名生成Community.News模块作为业务领域的数据访问入口。LinkSchema 模块名生成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.setupecto.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。赞分享【免费下载链接】howtographqlThe Fullstack Tutorial for GraphQL项目地址https://gitcode.com/gh_mirrors/ho/howtographql点击查看免费下载相关推荐使用 Elixir 与 Absinthe 构建 GraphQL 服务器HowToGraphQL 入门导读与 Schema 驱动开发解析使用 Elixir 与 Absinthe 构建 GraphQL 服务器HowToGraphQL 入门导读与 Schema 驱动开发解析 本篇技术指南是 HowJHipster环境搭建与项目初始化实战指南JHipster环境搭建与项目初始化实战指南 本文是一份全面的JHipster全栈开发平台环境搭建与项目初始化实战指南。详细介绍了JHipster的系统环境要求代码生成开发工具后端前端Daytona使用开始环境初始化与准备过程Daytona使用开始环境初始化与准备过程 概述 Daytona是一个专为AI代码执行设计的开发环境管理器提供安全、隔离的运行环境。本文将详细介绍Dayto上一篇Bebas Neue字体完全指南2025年免费开源标题字体的终极解决方案下一篇EPPlus完整指南.NET开发者的Excel自动化解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

CMake 3.26.6 Windows x86_64 安装与配置实战指南
CMake 3.26.6 Windows x86_64 安装与配置实战指南

简介:本资源为 CMake 3.26.6 官方 Windows 64 位命令行工具完整安装包,面向 C/C 开发者、跨平台项目构建工程师及初学者,用于替代 Visual Studio 内置构建系统或配合 Ninja/MSVC 等后端生成构建脚本,解决多平台项目配置、依赖管理… · 2026/9/25 1:51:04

LT6911C HDMI转MIPI桥接芯片方案详解:从硬件设计到调试实战
LT6911C HDMI转MIPI桥接芯片方案详解:从硬件设计到调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:50:58

MIMO预编码信道容量计算:ZF/MMSE的MATLAB仿真与避坑指南
MIMO预编码信道容量计算:ZF/MMSE的MATLAB仿真与避坑指南

简介:在无线通信多用户MIMO系统中,ZF-MMSE预编码融合了零强迫干扰消除与最小均方误差抑制的优点,是平衡干扰和噪声的重要策略。这份zip压缩包正是围绕该主题的MATLAB学习代码,面向通信工程学生、算法研究者及预编码技术初学者&… · 2026/9/25 1:50:58

NixOS 上部署 Anki Sync Server:内置同步服务模块配置与源码级原理详解
NixOS 上部署 Anki Sync Server:内置同步服务模块配置与源码级原理详解

包管理器操作系统 【免费下载链接】nixpkgs Nix Packages collection & NixOS 项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs 点击查看 免费下载 导读 本文围绕 NixOS 仓库中的 services.anki-sync-server 系统模块展开,介绍如何用声… · 2026/9/25 2:23:32

鸿蒙+星闪+AI大模型三大核心技术全解析:creation创意作品背后的技术架构
鸿蒙+星闪+AI大模型三大核心技术全解析:creation创意作品背后的技术架构

鸿蒙星闪AI大模型三大核心技术全解析:creation创意作品背后的技术架构 【免费下载链接】作品 本仓库用于系统化存储和管理源师兄在学习、竞赛及创作过程中产生的各类作品和项目资源。 项目地址: https://gitcode.com/yuanshixiong/creation creation 创意作品… · 2026/9/25 2:23:32

ng-zorro-antd Carousel 指示点位置完全指南:掌握 nzDotPosition 的 4 个方向与底层实现原理
ng-zorro-antd Carousel 指示点位置完全指南:掌握 nzDotPosition 的 4 个方向与底层实现原理

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 导读:本文聚焦 ng-zorro-antd(Angular UI Component Library… · 2026/9/25 2:23:32

IronClaw Reborn 事件证据管线解析:crates/events 四阶段单向架构(Event Log → Store → Projections → Streams)
IronClaw Reborn 事件证据管线解析:crates/events 四阶段单向架构(Event Log → Store → Projections → Streams)

人工智能AI 应用交互助手AI Agent 【免费下载链接】ironclaw IronClaw is an Agent OS focused on privacy, security and extensibility 项目地址: https://gitcode.com/gh_mirrors/iro/ironclaw 点击查看 免费下载 本文围绕 IronClaw 开源仓库的设计文档 target-… · 2026/9/25 2:23:32

SLV 新增 Solana RPC / Geyser gRPC / Shredstream 速度比较基准工具:用 TaoToken 统一 Key 跑通区域感知过滤实测
SLV 新增 Solana RPC / Geyser gRPC / Shredstream 速度比较基准工具:用 TaoToken 统一 Key 跑通区域感知过滤实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:23:19

用 html-anything 的 social-reddit-card Skill 生成拟真 Reddit 帖子卡片:模板规范、源码解析与实战示例
用 html-anything 的 social-reddit-card Skill 生成拟真 Reddit 帖子卡片:模板规范、源码解析与实战示例

AI 应用人工智能AI AgentAI 写作媒体生成 【免费下载链接】html-anything ✨ The agentic HTML editor — your local AI agent writes the HTML, you ship it. 🚀 75 Skills 9 Surfaces (magazine deck poster XHS / tweet prototype data report Hyperfram… · 2026/9/25 2:23:19

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码