所有文章 > API开发 > 监控使用 Apollo 和 Express 构建的 GraphQL API

监控使用 Apollo 和 Express 构建的 GraphQL API

当我们想要及时了解功能和性能问题时,监控我们的 API 是必须的。

Keyur Doshi 已经写了一篇关于监控使用 Django 和 Graphene 构建的 GraphQL API,让我们深入了解 JavaScript 生态系统,看看在那里启动和运行需要什么!

目前有许多 JavaScript GraphQL 实现,在本文中我们将讨论其中最突出的两个实现:阿波罗服务器&express-graphql

本文的第一部分介绍如何为每个 GraphQL 实现设置 Moesif API Analytics。

第二部分是关于如何使用 Moesif API Analytics 来保持我们的 API 游戏领先地位!

设置 Apollo 服务器

Apollo 服务器有独立版本和多种框架集成版本。我们这里只讨论独立版本。

首先,我们用 NPM 建立一个项目。

$ mkdir apollo-example
$ cd apollo-example
$ npm init

其次,我们安装所需的两个 NPM 包。

  1. apollo-server包含运行 GraphQL 服务器所需的一切
  2. moesif-express连接到 Moesif API 分析服务
$ npm i apollo-server moesif-express

接下来,我们创建一个index.js包含所有设置代码的文件。

const { ApolloServer, gql } = require("apollo-server");
const moesif = require("moesif-express");

const applicationId = "<MOESIF_APPLICATION_ID>";
const typeDefs = ...;
const resolvers = ...;

new ApolloServer({ typeDefs, resolvers })
.listen(8888)
.then(({ server }) => {
const moesifMiddleware = moesif({ applicationId });
server.on("request", moesifMiddleware);
});

代码的关键部分在最后。对象listen的方法ApolloServer返回一个承诺。

这个承诺使我们能够通过对象访问底层 HTTP 服务器server

该服务器对象是事件的事件发射器request

我们可以借助moesif工厂函数创建一个中间件函数,并将其用作request事件的事件监听器。

设置 Express GraphQL

Apollo 服务器也具有 Express 集成,但还有另一种可与 Express 配合使用的 GraphQL 服务器实现,因此让我们看看如何设置它。

首先,我们创建一个项目。

$ mkdir express-example
$ cd express-example
$ npm init

其次,我们安装所需的软件包。

  • express是底层 HTTP 服务器框架
  • express-graphql是使用 Node.js 的参考 GraphQL 实现的 Express 中间件
  • moesif-express是将我们与 Moesif API Analytics 连接起来的库
const express = require('express');
const expressGraphql = require('express-graphql');
const moesif = require("moesif-express");

const applicationId = "<MOESIF_APPLICATION_ID>";
const schema = ...;

const moesifMiddleware = moesif({ applicationId });
const graphqlMiddleware = expressGraphql({ schema });

const app = express();
app.use(moesifMiddleware);
app.use("/graphql", graphqlMiddleware);

app.listen(8888);

这里的过程相当简单。我们使用moesif工厂函数来获取可以与 Expressapp对象一起使用的中间件函数。

就代码而言,这项工作就是全部要做的。现在,到达服务器(无论是 Express 还是 Apollo)的每个请求都将被转发到 Moesif API Analytics 服务,并可进行进一步检查。

适用于 GraphQL 的 Moesif API 分析

在我们用自己选择的框架设置好 GraphQL 服务器后,Moesif 中间件会将请求数据发送到 Moesif 服务。就 GraphQL 而言,这意味着 Moesif 服务现在知道我们的查询和变更。

如果我们使用 apollo-server 独立版本,GraphQL API 会在所有路由上应答。Moesif 期望在/graphql路由上进行 GraphQL 查询,因此我们必须使用此路由。

如果我们登录我们的Moesif 控制台使用浏览器,我们可以在API 分析部分找到所有已记录的事件。这包括但不限于发送到/graphql路由的 GraphQL 请求。

为了仅显示 GraphQL 查询请求而不显示其他 HTTP 请求,例如为 GraphiQL UI 加载 HTML 或自省查询以获取有关 GraphQL API 的信息,我们必须使用左侧的过滤器侧栏。

在API 过滤器中,我们选择请求 -> URI 路由并将其设置/graphql为摆脱非 GraphQL 请求。

现在我们只有 GraphQL 请求,我们可以应用GraphQL 查询过滤器来关注我们想要监控的特定查询。

例如,我们可以通过选择GraphQL 查询过滤器并将其设置为≠ IntrospectionQuery来摆脱IntrospectionQuery请求。request.graphql.operation_name

结论

使用 Node.js 框架将Moesif API Analytics添加到我们的 GraphQL API 构建中只需几分钟。我们必须moesif-express通过 NPM 安装,需要中间件,使用我们的 Moesif 应用密钥对其进行配置,然后就可以开始了。

设置完成后,我们所有的请求都将被发送到 Moesif API Analytics 服务并保存以供日后使用。

稍后,当我们的 API 启动并运行时,我们可以根据 GraphQL 查询的内容进行过滤、排序和分段,以深入了解我们的查询。

原文地址:https://www.moesif.com/blog/technical/graphql/Monitoring-GraphQL-APIs-Built-With-Apollo-and-Express/