监控使用 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 包。
apollo-server
包含运行 GraphQL 服务器所需的一切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/