PRISMA基础:入门一

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

本教程学习如何使用Prisma对数据库生成GraphQL API。

主要步骤如下:

  • 安装Prisma CLI
  • 使用prisma init构建Prisma服务
  • 使用GraphQL Playground查看API,发送查询(queries)和突变(mutations)

安装Prisma CLI

使用Prisma CLI管理Prisma服务。
可使用npm(或yarn)安装。

打开终端工具,运行如下命令安装Prisma CLI:

npm install -g prisma
# or
# yarn global add prisma

构建Prisma服务

打开终端,跳转到任意目录。然后用如下命令构建Prisma 服务:

prisma init hello-world

此命令创建一个hello-world新目录,包括2个必须的文件:

  • prisma.yml:服务的根配置文件,包含有关服务的信息,例如名称(用于生成服务的HTTP端点),用于保护对端点访问的及应该在何处部署的secret。
  • datamodel.graphql(也可能为不同名称,如types.graphql):此文件使用GraphQL SDL定义数据模型(data model)。

来看看生成的文件:

prisma.yml

endpoint: https://eu1.prisma.sh/public-mountainninja-311/hello-world/dev
datamodel: datamodel.graphql

注意,endpoint对于会略有不同,因为public-mountainninja-311是随机生成的ID,对于部署到Sandbox的每个Prisma API都会有所不同。

以下是生成的prisma.yml中的属性说明:

  • endpoint:定义Prisma API的HTTP端点;
  • datamodel:所包含数据模型的文件的路径。

datamodel.graphql

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

数据模型包含应用程序域中实体的类型定义。此刻,您将开始使用带有idname的非常​​简单的User类型。

@unique指令(directive)表示数据库中每个Userid唯一,Prisma会始终确保其唯一。

Prisma API现已部署并准备好接收查询(queries),突变(mutations)和订阅(subscriptions)。

使用GraphQL Playground查看API

你的API已被部署 - 但你怎么知道如何与它交互?它的API实际上是什么样的?

通常,生成的API允许对数据模型中的类型执行CRUD操作。它还公开了GraphQL订阅,允许客户订阅特定事件并实时接收更新。

了解数据模型是API的基础很重要。每次对数据模型进行更改(并运行prisma deploy之后)时,GraphQL API都会相应更新。

由于您的数据模型包含User类型,因此Prisma API现在允许其客户端创建,读取,更新和删除该类型的实例(也称为节点nodes)。尤其是,现在基于User类型生成以下GraphQL操作:

  • user:通过其id查询(或另一个@unique字段)检索单个User节点
  • users:查询以检索User节点列表。
  • createUser: 突变(Mutation)创建一个新的User节点。
  • updateUser: 突变(Mutation)更新现存User节点。
  • deleteUser: 突变(Mutation) 删除现存User节点。

注意:以上操作列表不完整。 Prisma API公开了多个操作,例如,允许批量更新/删除许多节点。但是,所有操作都可以创建,读取,更新或删除数据模型中定义的类型的节点。

要实际使用这些操作,您需要一种将请求发送到服务API的方法。由于该API通过HTTP公开,因此您可以使用curl或Postman等工具与之交互。但是,GraphQL实际上具有更好的工具:GraphQL Playground,一种交互式GraphQL IDE。

要打开GraphQL Playground,可以再次使用Prisma CLI。只需在hello-world目录中运行以下命令:

prisma playground

这将打开一个GraphQL Playground,如下图:


GraphQL Playground

注意:Playground可以作为独立的桌面应用程序安装在您的机器上。如果您没有安装Playground,该命令会自动在您的默认浏览器中打开一个Playground。

GraphQL API的一个非常酷的特性是它们有效地自我说明。 GraphQL Scheme定义了API的所有操作,包括输入参数和返回类型。这允许像GraphQL Playground这样的工具自动生成API文档。

要查看Prisma API的文档,请单击Playground窗口右边缘上的绿色SCHEMA按钮

这带来了Playground的文档窗格。最左边的列是API接受的所有操作的列表。然后,您可以深入了解每个操作涉及的输入参数或返回类型的详细信息。

GraphQL API Documents

发送查询和突变(queries and mutations)

好吧!借助迄今为止学到的一切,您已准备好针对您的API发布一些查询和突变(queries and mutations)。让我们从users查询开始,检索当前存储在数据库中的所有User节点。 在左边的Playground窗格中输入以下查询,然后单击Play按钮(或使用快捷键CMD + Enter):

query {
  users {
    name
  }
}

此时,服务器只返回一个空列表。这并不奇怪,因为我们到目前为止还没有实际创建任何User节点。因此,让我们改变它,并使用createUser突变将第一个User节点存储在数据库中。

在Playground中打开一个新选项卡,在左边的Play中输入以下突变:

mutation {
  createUser(data: {
    name: "Sarah"
  }) {
    id
  }
}

这一次,服务器的响应实际上包含了一些数据(请注意,当服务器在创建时为每个新节点生成一个全局唯一的ID时,该ID当然会有所不同)

{
  "data": {
    "createUser": {
      "id": "cjc69nckk31jx01505vgwmgch"
    }
  }
}

您现在可以返回到users查询的前一个选项卡,并再次发送查询。
这次,刚刚创建的User节点在服务器响应中返回:

users

请注意,API还提供强大的过滤,排序和分页功能。以下是为user查询提供相应输入参数的查询示例。

检索name包含字符串“ra”的所有User节点

query {
  users(where: {
    name_contains: "ra"
  }) {
    id
    name
  }
}

检索按name降序排列的所有User节点

query {
  users(orderBy: name_DESC) {
    id
    name
  }
}

检索一部分User节点(列表中的位置20-29)

query {
  users(skip: 20, first: 10) {
    id
    name
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容