本文属使用Prisma构建GraphQL服务系列。
Prisma使用专用的中间格式导入和导出数据:规范化数据格式(Normalized Data Format,NDF)。
+--------------+ +----------------+ +------------+
| +--------------+ | | | |
| | | | | | | |
| | SQL | | (1) transform | NDF | (2) chunked upload | prisma |
| | MongoDB | | +--------------> | | +-------------------> | |
| | JSON | | | | | |
| | | | | | | |
+--------------+ | +----------------+ +------------+
+--------------+
在本教程中,您将执行以下步骤:
- 创建一个Prisma服务
- 为服务种一些初始数据
- 导出NDF中的数据
- 将服务部署到新
stage
- 导入NDF中的数据
创建Prisma服务
(1) 在终端中,切换至您选择的目录并运行以下命令:
prisma init import-example
(2) 当提示使用什么样的模板时,选择Minimal setup: database-only
。
这创建了一个名为import-example
的新目录,其中包含根配置文件prisma.yml
以及datamodel.graphql
中服务数据模型(data model)的定义。
接着,您将更新数据模型也包括关系。
(3) 打开datamodel.graphql
并将内容更改为如下所示:
type User {
id: ID! @unique
name: String!
posts: [Post!]!
}
type Post {
id: ID! @unique
title: String!
author: User!
}
创建初始数据
接下来,您将为该服务创建一些初始数据。
(4) 在import-example
目录中创建一个名为seed.graphql
的新文件,并向其添加以下突变:
mutation {
createUser(data: {
name: "Sarah",
posts: {
create: [
{ title: "GraphQL is awesome" },
{ title: "It really is" },
{ title: "How to GraphQL is the best GraphQL tutorial" }
]
}
}) {
id
}
}
现在你需要告诉CLI你创建了这个文件。您可以通过在prisma.yml
中设置seed
属性来完成此操作。
(5) 打开prisma.yml
并更新其内容,如下所示:
service: import-example
stage: dev
datamodel: datamodel.graphql
# to enable auth, provide
# secret: my-secret
disableAuth: true
seed:
import: seed.graphql
在部署服务时,CLI现在会将seed.graphql
中定义的突变发送到您的服务的API。
(6) 通过运行以下命令来部署Prisma服务:
prisma deploy
(7) 当提示您在何处(即向哪个群集)部署您的Prisma服务时,请选择其中一个公共群集选项:prisma-eu1
或prisma-us1
。 (请注意,在使用Docker进行部署时初始化数据也可以)
CLI现在部署该服务并在seed.graphql
中执行突变。为了说明种子数据效果,你可以打开一个GraphQL Playground并发送以下查询:
{
users {
name
posts {
title
}
}
}
Prisma API将返回以下数据:
{
"data": {
"users": [
{
"name": "Sarah",
"posts": [
{
"title": "GraphQL is awesome"
},
{
"title": "It really is"
},
{
"title": "How to GraphQL is the best GraphQL tutorial"
}
]
}
]
}
}
导出NDF数据
是时候以标准化数据格式导出了。
(8) 在终端import-example
目录中,执行以下命令:
prisma export
这将创建一个名为export-__TIMESTAMP__.zip
的新文件,其中__TIMESTAMP__
表示导出的确切时间。 zip目录中的文件是NDF文件。要了解更多关于结构的信息,请查看NDF参考文档。
部署服务到新地方
接下来,您将通过将服务部署到新stage
来创建服务的“克隆”。
(9) 打开prisma.yml
并将stage
属性设置为新值。同时删除seed
和cluster
属性!
service: import-example
stage: test
datamodel: datamodel.graphql
# to enable auth, provide
# secret: my-secret
disableAuth: true
(10) 再次运行prisma deploy
将服务部署到新的test
stage。
(11) 像上面一样,当提示您在何处(即向哪个群集)部署您的Prisma服务时,请选择其中一个公共群集选项:prisma-eu1
或prisma-us1
。
导入NDF数据
现在服务正在运行,您可以从zip目录导入数据!
(12) 在终端中运行以下命令。请注意,您需要将__DATA__
占位符替换为导出的zip目录的路径(例如export-2018-01-13T19:28:25.921Z.zip
):
prisma import --data __DATA__
搞定!为了验证导入了数据,你可以在GraphQL Playground打开当前test
的stage并重新发送上述查询。