当前位置: 首页 > 知识库问答 >
问题:

解释graphql中解析器函数的不同实现

子车飞鹏
2023-03-14

我一直在阅读graphQL文档,发现它们以两种方式解释了graphQL服务器的实现:一种是使用graphQL瑜伽,这是一种功能齐全的graphQL服务器,另一种是使用graphQL、express graphQL和express。在这两种情况下,我们在创建服务器实例时传递模式和解析器函数。

但是解析器函数的实现是不同的。使用graphql瑜伽时,解析器函数提供了4个参数,其中包含有关父对象、接收的参数、上下文和信息的信息。而在另一种情况下(使用graphql),解析器函数只获取arguments对象。

为什么会这样?如果我想要信息,上下文对象,我如何得到它?

使用graphql瑜伽示例:https://graphql.org/learn/execution/

使用图ql示例:https://graphql.github.io/graphql-js/mutations-and-input-types/

//代码示例使用图ql

var express = require('express');
var graphqlHTTP = require('express-graphql');
var { buildSchema } = require('graphql');

var schema = buildSchema(`
type Query {
    rollDice(numDice: Int!, numSides: Int): [Int]
}
type Mutation {
    addDice(numDice: Int): String
}
`);

var root = {
    rollDice({numDice, numSides}) {
        return [1, 2];
    },
    addDice({numDice}) {
        console.log("Adding something");
        return "Added";
    }
};

var app = express();
app.use('/graphql', graphqlHTTP({
    schema: schema,
    rootValue: root,
    graphiql: true,
}));
app.listen(4000);
console.log('Running a GraphQL API server at localhost:4000/graphql');

//使用graphql的代码示例

let graphqlServer = require("graphql-yoga");

const typeDefs = `
    type Query {
        rollDice(numDice: Int!, numSides: Int): [Int]
    }
    type Mutation {
        addDice(numDice: Int): String
    }
    `;

const resolvers = {
    Query: {
        rollDice(parent, args, context, info) {
            console.log(args.numDice);
            console.log(args.numSides);
            return [1, 2];
        }
    },
    Mutation: {
        addDice(parent, args, context, info) {
            console.log(args.numDice);
            return "Added";
        }
    }
};

const server = new graphqlServer.GraphQLServer({
    typeDefs,
    resolvers
});

server.start(() => {
    console.log("server started on localhost:4000");
});

这两个代码片段之间的区别:

在一种情况下,解析器函数存在于适当的类型(即查询、变异)中。在另一种情况下,它们存在于一个根对象中。这意味着在第一种情况下,我可以在查询和变异中使用相同名称的方法,而在第二种情况下,这是不可能的,因为它们是单个对象的键,并且键应该是唯一的。

为什么会这样?我基本上错过了什么吗?实施细节在不同的包之间有什么不同?

暂时还没有答案

 类似资料:
  • 如果我有模式: 和一个解析器: 和两个可能的查询。问题#1: 和查询#2: 是否可以优化冲突解决程序,使查询#1 readAllPosts仅从数据库中提取标题,而查询#2则同时提取标题和lotsofdata? 我查看了parent、args、context和info参数,但看不到任何指示解析器是否被调用以响应像#1或#2这样的查询的内容。

  • 我花了相当多的时间阅读GraphQL教程,但不幸的是,它们似乎没有涵盖足够的深度,我无法理解。我真的很感谢你对这个现实世界的例子的帮助。 在示例中,查询位于解析器对象的根;我可以让它在单级查询中正常工作。但是,当我尝试解析嵌套查询时,嵌套解析程序从未被调用。让我非常困惑的是,我发现graphql网站上没有发布的每一个教程都放在一个查询对象中,并将它们的查询嵌套在下面,而不是根级别。 考虑以下模式:

  • GraphQL中有几个地方需要解析,而不仅仅是中的。 后端API- -用户列表-最少信息-姓名、id 构建一个架构来执行以下查询 模式可以如下- 上述模式中的解析器需要在两个不同的地方包含/处理用户详细信息获取调用。1.用户列表-和2.。必须记住处理这种类型,其中您只有一个用户ID将其转换为实际用户。 在撰写本文时,GraphQL支持和上的。不可能为整个指定解析器-只有中的可以具有解析器。因此,如

  • 本文向大家介绍解释PHP中的array_merge()函数。,包括了解释PHP中的array_merge()函数。的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将学习array_merge(),这是一个预定义的PHP数组函数。array_merge()用于将至少两个以上的数组组合为一个数组。利用该功能将至少两个数组的组件组合在一起成为一个数组。 此函数以一种方式将一个或多个数组的元素合并

  • 鉴于以下类: 和以下设置: 当我尝试解析ServiceA和ServiceB时,它们都得到一个具有相同URL的HttpClient。 我如何更改DI中的注册,使每个服务都得到正确的HttpClient注入? TIA /Søren

  • 我试图通过构建一个具有以下模式的服务器来熟悉Graphql: 并映射到以下数据: 在编写解析器时,我注意到很多样板代码——我必须为每个持有外键的对象成员编写概念上相同的字段解析器。 有没有办法通过ID创建类型解析器?例如,字段或查询总是由