
【免费下载链接】howtographqlThe Fullstack Tutorial for GraphQL项目地址https://gitcode.com/gh_mirrors/ho/howtographql点击查看免费下载本篇导读对应 How to GraphQL 开源仓库中的 TypeScript Apollo 后端教程系列它完整规划了一条从零搭建“习语化idiomaticGraphQL 服务器”的实战路径以 TypeScript 为语言、Apollo Server 为 HTTP 层、Nexus 以代码优先方式生成 Schema、Prisma 负责数据库访问最终构建出一个可认证、可投票、支持过滤分页排序、并能自动部署到云端的 Hacker News 克隆 API。读完本文你将清晰了解该系列教程的技术选型理由、章节演进路线、前置知识要求以及贯穿全程的编码约定为后续逐章动手实践做好铺垫。教程背景为什么选择 GraphQL 与这套技术栈在 API 开发领域GraphQL 正成为一颗冉冉升起的新星作为 API 设计范式它正在 REST 之外逐步赢得一席之地并成为暴露 Web 服务器数据与功能的标准方案之一。本系列教程的目标是引导你从零构建一个idiomatic地道的、符合最佳实践的 GraphQL 服务器并选用以下四项技术TypeScriptJavaScript 的强类型超集可被编译回 JavaScript。它以类型安全type-safety和更优的开发者体验在开发者社区获得了广泛的采用与认可。Apollo Server功能完备的 GraphQL 服务器聚焦于快速上手、良好性能与出色的开发者体验。Nexus使用 JavaScript/TypeScript 创建健壮、类型安全 GraphQL Schema 的库。Prisma新一代 Node.js 与 TypeScript ORM你可以在 GraphQL resolver 内部使用 Prisma Client 访问数据库。四者的分工在后续章节中体现得十分清晰Nexus 负责“Schema 从哪来”Apollo Server 负责“Schema 如何对外服务”Prisma 负责“数据存在哪、怎么查”TypeScript 则把这三者以类型安全的方式缝合在一起。说明本系列教程发布较早官方标注为略有过时slightly outdated。若你需要跟进最新实践可以查阅仓库中 README.md 以及同一目录下的其他教程系列它们与本教程共享相同的知识体系。教程目标打造一个 Hacker News 克隆 API整个系列的最终产物是一个 Hacker News 克隆的 API。以下是教程内容的快速预览roadmap理解 GraphQL 服务器的工作原理首先学习 GraphQL 服务器如何运行、Schema 与 resolver 的关系。用 Nexus 定义 GraphQL Schema 并编写 resolverschema 采用code-first方式定义。初期 resolver 只操作内存数据——服务器一重启数据就消失。接入 SQLite 数据库由 Prisma 管理解决持久化问题让数据在服务器运行期之外依然存在。实现 signup/login 认证让用户能够针对 API 进行身份认证并据此检查用户对某些 API 操作的权限。添加投票vote功能用户可以对链接进行点赞。学习自定义 GraphQL Scalar将自定义 scalar 加入应用例如DateTime。为 feed 查询添加排序、过滤与分页让 API 消费者可以约束其从 API 检索的条目列表。搭建自动化部署流水线使用 GitHub Actions 将 API 自动部署到云平台Heroku。教程倡导的学习方式贯穿始终——通过理论讲解、动手写代码、阅读外部资源三者的结合循序渐进地掌握 GraphQL。你不只学习各种技术选择的how怎么做还会理解why为什么包括各自的优缺点与取舍pros、cons and tradeoffs。这一路线图在仓库中按章节完整落地每一章对应一个独立的 Markdown 文件全部位于 content/backend/typescript-apollo/ 目录下从 0-introduction.md 到 9-deployment.md 依序展开。前置知识本教程对初学者友好但仍需具备一些基础知识与工具准备。假定的已有知识Assumed knowledgeJavaScript 或 TypeScript 基础TypeScript 知识非强制会 JavaScript 即可Web 开发基础曾构建或使用过 API 或 Web 服务器即可一定的数据库使用经验本教程使用关系型数据库但有 MongoDB 等文档数据库经验同样适用。假定的工具与环境Assumed tools and setup包管理器使用npmIDE 使用VSCode使用 Unix shell如 Linux 或 macOS 的终端/shell。如果你使用其他工具组合——例如 Yarn、Windows 系统或 Webstorm——也完全可以只需偶尔将少量指令适配到自己的环境即可。贯穿全程的教程约定Hints and conventions为了让读者跟上节奏系列教程遵循几项固定约定。了解这些约定有助于顺畅跟读但属于可选阅读。带注释的代码块Annotated code blocks大多数代码块带有编号注释代码块之后会逐条解释每个编号对应的含义。例如const a 1 // 1 const b: any 1 // 2 // ts-ignore // 3 const c: number Not a number;// 1TypeScript 自动将a推断为number类型因为未显式提供类型。// 2使用any可有效关闭类型检查允许任意类型。// 3在某一行的前面使用// ts-ignore可忽略 TypeScript 编译器报错。后续章节中大量出现这种注释风格例如在 1-getting-started.md 中解释makeSchema的types、schema、typegen三个输出项在 2-a-simple-query.md 中逐行拆解Link类型定义与feedresolver都是同一套阅读方法。固定主版本的包安装方式Package installation with fixed major version教程中_大多数_包安装都会遵循如下格式npm install package_name^version^告诉 npm保持主版本major version不变并在安装时更新到最新的次版本minor与补丁版本patch。依据 semver 规则破坏性变更只应在主版本升级时引入。固定主版本可以确保所安装的任何包都不会出现破坏性变更从而避免教程被意外“搞坏”。如果你想把某个包升级到教程未指定的新主版本请务必清楚自己在做什么。关于复制粘贴代码的建议Copy-pasting code from the tutorial教程强烈建议如果你是初学者尽量亲手把代码打出来。手写代码能让你亲身体验在具备类型安全的 TypeScript 代码库中写代码的体验——包括自动补全autocompletion、让静态安全机制引导你的实现例如在 GraphQL resolver 内部以及如果你刚接触 TypeScript习惯遇到、理解并修复静态类型错误这一必备练习。当然任何时候都不必感到沮丧如果实在跑不通按需复制粘贴教程代码即可等一切跑通之后再花点时间随意改动、弄坏、再修好几乎总是值得的。完整代码仓库教程末尾9-deployment.md还会指导你将最终代码提交到 GitHub 并完成自动部署。系列各章对应的成品代码可对照各章节文件逐步构建若在教程中途卡住可以随时对照完整实现。路线图与仓库章节对照为了让导读更具实操指引价值下面将教程路线图与仓库中的实际章节文件一一对应。所有章节文件均位于 content/backend/typescript-apollo/ 目录章节文件核心内容0-introduction.md系列导读技术栈、路线图、前置知识与约定1-getting-started.md项目初始化、TypeScript 配置、安装 Nexus/Apollo、生成首个 Schema 并跑通第一个查询2-a-simple-query.mdcode-first 工作流、Link类型、feed查询与查询解析过程、trivial resolvers3-a-simple-mutation.mdpost变更操作、args参数、内存存储的局限4-adding-a-database.md引入 Prisma 与 SQLite、schema.prisma数据模型、首次迁移与 Prisma Client 查询5-connecting-server-and-database.md通过context参数将 Prisma Client 接入 resolver重构feed/post6-authentication.mdUser模型与关系字段、JWT 认证signup/login、Authorization头校验、Prisma Studio7-voting-and-scalars.md多对多关系隐式关系表、vote变更、自定义DateTimeScalar8-filtering-pagination-and-sorting.mdfilter过滤、skip/take分页、orderBy排序、Feed类型与总数统计9-deployment.mdGit 版本控制、SQLite 迁移到 PostgreSQLDocker、Heroku 部署与 GitHub Actions 持续部署从仓库源码看“code-first”的实际形态系列教程反复强调 Nexus 的code-first方式你用标准 TypeScript 代码定义 Schema 长什么样再由 Nexus 生成 GraphQL SDL 文件与 TypeScript 类型定义。这一理念在 1-getting-started.md 中有一个非常直观的最小示例——makeSchema在没有任何自定义类型时会生成一个带默认ok字段的Query根类型import { makeSchema } from nexus import { join } from path export const schema makeSchema({ types: [], // 1 outputs: { schema: join(process.cwd(), schema.graphql), // 2 typegen: join(process.cwd(), nexus-typegen.ts), // 3 }, })// 1Schema 将由众多类型组成以数组形式传入types此处暂时留空。// 2Nexus 生成的第一个输出文件是.graphql格式的 Schema 文件即 GraphQL 的 Schema Definition LanguageSDL用于定义 API 的结构。// 3第二个输出文件是 TypeScript 类型的typegen文件包含 Schema 中所有类型的 TS 定义用于保证应用代码的类型安全并让 Schema 的定义与实现保持同步。生成后根目录会出现schema.graphql与nexus-typegen.ts。默认 SDL 如下type Query { ok: Boolean! }后续章节2-a-simple-query.md在此基础上定义真正的业务类型Link并实现feed查询3-a-simple-mutation.md 再通过extendType扩展Mutation根类型加入post变更。这就是整条教程主线的最小循环定义类型 → 生成 SDL → 编写 resolver对应导读中“先用内存数据再接数据库再加认证与高级特性”的演进路径。从导读出发如何继续深入本导读对应的整条学习路径在仓库中保存得相当完整。若你想立刻动手下一步是阅读 1-getting-started.md按照其中步骤检查 Node.js 版本要求 v12 或以上、执行npm init -y初始化项目、安装typescript与ts-node-dev并按给定tsconfig.json配置编译选项。配置中值得留意的是strict: true——它开启一系列更严格的类型检查产出更类型安全的程序但也可能带来一些其实无害的类型报错若遇到“明知不是 bug 却难以让编译器满意”的情况可以考虑将其设为false或使用// ts-ignore注释。从仓库整体看本教程只是 How to GraphQL 项目众多系列之一README.md 中列出了后端方向的 JavaScript Apollo、TypeScript Helix、Ruby、Python、Go、Scala、Java 等教程以及前端方向的 React Apollo、Vue Apollo 等系列全部教程内容均存放在 content/ 目录下。作为以 TypeScript Apollo 为技术栈的读者本系列是一条从零到生产部署、体系完整的实践主线——从理解 GraphQL Schema 与 resolver 的最小原理开始逐步叠加数据库、认证、关系建模、自定义标量、查询能力增强与自动化部署最终交付一个功能完整的 Hacker News 克隆 API。赞分享【免费下载链接】howtographqlThe Fullstack Tutorial for GraphQL项目地址https://gitcode.com/gh_mirrors/ho/howtographql点击查看免费下载相关推荐HowToGraphQL TypeScript Helix 教程导读用 Node.js、Fastify 与 Prisma 从零构建 GraphQL 服务器HowToGraphQL TypeScript Helix 教程导读用 Node.js、Fastify 与 Prisma 从零构建 GraphQL 服务器使用 Prisma 与 TypeScript 引导构建 GraphQL 服务器graphql-yoga prisma-binding 完整实战使用 Prisma 与 TypeScript 引导构建 GraphQL 服务器graphql yoga prisma binding 完整实战 导读 本教后端数据库GraphQL如何使用Zappa和Ariadne快速构建无服务器GraphQL服务完整指南如何使用Zappa和Ariadne快速构建无服务器GraphQL服务完整指南 Zappa是一个基于Python的服务部署和管理工具支持多种云服务和部署选项。云原生DevOps后端上一篇Font Awesome workflow for Alfred常见问题解决macOS Catalina运行权限设置完整指南下一篇CANN/cann-recipes-infer: NPU Prefetch 原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考