$ cd apollo-example
$ npm init

其次,我們安裝所需的兩個 NPM 包。

  1. apollo-server包含運行 GraphQL 服務(wù)器所需的一切
  2. moesif-express連接到 Moesif API 分析服務(wù)
$ npm i apollo-server moesif-express

接下來,我們創(chuàng)建一個index.js包含所有設(shè)置代碼的文件。

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);
});

代碼的關(guān)鍵部分在最后。對象listen的方法ApolloServer返回一個承諾。

這個承諾使我們能夠通過對象訪問底層 HTTP 服務(wù)器server

該服務(wù)器對象是事件的事件發(fā)射器request

我們可以借助moesif工廠函數(shù)創(chuàng)建一個中間件函數(shù),并將其用作request事件的事件監(jiān)聽器。

設(shè)置 Express GraphQL

Apollo 服務(wù)器也具有 Express 集成,但還有另一種可與 Express 配合使用的 GraphQL 服務(wù)器實現(xiàn),因此讓我們看看如何設(shè)置它。

首先,我們創(chuàng)建一個項目。

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

其次,我們安裝所需的軟件包。

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);

這里的過程相當(dāng)簡單。我們使用moesif工廠函數(shù)來獲取可以與 Expressapp對象一起使用的中間件函數(shù)。

就代碼而言,這項工作就是全部要做的。現(xiàn)在,到達服務(wù)器(無論是 Express 還是 Apollo)的每個請求都將被轉(zhuǎn)發(fā)到 Moesif API Analytics 服務(wù),并可進行進一步檢查。

適用于 GraphQL 的 Moesif API 分析

在我們用自己選擇的框架設(shè)置好 GraphQL 服務(wù)器后,Moesif 中間件會將請求數(shù)據(jù)發(fā)送到 Moesif 服務(wù)。就 GraphQL 而言,這意味著 Moesif 服務(wù)現(xiàn)在知道我們的查詢和變更。

如果我們使用 apollo-server 獨立版本,GraphQL API 會在所有路由上應(yīng)答。Moesif 期望在/graphql路由上進行 GraphQL 查詢,因此我們必須使用此路由。

如果我們登錄我們的Moesif 控制臺使用瀏覽器,我們可以在API 分析部分找到所有已記錄的事件。這包括但不限于發(fā)送到/graphql路由的 GraphQL 請求。

為了僅顯示 GraphQL 查詢請求而不顯示其他 HTTP 請求,例如為 GraphiQL UI 加載 HTML 或自省查詢以獲取有關(guān) GraphQL API 的信息,我們必須使用左側(cè)的過濾器側(cè)欄。

在API 過濾器中,我們選擇請求 -> URI 路由并將其設(shè)置/graphql為擺脫非 GraphQL 請求。

現(xiàn)在我們只有 GraphQL 請求,我們可以應(yīng)用GraphQL 查詢過濾器來關(guān)注我們想要監(jiān)控的特定查詢。

例如,我們可以通過選擇GraphQL 查詢過濾器并將其設(shè)置為≠ IntrospectionQuery來擺脫IntrospectionQuery請求。request.graphql.operation_name

結(jié)論

使用 Node.js 框架將Moesif API Analytics添加到我們的 GraphQL API 構(gòu)建中只需幾分鐘。我們必須moesif-express通過 NPM 安裝,需要中間件,使用我們的 Moesif 應(yīng)用密鑰對其進行配置,然后就可以開始了。

設(shè)置完成后,我們所有的請求都將被發(fā)送到 Moesif API Analytics 服務(wù)并保存以供日后使用。

稍后,當(dāng)我們的 API 啟動并運行時,我們可以根據(jù) GraphQL 查詢的內(nèi)容進行過濾、排序和分段,以深入了解我們的查詢。

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

上一篇:

用NestJS和Prisma: Authentication構(gòu)建一個REST API

下一篇:

使用Golang和MongoDB構(gòu)建REST API- Echo版本
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費