使用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のAPIQueryuser(id: ID) (少し元と違う)context.prisma.query.user(where: {id: ID})Queryuserscontext.prisma.query.usersMutationcreateUser(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工程。

广告
将在 10 秒后关闭
bannerAds