
使用這些基本 REST API 最佳實踐構建出色的 API
$ 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
事件的事件監聽器。
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 中間件會將請求數據發送到 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/