繁体   English   中英

Graphql 按 id 类型解析器

[英]Graphql type resolver by id

我试图通过构建具有以下架构的服务器来熟悉 Graphql:

type Game
{
    id: ID!
    players: [Player!]!
    winner: Player
    ...
}

type Player {
    id: ID!
    game: Game!
    ...
}

type Query {
    getGame(id: ID!): Game
    getPlayer(id: ID!): Player
}

和 map 到以下数据:

const games = {
    1: {
        id: 1,
        players: [2, 3],
        winner: undefined
    }
};
const players = {
    2: {
        id: 2,
        game: 1
    },
    3: {
        id: 3,
        game: 1
    },
};

在编写解析器时,我注意到很多样板代码——我必须在概念上为每个持有外键的 object 成员编写相同的字段解析器。

const typedefs = {
    Query: {
        getGame: (_, {id}) => games[id],
        getPlayer: (_, {id}) => players[id]
    },
    Game: {
        winner: (game) => players[game.winner],
        players: (game) => game.players.map(id => players[id])
    },
    Player: {
        game: (player) => games[player.id]
    }
}

有没有办法通过 ID 创建类型解析器? 例如, Player字段或查询将始终由(id) => players[id]解析,而 game 字段或查询将始终由(id) => games[id]解析。

我看到这可以使用 AWS-Amplify 的@model指令实现,但我想知道是否有更标准的方法我缺少而不是实现我自己的指令。

这是任何当前 Graphql 实现的功能吗? 我在 apollo-graphql 的文档(或 graphql-js 的文档)中找不到任何类似的东西。

谢谢。

无法更改默认解析器。 Apollo-GraphQL 只是将解析器 map 传递给graphql-tools并且graphql-tools使用graphql-js graphql-js在这里实现了默认的解析器, 这里使用。

也许您可以尝试使用 ES2015 Proxy为 object 中的解析器提供默认实现。 但是,即使您覆盖了默认解析器,您也会破坏所有使用实际默认解析器的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM