Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GraphQLInterfaceType中的接口是什么?

GraphQLInterfaceType中的接口是什么?
EN

Stack Overflow用户
提问于 2018-03-15 12:35:12
回答 1查看 660关注 0票数 0

我有以下代码片段:

代码语言:javascript
运行
AI代码解释
复制
export const NodeInterface = new GraphQLInterfaceType({
  name: 'Node',
  fields: {
    id: {
      type: new GraphQLNonNull(GraphQLID)
    }
  },
  resolveType: (source) => {
    if (source.__tableName === tables.users.getName()) {
      return UserType;
    }
    return PostType;
  }
});

以及正在使用该接口的GraphQLObjectType

代码语言:javascript
运行
AI代码解释
复制
export const PostType = new GraphQLObjectType({
  name: 'Post',
  interfaces: [ NodeInterface ],
  fields: {
    id: {
      type: new GraphQLNonNull(GraphQLID),
      resolve: resolveId
    },
    createdAt: {
      type: new GraphQLNonNull(GraphQLString),
    },
    body: {
      type: new GraphQLNonNull(GraphQLString)
    }
  }
});

为什么我要定义一个接口?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-15 14:43:51

在GraphQL中,接口实现了两个目的:

  1. 它们确保实现它们的类型也实现特定的字段。例如,这里的Node接口有一个id字段--这意味着实现Node接口的任何类型都需要有一个id字段(并且id需要是一个ID标量,就像接口中的ID标量) --与这些参数相同--接口中字段上的任何参数也必须存在于实现类型中的匹配字段中。
  2. 当一个字段需要两个或多个类型时,可以使用它们。字段将始终解析为一种类型或标量,但是,通过使用接口(或联合),我们在模式中指出,字段可以将解析为一组类型之一。

因此,假设我们在代码段中有一个Node,实现它的一些类型,以及返回一个节点的查询:

代码语言:javascript
运行
AI代码解释
复制
interface Node {
  id: ID!
}

type Foo implements Node {
  id: ID!
  someFooField: String!
  someOtherFooField: Int!
}

type Bar implements Node {
  id: ID!
  someBarField: String!
  someOtherFooField: Int!
}

type Query {
  getNode(id: ID!): Node!
}

在我们的示例中,getNode可以解析为FooBar。当我们编写查询时,我们不知道哪个查询会被解析。但是,由于我们知道接口需要id字段,所以我们可以编写如下查询:

代码语言:javascript
运行
AI代码解释
复制
query OperationName {
  getNode(id: "SOME_ID"){
    id
  }
}

但是,如果我们也需要查询someBarField,则不能这样做:

代码语言:javascript
运行
AI代码解释
复制
query OperationName {
  getNode(id: "SOME_ID"){
    id
    someBarField
  }
}

因为Foo没有这个字段。相反,我们必须利用一个片段,如下所示:

代码语言:javascript
运行
AI代码解释
复制
query OperationName {
  getNode(id: "SOME_ID"){
    id
    ... on Bar {
      someBarField
    }
  }
}

然后将返回someBarField,但前提是字段解析为Bar类型。如果是Foo,则只返回id。类似地,您可以从实现相同接口的任何类型请求非共享字段:

代码语言:javascript
运行
AI代码解释
复制
query OperationName {
  getNode(id: "SOME_ID"){
    id
    ... on Bar {
      someBarField
    }
    ... on Foo {
      someFooField
    }
  }
}

最后但并非最不重要的是,应该提到工会的工作方式是非常相似的。但是,与接口不同的是,没有为Union定义共享字段,因此类型不会“实现”一个联合,它只是一个联合的一部分。这意味着当请求返回一个联合的字段时,您总是必须使用片段,因为没有共享字段可请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49308725

