【问题标题】: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;
    }
} 

【问题讨论】:

    标签: graphql apollo apollo-server apollostack


    【解决方案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 架构不应该受你在数据库中存储方式的影响,它应该主要由前端需求驱动。
    猜你喜欢
    • 2023-02-26
    • 2019-12-21
    • 2018-11-25
    • 2020-10-03
    • 2012-11-26
    • 2020-03-17
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多