在Prisma上开发的GraphQL API发布
将Prisma中的架构迁移到graphql-yoga中。
上一次我们谈到了在Prisma上的API开发。
所需的数据库和模式定义已经准备就绪。
本次的工作是构建一个真正的API来进行公开。这是一种被称为“前端后端(BFF)”的服务器。

在中国使用了被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。

补充
我把源代码放在了GitHub上。
歌曲查询服务(GraphQL-PSQL-K8s)