GraphQL 同构模型

Posted

技术标签:

【中文标题】GraphQL 同构模型【英文标题】:GraphQL isomorfic model 【发布时间】:2016-08-13 03:18:43 【问题描述】:

我计划将 Angular2 与 GraphQL 一起使用。我正在寻找一种在客户端上使用 GraphQL 模型来动态构建查询的方法。我该如何实现这个想法?

GraphQL 模型看起来像

exports default new GrapqhQLObjectType(
name: 'User',
description: 'A user type in our application',
fields: () => 
  _id:
    type: new GraphQLNonNull(GraphQLID)
  ,
  name:
    type: new GraphQLNonNull(GraphQLString)
  ,
  surname:
    type: new GraphQLNonNull(GraphQLString)
  ,
  age: 
    type: GraphQLInt
  
    
  );

从 GraphQL.JS 导入所有数据类型

我想通过这个 GraphQL 模型验证客户端上的数据数据类型。

GraphQL 查询看起来像

mutation RootMutation 
editUser (name: "Bjarne", age:64) 
    name
    surname
    _id
    age


我更改了 Angular2 数据年龄值,我想请求上面自动生成

【问题讨论】:

你能详细说明一下吗?它可以让了解 Angular2 但不了解 GraphQL 的人提供答案,反之亦然。 【参考方案1】:

一种方法是使用以字符串形式发送的 GraphQL 的自省查询来自省模式(如下所示)。您可以通过交叉检查从模式返回的类型来在本机应用程序中执行类型验证。除此之外,您可以使用 GraphiQL (https://github.com/graphql/graphiql) 发送请求,以确保您的查询/变异在您的应用中包含之前是正确的。

query IntrospectionQuery 
 __schema 
 queryType  name 
 mutationType  name 
 subscriptionType  name 
 types 
 ...FullType
 
 directives 
 name
 description
 locations
 args 
 ...InputValue
 
 
 

fragment FullType on __Type 
 kind
 name
 description
 fields(includeDeprecated: true) 
 name
 description
 args 
 ...InputValue
 
 type 
 ...TypeRef
 
 isDeprecated
 deprecationReason
 
 inputFields 
 ...InputValue
 
 interfaces 
 ...TypeRef
 
 enumValues(includeDeprecated: true) 
 name
 description
 isDeprecated
 deprecationReason
 
 possibleTypes 
 ...TypeRef
 

fragment InputValue on __InputValue 
 name
 description
 type  ...TypeRef 
 defaultValue

fragment TypeRef on __Type 
 kind
 name
 ofType 
 kind
 name
 ofType 
 kind
 name
 ofType 
 kind
 name
 
 
 

【讨论】:

以上是关于GraphQL 同构模型的主要内容,如果未能解决你的问题,请参考以下文章

使用 GraphQL,声明一个与 GraphQL“类型”没有任何明显差异的支持模型“类”有啥好处或必要性?

如何将“typeorm”模型转换为 graphql 有效负载?

从 Rest(Express) 迁移到 GraphQL:模型(mongoose) 在 graphQL 解析器中不起作用

graphql + mongoose + typescript,如何减少重复的模型定义

如何定义包含复杂对象的 GraphQL 类型模型?

如何将模型与 GraphQL 界面上的“具有一个”关系相关联