繁体   English   中英

覆盖预定义的GraphQLSchema解析器(Apollo)

Overriding pre-defined GraphQLSchema resolvers (Apollo)

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在为现有的REST API设置GraphQL包装器。 我决定使用的工具可让您轻松定义对REST API的所有调用的生成方式,并为每个端点生成解析器。

我希望能够使用自定义逻辑覆盖某些查询或变异,并且我有预感,使用某些graphql工具很容易实现,但我还没有着手。

下面是设置服务器的主要代码,其次是用于查询REST API的获取客户端,其次是我希望能够扩展某些端点的方式。

// The main server setup thus far

import express from "express";
import cors from "cors";
import { createServer } from "http";

import { callBackend } from "./connections";

import { createSchema } from "swagger-to-graphql";
import { ApolloServer } from "apollo-server-express";
import { generateTypes } from "./utils";
import { parse, printSchema } from "graphql";

const port = process.env.PORT || 4000;

(async () => {
  const app = express();
  const server = createServer(app);

  app.use(cors({ origin: "*", credentials: true }));

  const schema = await createSchema({
    swaggerSchema: "URL_POINTING_TO_SWAGGER_DEFINITION",
    callBackend,
  });

  await generateTypes(parse(printSchema(schema)));

  server.listen(port, () => {
    console.log("Server has launched..");
  });

  const apollo = new ApolloServer({
    introspection: true,
    debug: true,
    tracing: true,
    context: ({ req, res }) => ({ req, res }),
    schema,
  });

  apollo.applyMiddleware({ app, cors: { origin: "*", credentials: false } });
})();

_________________________________________

// The callBackend function being imported in the previous code.

export async function callBackend({
  context,
  requestOptions,
}: CallBackendArguments<Request>) {
  return axios({
    method: requestOptions.method,
    url: `URL${requestOptions.path}`,
    headers: requestOptions.headers,
    params: requestOptions.query,
    data: requestOptions.body,
  });
}

_________________________________________

// The way in which I would like to be able to override certain calls being generated by the
// swagger tools createSchema function. These ideally just get passed into ApolloServer's args as 
// { resolvers: [CustomerResolvers, ...etc] }

export const CustomerResolvers = {
  Query: {
    get_customers(...args) {
     // some additional logic
    },
  },
};


问题暂未有回复.您可以查看右边的相关问题.
2 Graphql Schema(Apollo)嵌套对象

我有一个API端点,返回以下数据: 如何为这些嵌套对象创建模式,因为我似乎无法在模式中创建嵌套对象。 我正在使用带有graphql-tools的typeDefinitions ,它适用于对象和对象数组,但我找不到解决这个问题的方法。 典型的类型如下: 并可以使用其他类 ...

4 如何缓存/重用Apollo服务器解析器响应

我想知道是否有一种方法可以避免在解析器中发生不必要的调用。 我的解析器如下所示:(最小化) 如果我用这样的查询: 它会调用transaction.getFrom(); 和transaction.getTo(); 两次。 有办法避免两次打电话给他们吗? 像“缓存”一样 ...

5 Vue-Apollo中的GraphQL标量解析器

我正在尝试在我的Vue-Apollo项目中为Date Scalar编写解析器。 在我的Apollo服务器中,我声明了scalar Date并为此类型创建了一个自定义解析器。 每次服务器发送Date对象时,适当的序列化函数都会自动将该类型转换为整数(符合JSON格式),反之亦然。 但是,在Vue. ...

8 使用Apollo缓存解析器进行过滤

我最近开始将Apollo与React结合使用,并试图绕过缓存解析器。 我正在尝试构建一个简单的应用来查看有关电视节目/剧集的信息,我有Show , Season和Episode 。 初始页面是一个节目列表,单击一个将显示有关该节目和季节列表的信息,然后单击一个季节将显示有关季节的信息 ...

9 argparse 解析器:覆盖选项

我正在使用 pytest 插件 - pytest-html 该插件有一个名为'--self-contained-html'的选项。 我创建了自己的插件,它建立在这个插件的基础上,并添加了另一个选项。 我希望,当有人使用我的选项时,原始的'--self-contained-html'将被设置为 Tr ...

暂无
暂无

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

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