PRISMA基础:入门二

本文属使用Prisma构建GraphQL服务系列。

通过PRISMA基础:入门一已了解PRISMA的基础,现在我们来看看:如何部署Prisma服务,如何使用查询(queries)和突变(mutations)访问GraphQL API。

本文主要介绍通过修改数据模型(Data Model)更新API,如下:

  • 修改数据模型(Data Model);
  • 部署更改以更新服务的API;

修改数据模型(Data Model)

这两篇(PRISMA入门一 和 本文 )最后要做的事情是:如何通过修改数据模型(Data Model)以更新API。

我们希望对数据模型(Data Model)进行如下修改:

  • User类型添加age 字段;
  • 跟踪User最初创建或上次更新的确切时间。
  • 添加新的Post类型及其字段。
  • UserPost类型之间创建一对多关系来表示一个User可以创建多个Post节点。

(1) 首先将所需的字段添加到User类型中:

type User {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  name: String!
  age: Int
}

age字段的类型为Int,在User类型上不是必须的,这意味着可以存储年龄为空的User节点(事实上,之前创建的名为Sarah的User就是这种情况)。

另一方面createdAtupdatedAt实际上是由Prisma管理的特殊字段。Prisma内部始终维护这些字段 - 但是只有在您将它们添加到数据模型中的类型定义时,它们才会暴露在您的API中(id字段也是如此)。

注意:现在,createdAtupdatedAtid这些字段的值是只读的。后面可以通过常规突变(mutations)来设置这些字段的值。要了解有关此功能和时间表的更多信息,请查看此GitHub issue。

此时,您所做的更改只是本地的,如果您现在用GraphQL Playground打开它,将无法访问新加字段,因为还没有部署。

部署修改以更新API

(2) 要使更改生效,您需要再次部署该服务。在hello-world目录(见PRISMA入门一)中,运行以下命令:

prisma deploy

您现在可以打开一个新的GraphQL Playground或reload已打开的schema(用于reload schema的按钮是GraphQL API的URL旁边的刷新按钮)。
如上搞定后,现在可以访问User类型中新加的字段了。

(3) 试试下面这个突变(mutation)创建新的User节点,并设置其age字段:

mutation {
  createUser(data: {
    name: "John"
    age: 42
  }) {
    id
    createdAt
    updatedAt
  }
}

最后,在本教程中,我们希望将Post类型添加到数据模型中,并创建与现有User类型的关系。

在类型之间创建关系非常自然(natural):您只需添加一个相关类型的新字段来表示关系的一端。关系可以 (但不必)双向进行。

继续,我们开始定义带关系的新Post类型。

(4) 打开datamodel.graphql并添加以下类型定义:

type Post {
  id: ID! @unique
  title: String!
  author: User!
}

(5) 要应用这些更改,您需要再次在hello-world目录内运行prisma deploy

每篇Post现在都需要一个User节点作为其作者,这种工作方式是通过使用connect参数来进行嵌套突变(mutations)。

(6) 例如,您可以发送以下突变(mutations)以将新的Post节点与现有的User节点连接起来(您当然必须将__USER_ID__占位符替换为用户的实际ID):

mutation {
  createPost(data: {
    title: "GraphQL is awesome"
    author: {
      connect: {
        id: "__USER_ID__"
      }
    }
  }) {
    id
  }
}

我们还要添加关系的另一端,以便UserPost类型之间有适当的一对多关系。

(7) 打开datamodel.graphql并向User类型添加一个名为posts的新字段,代码如下所示:

type User {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  name: String!
  age: Int
  posts: [Post!]!
}

就是这么简单!新posts字段表示由该User创建的发布节点的列表。

(8) 当然,现在这也允许您发送嵌套查询(queries),您要求所有User节点以及这些User的所有Post节点:

{
  users {
    name
    posts {
      title
    }
  }
}

你可能感兴趣的:(PRISMA基础:入门二)