对象对象的 GraphQL 模式/解析器是啥样的?

Posted

技术标签:

【中文标题】对象对象的 GraphQL 模式/解析器是啥样的?【英文标题】:What does the GraphQL schema/resolver look like for an object of objects?对象对象的 GraphQL 模式/解析器是什么样的? 【发布时间】:2017-02-14 09:10:39 【问题描述】:

数据


    user_id: 'abc',
    movies: 
        '111': 
            title: 'Star Wars 1' 
        ,
        '112': 
            title: 'Star Wars 2' 
        
    

架构和解析器是什么样的?

这是我最好的尝试,但我从未见过这样的例子,所以真的不确定。

架构

type User 
    user_id: String
    movies: Movies

type Movies 
    id: Movie

type Movie 
    title: String

解析器

User: 
    movies(user) 
        return user.movies;
    
,
Movies: 
    id(movie) 
        return movie;
    
 

【问题讨论】:

【参考方案1】:

您仍然缺少 Query 类型,它告诉 GraphQL 您的查询可以从哪里开始。比如:

type Query 
  user(id: String): User
  movie(id: String): Movie

另外,我认为对于你的电影,你应该有 [Movie] 而不是 Movies 类型,然后是 id 在里面。所以摆脱你的 Movies 类型,然后这样做:

type User 
    id: String
    movies: [Movie]

type Movie 
    id: String
    title: String

【讨论】:

不 [电影] 期望数据是对象数组:[id: 111, title:'Star Wars 1', id: 112, title:'Star Wars 2 ']?我认为最好将电影存储为一个对象,并以它们的 id 作为键,所以如果我通过 id 删除电影将是 O(1),而不是遍历数组以将其删除 O(n)。想法?有没有办法用一个对象来做到这一点,例如电影? 你的数据库表示可以是任何你想要的。将其存储为 ID 列表是有意义的。但是在 User.movi​​es 解析器中,您可以通过获取这些 ID 的电影来将它们转换为实际的电影对象(但您不必这样做)。 GraphQL 架构不应该受你在数据库中存储方式的影响,它应该主要由前端需求驱动。

以上是关于对象对象的 GraphQL 模式/解析器是啥样的?的主要内容,如果未能解决你的问题,请参考以下文章

在 graphql-yoga 中返回枚举的解析器函数是啥样的?

默认的 GLSL 着色器是啥样的?对于版本 330

GraphQL 文件上传请求应该是啥样的?

NodeJS 本机驱动程序上的示例 MongoDB 错误是啥样的?

Java数组在内存中是啥样的

后台应用程序的响应者链是啥样的?