2017-04-18 15 views
5

我已经通过这个伟大的要点读 - GraphQLInterfaceType在GraphQL中,当使用`interfaces`特性时如何处理`resolveType`和`isTypeOf`?

但仍然有一些困惑:

  1. 真的有必要定义ES6 classes所有GraphQL模式类型?
    • 这里主要关注的是:我们最后会得到很多空的ES6 classes和等价数量的GraphQL types
  2. 如果不是,那么在使用interfaces功能时如何正确处理resolveTypeisTypeOf
  3. 即使我定义的所有ES6 classes所有GraphQL types,但原始数据在不同的地方用不同的技术像grpc+protobuf,它没有任何关系,这些类定义的构造,所以在这里请问怎么isTypeOf: (value) => value instanceof Dog工作?

回答

3

resolveTypeisTypeOf的实施非常灵活,原因在于:它非常适用于特定应用。这取决于数据库,数据模型,类似有多类似,等等。有些后端可能为所有模型都有单独的ES6类,特别是在使用ORM时,在查询数据库时会创建这些类的实例。但是一个ORM是没有必要的。你不应该被要求实例化任何其他类来找出GraphQL类型。

在某些情况下,您可以仅从对象上的属性确定类型。如果您的应用没有这种情况,您可以做些事情来提供提示。这是一个SQL示例。

SELECT 
    id, 
    body, 
    author_id, 
    post_id, 
    'Comment' AS "$type" -- leave a hint to resolve the type 
FROM comments 
UNION 
SELECT 
    id, 
    body, 
    author_id, 
    NULL AS post_id, 
    'Post' AS "$type" -- leave a hint to resolve the type 
FROM posts 

此查询提供了一个“类型暗示”,附加的计算列,使得实现resolveType是一个简单的属性查找。其他DBMS可以使用类似的策略。

相关问题