
后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载graphql-yoga 是 PrismaGraphcool生态中面向 Node.js 的 GraphQL 服务器框架核心理念是开箱即用——内置 Subscriptions、文件上传、GraphQL Playground 与 Apollo Tracing并以一组合理的默认配置省去手工拼装 express、apollo-server、graphql-subscriptions 的样板代码。本文以本仓库docs/1.2文档体系中的 graphql-yoga 概述 为骨架完整讲解其安装、API、配置项、部署方式并结合仓库内 Quickstart 与 Tutorial 文档展示 graphql-yoga 作为 Prisma 应用层 GraphQL 服务器时的标准用法。读完本文你将能独立创建一个支持查询、变更、订阅与权限校验的 graphql-yoga 服务并理解其与 Prisma 服务、prisma-binding 之间的协作关系。graphql-yoga 是什么graphql-yoga是一个功能完整的 GraphQL 服务器设计重点在于易用性easy setup、性能performance与优秀的开发者体验great developer experience。它的定位可以概括为构建 GraphQL 服务器的 create-react-app把分散的底层工具打包成一个带合理默认值的开箱即用方案。官方概述将其核心特性归纳为三点最省事的 GraphQL 服务器启动方式合理的默认配置极少的初始化代码即可包含所需的一切内置订阅能力基于 WebSockets 的 GraphQL Subscriptions 原生支持生态兼容可与所有 GraphQL 客户端Apollo、Relay 等协作无缝融入既有 GraphQL 工作流。底层依赖graphql-yoga 并非从零实现而是构建在以下成熟库之上express/apollo-server高性能、可扩展的 Web 服务器框架graphql-subscriptions/subscriptions-transport-wsGraphQL 订阅的服务器端支持graphql.js/graphql-toolsGraphQL 执行引擎与 schema 辅助工具如makeExecutableSchemagraphql-playground交互式 GraphQL IDE随服务器默认启用。这种分层设计意味着当默认配置不再满足需求时你可以解绑eject并直接使用底层工具不存在任何锁定。特性清单符合 GraphQL 规范spec-compliant支持文件上传File upload支持 GraphQL Subscriptions提供 TypeScript 类型定义typings内置 GraphQL Playground可通过 Express 中间件扩展支持 Apollo Tracing同时接受application/json与application/graphql两种 Content-Type随处可部署now、up、AWS Lambda、Heroku 等平台均可运行。安装在项目根目录执行yarn add graphql-yoga由于 graphql-yoga 自带 TypeScript 类型声明TypeScript 项目中无需额外安装types包即可获得类型提示。快速上手Hello World创建一个GraphQLServer实例并调用start即可启动服务import { GraphQLServer } from graphql-yoga // ... 或使用 require() // const { GraphQLServer } require(graphql-yoga) const typeDefs type Query { hello(name: String): String! } const resolvers { Query: { hello: (_, { name }) Hello ${name || World}, }, } const server new GraphQLServer({ typeDefs, resolvers }) server.start(() console.log(Server is running on localhost:4000))运行后访问http://localhost:4000即可看到内置的 GraphQL Playground并可直接执行query { hello(name: Prisma) }验证服务。官方文档还建议通过其examples目录下的示例项目快速入门对应三种典型场景见下文示例项目一节。GraphQLServer 构造器 APIGraphQLServer的构造函数签名为constructor(props: Props): GraphQLServerprops支持以下字段Key类型默认值说明typeDefsStringnullGraphQL 类型定义SDL 字符串或类型定义文件的路径当未提供schema时必填resolversObjectnull对应typeDefs中各字段的 resolver 实现当未提供schema时必填schemaObjectnullGraphQLSchema实例当未提供typeDefs与resolvers时必填contextObject 或 Function{}贯穿 resolver 链的自定义数据可以是对象也可以是签名如(req: Request) any的函数两种提供 schema 的方式向构造函数提供 schema 信息有两条等价路径提供typeDefsresolvers省略schemagraphql-yoga 内部会借助graphql-tools的makeExecutableSchema自动构造GraphQLSchema实例直接提供schema省略typeDefs与resolvers适用于已经手工组装好可执行 schema 的场景。典型的创建服务器示例const typeDefs type Query { hello(name: String): String! } const resolvers { Query: { hello: (_, { name }) Hello ${name || World}, }, } const server new GraphQLServer({ typeDefs, resolvers })与 Prisma 的结合点在 Prisma 的 Node.js Quickstart见 docs/1.2/01-Quickstart/01-Backend/02-Node/01-Node.md中typeDefs指向应用层的src/schema.graphql而context被用来把Prisma实例即 prisma-binding注入 resolver 链从而实现应用 schema 转发到底层 Prisma CRUD APIconst server new GraphQLServer({ typeDefs: ./src/schema.graphql, // 指向应用 schema resolvers, context: req ({ ...req, db: new Prisma({ typeDefs: src/generated/prisma.graphql, // 指向自动生成的 Prisma DB schema endpoint: http://localhost:4466/my-app/dev, // Prisma 数据库服务端点 secret: mysecret123, // 在 database/prisma.yml 中指定 debug: true, // 打印所有 GraphQL 查询与变更 }), }), })这种graphql-yoga 提供 HTTP/WS 服务层 Prisma 提供数据层的组合是仓库文档中反复出现、最典型的 Prisma 应用架构。server.start(...) 与运行时配置实例化GraphQLServer后通过start方法启动服务start(options: Options, callback: ((options: Options) void) (() null)): Promisevoid两个参数分别为options服务器运行时配置与callback在服务器启动前被调用的回调常用来打印启动信息。options支持以下字段Key类型默认值说明corsObjectnullcors中间件的配置选项如允许跨域来源、方法等tracingBoolean 或 Stringhttp-header是否启用/禁用 Apollo Tracing传字符串时可选enabled、disabled、http-headerportNumber4000服务器监听端口也可通过PORT环境变量指定endpointString/GraphQL HTTP 端点路径subscriptionsString 或false/订阅WebSocket端点路径设为false完全禁用订阅playgroundString 或false/GraphQL Playground 的访问端点设为false禁用 PlaygrounduploadsObject 或falsenull上传限制配置对象可含maxFieldSize、maxFileSize、maxFiles三个 Number 键的任意组合设为false禁用文件上传此外options还透传以下apollo-server选项Key类型说明cacheControlBoolean启用返回 Cache Control 数据的扩展formatErrorNumber在错误发送给客户端之前统一处理的函数logFunctionLogFunction记录执行时间等事件的日志函数rootValueany传给 GraphQL 执行的 rootValuevalidationRulesArray of functions追加应用于客户端查询的 GraphQL 校验规则fieldResolverGraphQLFieldResolver自定义字段级 resolverformatParamsFunction批量查询中对每个查询执行前格式化参数formatResponseFunction每次执行后格式化响应debugboolean执行出错时输出额外调试日志一个完整的启动示例const options { port: 8000, endpoint: /graphql, subscriptions: /subscriptions, playground: /playground, } server.start(options, ({ port }) console.log(Server started, listening on port ${port} for incoming requests.))PubSub订阅功能的底层使用graphql-subscriptions包提供的PubSub实现其原始 API 文档见该包自身文档。在 docs/1.2/03-Tutorials/02-GraphQL-Server-Development/03-Permissions.md 等教程中订阅与查询、变更一样由 graphql-yoga 统一接收并转发给 Prisma 服务处理。端点的默认行为graphql-yoga 在默认配置下会在根路径/同时提供 GraphQL HTTP 端点、订阅WebSocket端点与 Playground。借助server.start的options可以分别将三者拆分到不同路径如上述示例的/graphql、/subscriptions、/playground并可通过false值按需关闭其中任意一项。示例项目官方提供三个示例帮助快速上手本仓库文档对其逐一进行了说明hello-world最基础的 schema 搭建与hello查询subscriptions基于订阅的计数器示例计数器每 2 秒递增并触发一次订阅推送fullstack基于 create-react-app 的全栈示例演示如何通过 Apollo Client 2.0 从 graphql-yoga 查询数据。Workflow用 GraphQL Playground 调试服务器启动后即可直接使用内置的 GraphQL Playground通常运行在localhost:4000。Playground 自带自动生成的 API 文档展示可发送的全部查询、变更与订阅是开发期交互与调试的主要入口。在 Prisma 场景下Playground 甚至可以同时打开两个面板app应用 schema由 graphql-yoga 暴露与databasePrisma CRUD schema。Node.js Quickstart 中的完整流程为先用createDraft创建草稿 → 用publish发布 → 用feed查询已发布内容随后切换到database面板直接调用createPost、updatePost、deletePost等 CRUD 变更详见 docs/1.2/01-Quickstart/01-Backend/02-Node/01-Node.md。在 Prisma 工作流中的实战模式仓库的 Tutorial 文档展示了 graphql-yoga 在真实服务开发中的两类高频用法可作为上述 API 说明的落地参考。模式一数据模型演进与新增 resolverdocs/1.2/03-Tutorials/02-GraphQL-Server-Development/02-Resolver-Patterns.md 演示了数据模型加字段 → API 同步暴露的完整链路在database/datamodel.graphql的User类型中新增字段如address: String执行prisma deploy部署新数据结构并把新生成的 Prisma schema 下载到database/schema.graphql在src/schema.graphql的应用 schema 中同步添加该字段客户端即可通过 graphql-yoga 查询到它。同一教程还演示了新增自定义 resolver在应用 schema 的Mutation类型上添加delete(id: ID!): Post字段然后在src/index.js中实现对应 resolver把请求转发给 Prisma 的deletePost变更delete(parent, { id }, ctx, info) { return ctx.db.mutation.deletePost( { where: { id } }, info ); }模式二在 resolver 中实现权限校验docs/1.2/03-Tutorials/02-GraphQL-Server-Development/03-Permissions.md 展示了权限控制的核心思路在每个 resolver 中先做数据访问检查检查通过后再把操作转发给 Prisma 服务。例如post查询要求仅作者本人或 ADMIN 可访问实现如下async post(parent, { id }, ctx, info) { const userId getUserId(ctx) const requestingUserIsAuthor await ctx.db.exists.Post({ id, author: { id: userId, }, }) const requestingUserIsAdmin await ctx.db.exists.User({ id: userId, role: ADMIN, }) if (requestingUserIsAdmin || requestingUserIsAuthor) { return ctx.db.query.post({ where: { id } }, info) } throw new Error( Invalid permissions, you must be an admin or the author of this post to retrieve it., ) }这里的ctx.db.exists.Post(...)来自 prisma-binding其用法详解见 docs/1.2/06-GraphQL-Ecosystem/02-GraphQL-Binding/01-GraphQL-Binding.md而getUserId(ctx)则从 graphql-yoga 传入的context中解析出当前认证用户——这正是graphql-yoga 负责 HTTP 层与上下文、prisma-binding 负责数据访问分层协作的典型体现。测试时可在 Playground 中通过signup获取token再将其填入左下角 HTTP Headers 的Authorization字段之后所有请求都将以该用户身份发送。部署使用now部署下载并安装Now Desktop进入 graphql-yoga 服务器项目根目录在终端执行now。使用 Heroku 部署下载并安装 Heroku Command Line Interface执行heroku login登录进入项目根目录执行heroku create创建 Heroku 实例执行git push heroku master完成部署。up与 AWS Lambda 的部署支持在原文档中被标注为即将推出Coming soon使用前请以当前版本的官方说明为准。FAQgraphql-yoga 与 apollo-server 等其他工具相比如何graphql-yoga 构建在graphql.js、express、apollo-server等多个包之上每个包解决构建 GraphQL 服务器所需的某一环。如果逐个手工组合这些包初始化成本高且需要编写大量样板代码。graphql-yoga 把初始复杂度和样板抽象掉用一组合理的默认配置让你快速起步——正如 create-react-app 之于 React 开发。我能否直接用 express 和 graphql.js 自己搭服务器完全可以。graphql-yoga 的价值在于便利性与良好的Getting Started体验它把从零搭建 GraphQL 服务器时的复杂度封装起来。当默认配置不再适合你的场景时可以随时解绑并直接使用它基于的底层工具——不存在锁定或任何魔法。如何从标准的 express 配置中解绑GraphQLServer直接通过其express属性暴露内部的express.Application因此可以像使用原生 express 一样添加自定义中间件server.express.use(myMiddleware())也可以把中间件精确地挂到 GraphQL 端点路由上server.express.post(server.options.endpoint, myMiddleware())任何挂在该路由上的中间件都会在apollo-server-express中间件之前执行这为日志、错误上报等自定义行为保留了充分扩展空间。小结graphql-yoga 用一个构造函数 一个start调用把 GraphQL 服务器从组装 express、apollo-server、subscriptions、playground、tracing的繁琐过程压缩为一条命令。在本仓库的 Prisma 文档体系中它始终承担应用层 GraphQL 服务器的角色通过context注入 prisma-binding把应用 schema 的查询、变更与订阅安全地转发给 Prisma 数据库服务配合 Playground 完成开发调试再通过now、Heroku 等平台完成部署。若希望进一步了解与 graphql-yoga 配套的 binding、Playground、CLI、config 等 GraphQL 生态组件可继续阅读 docs/1.2/06-GraphQL-Ecosystem 目录下的对应文档。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐graphql-yoga 完全指南在 Prisma 生态中用零样板搭建高性能 GraphQL 服务graphql yoga 完全指南在 Prisma 生态中用零样板搭建高性能 GraphQL 服务 graphql yoga 是一个开箱即用的 Graph后端数据库GraphQLPrisma 实战用 graphql-yoga 与 prisma-binding 快速搭建 Node.js GraphQL 服务器Prisma 实战用 graphql yoga 与 prisma binding 快速搭建 Node.js GraphQL 服务器 本篇教程将带你从零起步在后端数据库GraphQL使用 Prisma 引导搭建 Node.js GraphQL 服务器graphql-yoga 与 prisma-binding 实战指南使用 Prisma 引导搭建 Node.js GraphQL 服务器graphql yoga 与 prisma binding 实战指南 本指南以本仓库 do后端数据库GraphQL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考