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

Prisma + TypeScript 快速上手:5 分钟构建并部署 GraphQL 后端

发布时间:2026/9/23 16:34:02 来源:云帆数科 栏目:资讯中心
Prisma + TypeScript 快速上手:5 分钟构建并部署 GraphQL 后端
Prisma TypeScript 快速上手5 分钟构建并部署 GraphQL 后端【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址: https://gitcode.com/gh_mirrors/pr/prisma1本指南以当前仓库 docs/1.3/01-Quickstart/01-Backend/01-TypeScript/01-TypeScript.md 为骨架演示如何用 TypeScript 搭建一个 GraphQL 服务器以graphql-yoga作为 Web 服务器通过prisma-binding连接被称为 GraphQL database 的 Prisma 数据库服务并借助 Docker 在本地集群完成部署。读完本文你将掌握prismaCLI 的初始化与部署流程、Prisma 服务与 GraphQL boilerplate 项目的目录结构、双 Playground 的使用方法以及面向应用 schema 与 Prisma CRUD API 的查询和变更mutation实践。Step 1安装所需的命令行工具在整个教程过程中你需要用 Prisma CLI 来创建和管理 Prisma 数据库服务因此第一步是安装 CLI。在终端中全局安装 Prisma CLInpm install -g prisma从本仓库源码看init、deploy、local等命令由prisma-cli-core包实现入口位于 cli/packages/prisma-cli-core/src/commands而命令执行框架来自 cli/packages/prisma-cli-engine所有子命令均基于其中的Command基类注册 topic、args 与 flags。除此之外你的机器上还必须安装 Docker。如果尚未安装请前往官网下载Mac OShttps://www.docker.com/docker-macWindowshttps://www.docker.com/docker-windows下载完成后直接安装即可安装后你也会同时获得dockerCLI 的访问权限。最后一步是启动本地开发集群local development cluster稍后你要把 Prisma 服务部署到这个集群上。在终端中执行prisma local start关于该命令的更多细节可参考 prisma local start 命令参考它会启动名为local的默认本地集群也支持通过-n, --name NAME指定集群实例名例如prisma local start --name mycluster如果该集群此前不存在命令还会自动把它以键mycluster写入本地集群注册表~/.prisma/config.yml。Step 2用prisma init引导创建 GraphQL 服务器接下来使用prisma init引导创建你的 GraphQL 服务器。注意该命令会触发一个交互式提示让你选择项目所基于的模板。因为向prisma init传入了my-app作为参数CLI 会新建一个名为my-app的目录并把项目的所有文件放进去prisma init my-app当被问到如何设置 Prisma 服务时选择GraphQL server/fullstack boilerplate (recommended)。随后 CLI 会提示你选择一个 GraphQL boilerplate 作为项目基础这里选择typescript-basicboilerplate即typescript-graphql-server仓库中的basic模板。最后当被问到要部署到哪个集群时选择local集群。prisma init结束后你的 Prisma 数据库服务即已部署可通过http://localhost:4466/my-app/dev访问。从源码实现看prisma init的交互逻辑位于 cli/packages/prisma-cli-core/src/commands/init/init.ts它先检查目标目录是否已存在可能冲突的文件如prisma.yml、datamodel.prisma随后通过EndpointDialogcli/packages/prisma-cli-core/src/utils/EndpointDialog.ts完成集群、数据库类型、服务名、stage 等信息的采集最终生成prisma.yml、datamodel.prisma在本地集群场景下还会生成docker-compose.yml和包含PRISMA_MANAGEMENT_API_SECRET的.env。若选择了生成器还会自动执行prisma generate。关于该命令的完整用法包括-b, --boilerplateflag 与示例参见 prisma init 命令参考。服务端点的组成你或许已经注意到数据库服务的 HTTP 端点由以下几个部分拼接而成集群域名即~/.prisma/config.yml中host属性的值http://localhost:4466/my-app/devPrismaservice的名称定义在prisma.yml中my-app服务部署到的 stage默认名为dev这个端点被引用在src/index.ts中用来实例化Prisma从而在应用 schema 与 Prisma schema 之间建立绑定bindingconst server new GraphQLServer({ typeDefs: ./src/schema.graphql, // points to the application schema resolvers, context: req ({ ...req, db: new Prisma({ endpoint: http://localhost:4466/my-app/dev, // the endpoint of the Prisma DB service secret: mysecret123, // specified in database/prisma.yml debug: true, // log all GraphQL queries mutations }), }), })其中secret: mysecret123对应database/prisma.yml中配置的服务密钥用于生成访问 Prisma API 所需的 JWT 令牌debug: true则会在服务器日志中打印所有 GraphQL 查询与变更。Step 3认识生成的项目文件结构prisma init生成的项目文件结构如下对应typescript-basicboilerplate/根目录.graphqlconfig.ymlGraphQL 配置文件包含端点与 schema 配置供graphql-cli与 GraphQL Playground 使用遵循graphql-config标准格式。/databasedatabase/prisma.yml数据库服务的根配置文件。prisma.yml支持的全部字段service、datamodel、cluster、stage、disableAuth、secret、schema、subscriptions、seed、custom等可参考 prisma.yml 配置参考。database/datamodel.graphql你为项目定义的数据模型用 SDL 编写是数据库的基石下一节详述。database/seed.graphql包含一些 mutation用于给数据库灌入初始数据。/srcsrc/schema.graphql定义应用 schemaapplication schema即你想暴露给客户端应用的 GraphQL API。src/generated/prisma.graphql定义Prisma schema即数据模型中各类型的 CRUD API由datamodel.graphql生成。永远不要手动编辑该文件如需变更只能修改datamodel.graphql后运行prisma deploy。src/index.ts服务器入口把所有部分串起来并启动来自graphql-yoga的GraphQLServer。当前阶段对你最重要的是database/datamodel.graphql和src/schema.graphql。数据模型是整个 API 的基础src/schema.graphql中定义并暴露给客户端的 API 正是构建在它之上。typescript-basic模板默认的数据模型如下type Post { id: ID! unique isPublished: Boolean! title: String! text: String! }基于这个数据模型Prisma 会生成Prisma schema——一个为数据模型中所有类型定义 CRUD API 的 GraphQL schema。该 schema 存放在src/generated/prisma.graphql每次你对数据模型做修改并执行deploy时CLI 都会自动更新它。关于 SDL 数据模型的更多建模规则可参考 Data Modelling (SDL) 参考.md)。至此你可以启动服务器了。Step 4启动服务器调用package.json中定义的dev脚本它会启动服务器并为你打开一个 GraphQL Playgroundcd my-app yarn dev注意这个 Playground 让你可以并排与两个 GraphQL API 交互appWeb 服务器的 GraphQL API定义在应用 schema来自./src/schema.graphqldatabasePrisma 数据库服务的 CRUD GraphQL API定义在Prisma schema来自./src/generated/prisma.graphql每个 Playground 都自带自动生成的文档展示你可以向该 API 发送的所有 GraphQL 操作查询、变更以及订阅文档位于 Playground 最右侧边缘。Playground 打开后就可以发送查询和变更了。针对应用 schema 发送查询与变更应用 schemasrc/schema.graphql定义的 GraphQL API 可以通过appPlayground 访问。把下面的 mutation 粘贴到appPlayground 左侧面板然后点击Play按钮或使用快捷键CMDEntermutation { createDraft( title: GraphQL is awesome!, text: It really is. ) { id } }如果此时发送feed查询服务器仍然会返回空列表。这是因为feed只返回isPublished为true的Post节点——而通过createDraftmutation 创建的Post并不满足该条件。你可以对某个Post调用publishmutation 来发布它。把createDraftmutation 返回的Post的id复制出来替换下面 mutation 中的__POST_ID__占位符mutation { publish(id: __POST_ID__) { id isPublished } }现在终于可以发送feed查询了已发布的Post会被返回query { feed { id title text } }针对 Prisma API 发送查询与变更Prisma schemasrc/generated/prisma.graphql定义的 GraphQL CRUD API 可以通过databasePlayground 访问。由于此时直接面对数据库 API你不再受限于应用 schema 中的操作而是可以利用完整的 CRUD 能力直接创建一个isPublished为true的Post节点mutation { createPost( data: { title: What I love most about GraphQL, text: That it is declarative., isPublished: true } ) { id } }这个 mutation 创建的Post节点会立刻被应用 schema 中的feed查询返回因为它的isPublished字段是true。在databasePlayground 中你还可以发送 mutation 来更新和删除已有的 post为此你需要先知道它们的id。在databasePlayground 中发送如下查询{ posts { id title } }从返回的Post节点中复制你刚创建的那一条title为What I love most about GraphQL的id替换下面 mutation 中的__POST_ID__占位符mutation { updatePost( where: { id: __POST_ID__ }, data: { text: The awesome community. } ) { id title text } }通过这条 mutation你把text从That it is declarative.更新为The awesome community.。最后要删除一个Post节点可以发送如下 mutation同样需要把__POST_ID__替换为真实idmutation { deletePost( where: { id: __POST_ID__ } ) { id title text } }小结从数据模型到双 API 的链路回顾整条链路可以看到 Prisma 的数据建模与 API 生成是高度自动化的你在database/datamodel.graphql中用 SDL 定义类型如Postprisma deploy基于它生成 Prisma schemasrc/generated/prisma.graphql从而获得完整 CRUD API而src/index.ts中通过new Prisma({ endpoint, secret, debug })创建的绑定让graphql-yoga的应用层解析器可以安全地访问数据库层的 CRUD API。源码层面集群配置如local集群的baseUrl、是否本地、是否需要鉴权等属性由 cli/packages/prisma-yml/src/Cluster.ts 中的Cluster类建模这解释了为什么prisma init在选择local集群后端点会落在本地 Docker 容器的4466端口上。你可以沿用这套数据模型 → 生成 Prisma API → 应用 schema 封装的模式把Post替换为自己的业务类型快速扩展成完整的 TypeScript GraphQL 服务。【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址: https://gitcode.com/gh_mirrors/pr/prisma1创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

