Prisma的 API 是什么?
Prisma服务暴露的 GraphQL API是基于部署的 data model 自动生成的. Prisma API 为 data model 中的 type 定义了 CRUD 操作,
探索 Prisma API
Graphql Playground
是探索 Prisma API 的最好工具. 使用prisma playground
可以打开这个工具
Concepts
data model 和 Prisma database schema
高级概念
1 | type Post { |
Retrive a single node by its email
1 | query { |
update single node title
1 | mutation { |
立刻更新多个 node 的published
1 | mutation { |
connections
connections基于的是 Relay connection model.除了提供分页信息,还提供诸如 aggregation 等信息
1 | query { |
认证
token:在发送 query 和 mutation 时要在 http header 中 添加 token
Error handling
有两种错误:
- Application error: 表示请求无效
- Internal server errors: 通常意味着 Prisma的服务有问题. 查看服务日志可以提供更多的信息.
Queries
Prisma 提供两种查询
- 对象查询: 获取特定 type的单个或多个 node
- Connection 查询:提供高级特性
- Hierarchical 查询: 跨关联获取数据
- Query 参数: 允许过滤,排序, 分页等操作
Prisma API 都是基于 data model.
1 | type Post { |
对象查询:
1 | query { |
使用 where
参数
1 | query { |
获取 大于18岁的用户:
1 | query { |
也可以跨关系查询, 获取Post
作者年龄超过18岁的节点
1 | query { |
connections queries
在特殊案例中要使用高级特性, 可以用 connection queries. 他们是 Relay connection 的扩展. Relay connections 的核心概念是提供 data graph 中edge 的 meta-information.例如 例如 edge 不仅提供对象的信息,还提供关联的cursor
,可以借此实现强有力的分页功能.
我们使用postsConnection
query 来获取所有的Posts
nodes.同时也请求了每个 edge的cursor
.
1 | # Fetch all posts |
connection 查询也提供聚合方式
1 | # Count all posts with a title containing 'GraphQL' |
跨关联查询数据
datamodel 中可用的每个 relation 都在两个 model 中添加新的字段
如下,我们活儿特定的 User, 所有与之有关的 Post nodes,
1 | query { |
Query 参数
- 使用
orderBy
对数据排序 - 使用
where
对查询的标量或者过滤器进行筛选 - 使用
first
,last
,after
和skip
提供分页
通过字段进行排序
orderBy:<field>_ASC
,orderBy:<field>_DESC
根据标题升序排列所有的 Post node
1 | query { |
Filtering by value
查询所有未出版的 Post:
1 | query { |
查询含有列表标题之一的所有 Post:
1 | query { |
Relation filters
查询用户角色作者的所有 Post
1 | query { |
组合多个 过滤器
使用 OR或者AND
查询所有的已经出版的Post
nodes, 并且标题在列表中
1 | query { |