复制
相关文章
Java中的「接口」到底是什么?
Java是一种面向对象的编程语言,提供了许多特性来支持代码的模块化和重用。其中,接口是Java中重要的概念之一。本文将介绍接口的概念、定义、特点以及在Java中的使用方式,帮助读者更好地理解和应用接口的概念。
海拥
2023/07/05
3910
【说站】java中Runnable接口是什么?
1、Runnable是一个提供线程的界面,有一种抽象的publicabstract void run()方法。
很酷的站长
2022/11/23
6310
【说站】java中Runnable接口是什么?
uart接口是什么_各种接口的详细介绍
我面试的时候一般喜欢问应聘者一个问题:UART与RS232/RS485的区别与联系?很多人对于这个问题答得都不是很好。还有些人压根就没有想过这个问题,一直认为他们是同一个东西,就是咱们俗称的串口。
全栈程序员站长
2022/10/05
1.1K0
uart接口是什么_各种接口的详细介绍
Java中抽象类与接口的区别是什么?
抽象类与接口的区别 1. 共同点 都可以包含抽象方法; 2. 区别 抽象类是一种“类”,是使用class作为关键字来声明的;而接口是另一种数据,是使用interface作为关键字来声明的; 抽象类中可以有各种权限不同、修饰符不同的属性,也可以包含普通方法、抽象方法,或者完全没有普通方法,或者完全没有抽象方法;而接口中的所有成员都是public的,所有属性都是static、final的,在JDK 1.8之前,所有的方法都是抽象的; 普通的类与抽象类的关系是“继承”的关系,当普通的类继承了抽象类后,就有义务重写
海拥
2021/08/23
4530
Java接口是什么意思_JAVA接口
supplier 英 [səˈplaɪə(r)] 美 [səˈplaɪər] n. 供应商;供应国;供应者,供给者;补充者
全栈程序员站长
2022/11/03
1.4K0
SDIO接口_gmac接口是什么意思
SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。 SDIO卡是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有蓝牙,网卡,电视卡等。支持三种不同的数据总线模式:1位(默认)、4位和8位。 SDIO协议是由SD卡的协议演化升级而来的,很多地方保留了SD卡的读写协议,同时SDIO协议又在SD卡协议之上添加了CMD52和CMD53命令。由于这个,SDIO和SD卡规范间的一个重要区别是增加了低速标准,低速卡的目标应用是以最小的硬件开始来支持低速I/O能力。低速卡支持类似调制解调器,条形码扫描仪和GPS接收器等应用。高速卡支持网卡,电视卡还有“组合”卡等,组合卡指的是存储器+SDIO。 SDIO总线和USB总线类似,SDIO总线也有两端,其中一端是主机(HOST)端,另一端是设备端(DEVICE),采用HOST- DEVICE这样的设计是为了简化DEVICE的设计,所有的通信都是由HOST端发出命令开始的。在DEVICE端只要能解溪HOST的命令,就可以同HOST进行通信了。SDIO的HOST可以连接多个DEVICE。
全栈程序员站长
2022/11/09
1.3K0
SDIO接口_gmac接口是什么意思
sdio接口是什么_如何理解api接口
做毕业设计需要用到大量的音频文件,一般的存储器满足不了存储要求,故选择SD卡作为存储器件。在这里记录一下自己的学习经历,学习一个新的IC,无非是要么根据时序图写出Read和Write函数,要么是根据通信总线和IC相关操作指令去完成Read和Write函数。只有能与对应IC“说话”,我们才能去开发它更多地可能性。这里以原子探索者为例,为大家介绍一下SD卡相关知识。
全栈程序员站长
2022/11/09
2.1K0
sdio接口是什么_如何理解api接口
Tps是什么_PHP接口
TPS,为Transaction processing systems的缩写,是一个事务处理系统,又称为电子数据处理系统(electronic data processing system,EDPS),它是指面向企业最底层的管理系统,对企业日常运作所产生的事务信息进行处理。
全栈程序员站长
2022/11/07
1.6K0
开发口中的「接口」到底是什么
在定义一个接口时,会写好接口路径和接口方法名的映射,然后前端通过接口路径来调用方法。
产品的技术小课
2021/11/02
1.2K0
开发口中的「接口」到底是什么
Spring Boot 接口解密是什么?
为了让我们开发的这个工具更加通用,也为了复习一下自定义 Spring Boot Starter,这里我们就将这个工具做成一个 stater,以后在
大发明家
2021/12/21
1K0
接口测试是什么?如何测试?
接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。
顾翔
2020/07/07
1.8K0
接口测试是什么?如何测试?
jQuery中的$是什么
但在JS应用库JQUERY的作者将之做为一个自定义函数名了,这个函数是获取指定网页元素的函数,使用非常之频繁,所以好多新手不知道,还以为$是JS的什么特殊语法。
PM吃瓜
2019/08/12
1.7K0
前端对接口是什么意思_接口返回json格式
json前两个字就是js,说明其与js必然存在一些联系,其实json可以理解为盛装js数据的一个容器(不是只能装js的,不要扣这些),说白了,就是储存数据的一个小玩意儿。其实如果你身边有搞前端的同学,不难发现,他们会经常说接口、报文,对于一个后端小白的我来说,也很想明白这究竟是个什么东东,最近工作一直做前后端开发,所以跟json结下了缘。
全栈程序员站长
2022/11/18
1.1K0
java中的接口概略
接口是Java中的很重要的一个知识点,首先我们要初步了解从生活中了解“接口”的概念,什么是接口?
用户7073689
2020/03/18
6040
前端中的接口聚合
详见:https://github.com/LuckyWinty/ToolLibrary/tree/master/src/RequestCombo
winty
2019/12/21
1.7K0
【AI绘画接口】Midjourney是什么?Midjourney有官方接口吗?
随着AI技术的发展,AI聊天、AI绘画都从小众尝鲜逐渐应用到了生产当中。现在市面上的绘画AI并不少,而 Midjourney 是其中最好用的之一。我们只需要输入一些提示词,Midjourney 就能根据输入的提示词自动生成符合要求的几张图片以供挑选,并且还可以用命令对生成的图片进行修改。就算是没有任何的绘画基础的人,也可以靠 Midjourney 在几分钟内创作出高质量的图片了,这大大降低了绘画的门槛,也让更多开发者看到了可能。很多开发者将 Midjourney 接入到飞书、网站、微信等场景,甚至还打算接入到产品中。可以说,Midjourney 简单快捷又高质量的特点注定了它未来可期。
用户10428865
2023/09/12
6430
【AI绘画接口】Midjourney是什么?Midjourney有官方接口吗?
Java 中的 Future 接口
Java 1.5 提供了 java.util.concurrent.Future 接口,处理异步调用和并发处理时非常有用,今天我们来研究一下这个接口。在 JDK 中对 Future 是这么描述的:
码农小胖哥
2020/03/19
6720
java中接口的作用
很多JAVA初级程序员对于接口存在的意义很疑惑。不知道接口到底是有什么作用,为什么要定义接口。       好像定义接口是提前做了个多余的工作。下面我给大家总结了4点关于JAVA中接口存在的意义:   1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。   2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要
用户1220053
2018/02/09
1.4K0
Spring 中的感知接口
如其名字一样,实现这种接口的 Bean,能自身感知到容器的存在,容器在操作 Bean 的过程中,会调用感知接口中的方法。Spring 设计的这些接口,等于埋下了很多钩子函数,让开发者能在某些关键节点上,运行自定义的代码。
水货程序员
2018/11/13
1.1K0
浅谈JavaScript中的接口
接口是面向对象JavaScript程序员的工具箱中最有用的工具之一。在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概念的重要性可见一斑。但问题在于,在JavaScript的世界中,没有内置的创建或实现接口的方法,也没有可以判断一个对象是否实现了与另一个对象相同的一套方法,这使得对象之间很难互换使用,好在JavaScript拥有出色的灵活性,这使得模拟传统面向对象的接口,添加这些特性并非难事。接口提供了一种用以说明一个对象应该具有哪些方法的手段,尽管它可以表明这些方法的含义,但是却不包含具体实现。有了这个工具,就能按对象提供的特性对它们进行分组。例如,假如A和B以及接口I,即便A对象和B对象有极大的差异,只要他们都实现了I接口,那么在A.I(B)方法中就可以互换使用A和B,如B.I(A)。还可以使用接口开发不同的类的共同性。如果把原本要求以一个特定的类为参数的函数改为要求以一个特定的接口为参数的函数,那么所有实现了该接口的对象都可以作为参数传递给它,这样一来,彼此不相关的对象也可以被相同地对待。
疯狂的技术宅
2019/03/28
7160

相似问题

GraphQLInterfaceType和GraphQLUnionType的真实世界示例

25

如何正确使用GraphQLList和GraphQLInterfaceType?

12

JavaScript中的接口是什么?

12

Java中的接口是什么?

134

Java接口中的接口是什么?

36
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档