Envelop 开源项目教程

Envelop 开源项目教程

【免费下载链接】envelop Envelop is a lightweight library allowing developers to easily develop, share, collaborate and extend their GraphQL execution layer. Envelop is the missing GraphQL plugin system. 【免费下载链接】envelop 项目地址: https://gitcode.com/gh_mirrors/en/envelop

1. 项目介绍

Envelop 是一个轻量级的 JavaScript/TypeScript 库,旨在简化 GraphQL 执行层的开发、共享、协作和扩展。它提供了一个插件系统,允许开发者通过插件来扩展 GraphQL 的功能,填补了 GraphQL 实现中的空白。Envelop 的核心理念是轻量级、插件化、低级 API、与 GraphQL 引擎无关、与 HTTP 层无关、与模式工具无关,并且具有出色的 TypeScript 支持。

2. 项目快速启动

安装依赖

首先,你需要在你的项目中安装 graphql@envelop/core 依赖:

yarn add graphql @envelop/core

创建 Envelop 实例

接下来,创建一个基于你的 GraphQL 模式的 Envelop 实例:

import * as GraphQLJS from 'graphql';
import { envelop, useEngine, useSchema } from '@envelop/core';

const mySchema = buildSchema(/* 你的 GraphQL 模式 */); // GraphQLSchema

const getEnveloped = envelop({
  plugins: [
    useEngine(GraphQLJS),
    useSchema(mySchema)
  ]
});

运行 GraphQL 查询

使用 Envelop 实例来处理客户端的 GraphQL 查询。以下是一个伪代码示例:

const httpServer = createServer();

httpServer.on('request', async (req, res) => {
  // 获取 Envelop 提供的替代方法
  const { parse, validate, contextFactory, execute, schema } = getEnveloped({ req });

  // 解析初始请求并验证
  const { query, variables } = JSON.parse(req.payload);
  const document = parse(query);
  const validationErrors = validate(schema, document);

  if (validationErrors.length > 0) {
    return res.end(JSON.stringify({ errors: validationErrors }));
  }

  // 构建上下文并执行
  const context = await contextFactory(req);
  const result = await execute({
    document,
    schema,
    variableValues: variables,
    contextValue: context
  });

  // 发送响应
  res.end(JSON.stringify(result));
});

httpServer.listen(3000);

3. 应用案例和最佳实践

收集指标和日志记录

Envelop 提供了内置插件,可以轻松地收集指标和记录所有传入的请求。以下是一个简单的示例:

const getEnveloped = envelop({
  plugins: [
    useEngine(GraphQLJS),
    useSchema(schema),
    useLogger(),
    useTiming()
  ]
});

自定义插件

Envelop 允许你编写自定义插件来扩展功能。以下是一个简单的示例,展示如何打印执行参数:

const myPlugin = {
  onExecute({ args }) {
    console.log('Execution started:', args);
    return {
      onExecuteDone({ result }) {
        console.log('Execution done:', result);
      }
    };
  }
};

const getEnveloped = envelop({
  plugins: [
    // 其他插件
    myPlugin
  ]
});

4. 典型生态项目

@envelop/core

@envelop/core 是 Envelop 的核心库,提供了基本的插件系统和执行流程管理。

@envelop/plugins

Envelop 生态系统中有许多插件,如 @envelop/logger@envelop/timing 等,这些插件可以帮助你轻松地扩展 GraphQL 的功能。

@envelop/graphql-tools

@envelop/graphql-tools 提供了与 GraphQL 工具集成的插件,帮助你更好地管理和操作 GraphQL 模式。

通过这些模块的学习和使用,你可以更好地理解和应用 Envelop 项目,提升你的 GraphQL 开发效率。

【免费下载链接】envelop Envelop is a lightweight library allowing developers to easily develop, share, collaborate and extend their GraphQL execution layer. Envelop is the missing GraphQL plugin system. 【免费下载链接】envelop 项目地址: https://gitcode.com/gh_mirrors/en/envelop

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值