SAP作业类型主数据维护:KL01创建/修改/显示全流程与避坑指南
SAP作业类型主数据维护:KL01创建/修改/显示全流程与避坑指南

简介:面向SAP实施项目团队及成本会计用户,这份作业类型主数据维护手册模板以标准化方式梳理了CO模块中作业类型的设立、统计与分摊逻辑,同时涵盖编码原则和与次级成本要素的对应关系,适合作为用户操作手册编写底稿或内部培训材料。… · 2026/9/23 16:33:56

Kubernetes 1.13.3 部署电商微服务实战:安装包与详细文档笔记
Kubernetes 1.13.3 部署电商微服务实战:安装包与详细文档笔记

简介:这份资源面向具备一定容器与 Linux 基础的云计算运维人员及微服务开发者,围绕 k8s 1.13.3 版本,提供一套电商微服务在 Kubernetes 上落地的实战案例资料,帮助读者理解从环境搭建到服务编排的完整流程。压缩包共 6 个文件&… · 2026/9/23 16:33:56

Revit二次开发:Curve.Intersect()方法踩坑与实战指南
Revit二次开发:Curve.Intersect()方法踩坑与实战指南

1. 从一次支吊架间距校审说起做Revit二次开发的朋友应该都有这种感觉:项目里真正卡你几个星期的,往往不是那些炫酷的建模功能,而是最基础的几何计算。Curve.Intersect()这个方法,乍一看名字平平无奇,点开API文档也就几… · 2026/9/23 16:33:56

