在Prisma上开发的GraphQL API发布

将Prisma中的架构迁移到graphql-yoga中。

上一次我们谈到了在Prisma上的API开发。
所需的数据库和模式定义已经准备就绪。

本次的工作是构建一个真正的API来进行公开。这是一种被称为“前端后端(BFF)”的服务器。

graphql2.png

在中国使用了被Prisma官方文档推荐的graphql-yoga。

前提条件:已经建立了Prisma+DB。

假设在之前创建的graphql-psql-k8s文件夹中已经有了使用Prisma开发的API的各种文件。
而且,假设Prisma服务器正在http://192.168.99.100:30432/上启动。

graphql-psql-k8s/
├── datamodel.graphql
├── docker-compose.yml
├── k8s
│   ├── postgres-deployment.yaml
│   ├── postgres-persistentvolumeclaim.yaml
│   ├── postgres-service.yaml
│   ├── prisma-deployment.yaml
│   └── prisma-service.yaml
└── prisma.yml

(k8s文件夹是可选的)- k8s文件夹是一个选项。

模式是一个简单的东西,如下所示。

type User {
  id: ID! @unique
  name: String!
}

创建graphql-yoga文件夹

在 graphql-psql-k8s 文件夹所在的同一层级(旁边)创建另一个 graphql-yoga 文件夹。

graphql-psql-k8s
graphql-yoga/
├── .graphqlconfig.yaml
└── src
    ├── index.js
    └── schema.graphql

将下述内容复制到各个文件中。

projects:
  app:
    schemPath: src/schema.graphql
    extensions:
      endpoints:
        default: http://localhost:4010
  prisma:
    schemaPath: src/generated/prisma.graphql
    extensions:
      prisma: ../graphql-psql-k8s/prisma.yml
const { GraphQLServer } = require('graphql-yoga')
const { Prisma } = require('prisma-binding')

const resolvers = {
  Query: {
    user: (_, args, context, info) => {
      return context.prisma.query.user(
        {
          where: {
            id: args.id,
          },
        },
        info,
      )
    },
  },
}

const server = new GraphQLServer({
  typeDefs: 'src/schema.graphql',
  resolvers,
  context: req => ({
    ...req,
    prisma: new Prisma({
      typeDefs: 'src/generated/prisma.graphql',
      endpoint: 'http://192.168.99.100:30432',
    }),
  }),
})
server.start({ port: 4010,}, ({port}) => console.log(`GraphQL server is running on http://localhost:${port}`))
# import User from './generated/prisma.graphql'

type Query {
  user(id: ID!): User
}

请注意:不要以为schema.graphql的第一行是注释,并将其删除。这是真正的import语句。(我在这里卡住了)

下载库文件并启动服务器

如果没有安装graphql命令,请进行安装。

yarn global add graphql-cli

安装库。

yarn add graphql-yoga prisma-binding

我从Prisma中提取模式。

graphql get-schema -p prisma

目前,将呈现如下所示的文件夹。

.
├── .graphqlconfig.yaml
├── package.json
├── node_modules
├── src
│   ├── generated
│   │   └── prisma.graphql
│   ├── index.js
│   └── schema.graphql
└── yarn.lock

现在是启动时间。

node src/index.js

启动后,访问

访问正在运行的graphql-yoga,网址是http://localhost:4010。

image.png

补充

我把源代码放在了GitHub上。

歌曲查询服务(GraphQL-PSQL-K8s)

bannerAds