尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Prisma API 详解:基于数据模型自动生成的 GraphQL 接口与 Playground 探索指南

Prisma API 详解:基于数据模型自动生成的 GraphQL 接口与 Playground 探索指南 后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载本篇指南聚焦 Prisma1.x已弃用的核心能力——Prisma API讲解一个 Prisma service 如何基于其数据模型自动生成一套 GraphQL CRUD 接口并支持数据库事件驱动的实时订阅同时结合仓库源码深入解析使用 GraphQL Playground 探索 API 的完整姿势prisma playground命令的底层实现、HTTP endpoint 的直连方式并补充服务鉴权JWT service token与错误处理等实战要点。读完你可以在自己的 Prisma service 上快速定位、验证并安全调用任意查询、变更与订阅操作。什么是 Prisma API在 Prisma 中一个Prisma service会对外暴露一个GraphQL API这个 API 是根据已部署的 数据模型.md)自动生成的官方称之为Prisma API。Prisma API 的核心能力可以概括为两块针对数据模型中每个类型Type的 CRUD 操作即对节点的增create、查query、改update、删delete。数据库实时事件订阅当数据库发生事件时例如新节点被created、已有节点被updated或deleted客户端可以实时收到通知。换句话说你不需要手写一行服务端业务代码只要维护一份数据模型文件Prisma 就会为你生成一整套可直接调用的 GraphQL 接口。Prisma database schemaPrisma API 的具体形态由一个对应的 GraphQL schema 定义这个 schema 被称为Prisma database schema。它和数据模型是一体两面的关系概念说明数据模型Data Model用 SDL 编写的.graphql文件如datamodel.graphql描述业务类型、字段与关系是输入Prisma database schema由数据模型自动推导生成的完整 GraphQL schema定义Query、Mutation、Subscription三类根类型上可用的全部操作是输出关于二者更详细的差异字段的增删、unique标注、系统字段id/createdAt/updatedAt的只读特性等可以参考 Data Modelling (SDL).md) 中的Prisma database schema vs data model章节。从数据模型到 API自动生成的完整链路Prisma API 完全围绕数据模型构建。一条典型的链路如下编写数据模型在一个或多个.graphql文件中定义类型例如datamodel.graphqltype Tweet { id: ID! unique createdAt: DateTime! text: String! owner: User! location: Location! } type User { id: ID! unique createdAt: DateTime! updatedAt: DateTime! handle: String! unique name: String tweets: [Tweet!]! }在prisma.yml中声明数据模型路径datamodel: datamodel.graphql执行prisma deploy同步到服务端部署成功后服务端会基于数据模型生成对应的数据库 schema并为每个类型挂载 CRUD 操作同时推导出全部关系例如上面的TweetToUser双向关系。prisma deploy支持--dry-run预演、--force接受破坏性变更、--watch监听文件变更自动重部署等参数详见 prisma-deploy 命令参考。数据模型决定了 API 的全部操作面数据模型中的每个元素都会映射到 API 操作上详见 Concepts 章节Queries查询参考查询某个模型的单个或多个节点跨关系查询节点跨关系聚合查询如postsConnection上的aggregate { count }。Mutations变更参考对某个模型的节点进行 create / update / upsert / delete跨关系进行 create、connect、disconnect、update、upsert对某个模型进行批量 update / delete如updateManyPosts、deleteManyPosts。Subscriptions订阅参考节点被创建、更新、删除时实时通知。从源码结构看Prisma 服务端的 GraphQL 引擎正是围绕这三类根类型组织 schema 的参见 server/servers/api 下按操作类别划分的 Scala 源码这印证了数据模型 → Prisma database schema → 三类操作的生成链路。几个重要的 API 概念在探索 API 之前理解下面几个概念能帮你少走弯路节点选择Node selection多数操作通过where参数选取节点。任何标注了unique的字段都可以用于定位节点。例如按id更新单个节点mutation { updatePost( where: { id: ohco0iewee6eizidohwigheif } data: { title: GraphQL is awesome } ) { id } }批量操作Batch operationsupdateManyPosts/deleteManyPosts这类批量变更针对大量节点做了优化只返回受影响数量count而不返回节点详情。注意批量变更不会触发订阅事件连接查询Connections基于 Relay Connection 模型除了分页信息外还支持聚合。例如统计所有未发布文章query { postsConnection { aggregate { count } edges { node { title } } } }事务性变更Transactional mutations非批量操作的单个 mutation 总是事务性执行——即使它横跨多个关系、写入多个类型。任一动作失败如违反unique约束则整个变更回滚且变更过程对外隔离atomic isolated。这对嵌套变更尤为重要。级联删除Cascading deletes通过relation指令的onDelete参数控制关联节点的删除行为可选CASCADE连带删除或SET_NULL引用字段置空。探索 Prisma APIGraphQL Playground 完全指南GraphQL Playground 是探索 Prisma API 的最佳工具你可以用它运行 GraphQL 查询、变更和订阅边写边看响应还能浏览完整的 schema 文档。打开 Playground 有两种方式方式一prisma playground命令在 service 的工作目录下直接运行prisma playground该命令会读取当前目录的prisma.yml与 GraphQL 配置通过graphql-config及graphql-config-extension-prisma扩展补全 endpoint在本地启动一个内置的 Playground 服务并自动打开浏览器。从 playground 命令源码 可以看出其完整行为如果本机安装了 macOS 版 GraphQL Playground 桌面应用优先以graphql-playground://协议拉起桌面应用否则或传了--server-only/--web/ 指定--port时启动一个 Express 服务器/playground路由挂载 Playground 页面/graphql路由通过express-request-proxy把请求代理到真实的 API endpoint端口默认3000启动后打印Serving playground at http://localhost:3000/playground并自动opn()打开该地址。支持的命令行参数如下-w, --web 强制打开 Web 版 Playground -e, --env-file ENV-FILE 指定 .env 文件注入环境变量 -p, --project PATH Prisma 定义文件prisma.yml路径 -s, --server-only 只启动本地服务器不自动打开浏览器 -p, --port PORT Playground Web 版服务端口隐含 --web默认 3000方式二直接在浏览器粘贴 HTTP endpointPlayground 本身是一个可以部署到任意 endpoint 上的 Web 应用因此你也可以把 service 的 HTTP endpoint形如http://localhost:4466/service/stage直接粘贴到浏览器地址栏中打开。提示Prisma service 的 HTTP endpoint 通常由cluster、service与stage共同决定这些值在 prisma.yml 配置 中定义也可以在 Playground 里通过服务端自动生成的 schema 文档浏览全部可用操作。在 Playground 中验证三类操作以 Queries 章节 中的示例数据模型Post/User为例type Post { id: ID! unique title: String! published: Boolean! author: User! } type User { id: ID! unique email: String! unique name: String! posts: [Post!]! }在 Playground 左侧依次输入并执行# 查询获取所有 Post 的 id 与 title query { posts { id title } }# 变更新建一篇已发布的 Post 并关联作者 mutation { createPost( data: { title: Hello Prisma published: true author: { connect: { email: hellograph.cool } } } ) { id title } }# 订阅实时接收新 Post 的创建事件在另一个标签页执行 mutation 即可看到推送 subscription newPosts { post(where: { mutation_in: [CREATED] }) { mutation node { title } } }订阅走的是独立的 WebSocket endpoint协议为graphql-subscriptions在 Playground 中可直接切换标签运行若在代码中使用可借助apollo-link-ws建立连接详见 Subscriptions 章节。保护你的 Prisma APIservice secret 与 JWT 鉴权Prisma API 通常通过 service secret 保护在prisma.yml的secret字段中配置。调用 API 时需要在 HTTP 请求头中携带用该 secret 签名的 JWTAuthorization: Bearer __TOKEN__JWT 必须包含两类 claimexp过期时间必须晚于当前时间service服务名与 stage如my-serviceprod须与当前请求的目标一致。服务端会验证 token 的签名、exp与service三者全部匹配才放行。生成 service token用 CLI 生成在 service 目录执行prisma token即可得到一个新的 JWT加--copy直接复制到剪贴板对应源码实现见 token 命令若prisma.yml未配置 secret 会提示There is no secret set in the prisma.yml。更多参数见 prisma token 命令参考。在服务端代码中生成基于jsonwebtoken库用环境变量中的 secret 签名例如var jwt require(jsonwebtoken) jwt.sign( { data: { service: my-service process.env.PRISMA_STAGE, }, }, process.env.PRISMA_SECRET, { expiresIn: 1h, } )错误处理读懂 API 的报错响应当查询或变更出错时响应中会包含errors属性携带错误code、message等信息遵循 GraphQL 规范对错误处理的定义。API 错误分为两类应用错误Application errors通常说明你的请求本身不合法——例如拼写错误、缺少必填参数、参数类型不对等。应检查输入与错误信息是否吻合。内部服务器错误Internal server errors说明 Prisma service 内部发生了意外应查看 service 日志定位。对本地集群可以使用prisma cluster logs参见 集群日志命令查看日志。一个典型的鉴权类应用错误{ errors: [ { code: 3015, requestId: api:api:cjc3kda1l000h0179mvzirggl, message: Your token is invalid. It might have expired or you might be using a token from a different project. } ] }遇到3015这类错误时请确认 token 未过期、且是用prisma.yml中配置的 secret 签发的。更完整的错误码场景与排查建议见 Concepts 的错误处理章节。小结与下一步Prisma API 是 Prisma service 的对外窗口它由数据模型自动生成天然覆盖 CRUD 与实时订阅并通过 Playground 提供所见即所得的探索体验。你可以按以下路线继续深入熟悉数据模型写法Data Modelling (SDL).md)掌握查询语法与过滤/排序/分页参数Queries掌握嵌套变更与批量操作Mutations玩转实时通知Subscriptions为 API 加一层 JWT 保护prisma tokenAuthorization: Bearer头。至此你已经具备了在真实 Prisma service 上看得见、摸得着地使用和验证 Prisma API 的完整能力——从 Playground 的打开方式、三类操作的验证到鉴权与排错都能直接落地到实际项目中。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐ML-For-Beginners NLP 入门从图灵测试、Eliza 到写出第一个 Python 对话机器人ML For Beginners NLP 入门从图灵测试、Eliza 到写出第一个 Python 对话机器人 本篇是 ML For Beginners 课程第后端数据库GraphQLPrisma API 全面指南基于数据模型自动生成的 GraphQL CRUD 与实时订阅接口Prisma API 全面指南基于数据模型自动生成的 GraphQL CRUD 与实时订阅接口 导读 本文以 Prisma prisma1 https://后端数据库GraphQLPrisma API 总览数据模型驱动的自动生成 GraphQL API 及其探索方式Prisma API 总览数据模型驱动的自动生成 GraphQL API 及其探索方式 Prisma 服务的核心能力之一是为每个已部署的数据模型.md 自动后端数据库GraphQL上一篇【亲测免费】 Moon游戏服务器框架推荐下一篇git-all-secrets入门教程从安装到扫描的完整步骤创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表