DeepSeek本地化部署与DICOM分析模型微调实战指南
DeepSeek本地化部署与DICOM分析模型微调实战指南

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

EtherCAT CIA402模式选型实战:CSP、CSV、CST如何正确选择
EtherCAT CIA402模式选型实战:CSP、CSV、CST如何正确选择

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

Proton Native 快速上手指南:用 React 语法与热重载构建跨平台桌面应用
Proton Native 快速上手指南:用 React 语法与热重载构建跨平台桌面应用

桌面应用前端UI组件 【免费下载链接】proton-native A React environment for cross platform desktop apps 项目地址: https://gitcode.com/gh_mirrors/pr/proton-native 点击查看 免费下载 本指南基于 docs/quickstart.md 编写,带你从零开始安装 Prot… · 2026/9/24 1:28:07

Rust+Tauri数据库工具dbx:80+驱动静态集成与本地AI SQL实践
Rust+Tauri数据库工具dbx:80+驱动静态集成与本地AI SQL实践

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

设备维护手册模板怎么设计:结构、字段与Word落地
设备维护手册模板怎么设计:结构、字段与Word落地

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

MySQL 内核实战(5):redo log、undo log 与崩溃恢复
MySQL 内核实战(5):redo log、undo log 与崩溃恢复

问题背景 上一篇把写路径的锁与死锁讲完,留了一个尾巴:事务"排队改完"只是内存里的事,它到底怎么变成磁盘上摔不碎的事实?这正是崩溃恢复要回答的。相关的一线现场你大概率遇到过:mysqld 被 OOM killer 杀掉… · 2026/9/24 1:27:55

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

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

企业微信二维码