使用Prisma创建的CRUD在GraphQL服务器上进行(部分修改后)发布:GraphQL之旅(5)
从GraphQL服务器导入API需要明确声明
在Prisma中,它会自动为我们创建一个名为OpenCRUD的基本API,但要在GraphQL服务器(如apollo或graphql-yoga)中公开此API,我们需要进行导入声明。
首先,我们将数据类型定义为User。
type User {
id: ID! @unique
name: String!
}
在graphql-yoga中,宣告的位置是schema.graphql。
我会按照下面的方式来描述。
# import User from './generated/prisma.graphql'
type Query {
user(id: ID!): User
users: [User!]!
}
type Mutation {
createUser(name: String!): User
}
接下来,在graphql服务器应用的index.js文件中编写前面声明的API解析器。
这样,通过Prisma生成的OpenCRUD将与API连接起来。
const { Prisma } = require('prisma-binding')
const resolvers = {
Query: {
user: (_, args, context, info) => {
return context.prisma.query.user({ where: { id: args.id,}},info)
},
users: (_, args, context, info) => {
return context.prisma.query.users({}, info);
},
},
Mutation: {
createUser: (_, args, context, info) => {
return context.prisma.mutation.createUser({data: {name: args.name}}, info)
},
},
}
上述的解析器表示具有以下API的连接。
API種別公開するAPI元のPrismaのAPIQuery
user(id: ID)
(少し元と違う)context.prisma.query.user(where: {id: ID})
Queryusers
context.prisma.query.users
MutationcreateUser(name: String)
(少し元と違う)context.prisma.query.createUser(data: {name: String})
将其转变为形式不同并公开API。
最后一个 createUser 方法与原始的 API 稍有不同,参数从 data: {name: String} 变为了 name: String,这意味着它是基于接受 data 对象作为参数的 API 上创建的一个更简单的只接受 name 作为参数的 API。
- 変形したところ(args.nameがdataオブジェクトに入れられている)
createUser: (_, args, context, info) => {
return context.prisma.mutation.createUser({data: {name: args.name}}, info)
},
请参考
OpenCRUD是一个GraphQl库,可以帮助开发者构建强大的CRUD(创建、读取、更新、删除)功能。Prisma教程是一个教授如何使用Prisma构建GraphQL服务器的教程。Hello World GraphQL服务器是一个最基础的GraphQL服务器,用于展示如何搭建最简单的GraphQL工程。