You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL中Input类型与Interface类型的区别是什么?

GraphQL Input类型与Interface类型的核心差异

这俩是完全不同的概念,作用场景完全不重叠,核心区别可以从这几个维度看:

1. 用途定位天差地别

  • Input类型:纯纯的「输入参数容器」,专门用来给服务端传复杂数据——比如mutation里创建/更新资源的参数、query里的多条件筛选参数。它只能作为操作(query/mutation)的参数使用,绝对不能作为返回类型。
  • Interface类型:是「抽象类型约定」,定义一组通用字段,让其他具体的Object类型去实现它。主要用于返回数据时,支持多态输出——比如一个animals查询可以返回Dog、Cat等不同类型,但它们都遵循Animal接口的字段规范。

2. 语法和使用限制不同

Input类型示例

定义时用input关键字,内部只能嵌套标量、枚举或其他Input类型,不能包含Object/Interface类型,也没有字段解析逻辑:

input CreatePostInput {
  title: String!
  content: String!
  tags: [String]
}

使用时作为mutation的参数:

mutation PublishPost($input: CreatePostInput!) {
  publishPost(input: $input) {
    id
    title
  }
}

Interface类型示例

定义时用interface关键字,内部可以包含各种类型,字段可以有对应的解析函数;具体类型要通过implements实现接口:

interface Media {
  id: ID!
  title: String!
  createdAt: String!
}

type Video implements Media {
  id: ID!
  title: String!
  createdAt: String!
  duration: Int!
}

type Article implements Media {
  id: ID!
  title: String!
  createdAt: String!
  wordCount: Int!
}

使用时作为返回类型,支持片段查询不同子类型的专属字段:

query GetMedia {
  media {
    id
    title
    ... on Video {
      duration
    }
    ... on Article {
      wordCount
    }
  }
}

3. 设计目标不同

  • Input类型是为了简化复杂输入的传递,把零散的参数打包成结构化的对象,提升API的可读性和复用性。
  • Interface类型是为了实现类型抽象与多态,让API可以灵活返回不同但有共性的类型,同时保持类型系统的扩展性——比如后续新增Audio类型,只要实现Media接口,就能直接加入media查询的返回结果里。

内容的提问来源于stack exchange,提问作者WebSurfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:22:06