鍵.png)
使用這些基本 REST API 最佳實踐構(gòu)建出色的 API
$ cd apollo-example
$ npm init
其次,我們安裝所需的兩個 NPM 包。
apollo-server
包含運行 GraphQL 服務(wù)器所需的一切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)聽器。
Apollo 服務(wù)器也具有 Express 集成,但還有另一種可與 Express 配合使用的 GraphQL 服務(wù)器實現(xiàn),因此讓我們看看如何設(shè)置它。
首先,我們創(chuàng)建一個項目。
$ mkdir express-example
$ cd express-example
$ npm init
其次,我們安裝所需的軟件包。
express
是底層 HTTP 服務(wù)器框架express-graphql
是使用 Node.js 的參考 GraphQL 實現(xiàn)的 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);
這里的過程相當(dāng)簡單。我們使用moesif
工廠函數(shù)來獲取可以與 Expressapp
對象一起使用的中間件函數(shù)。
就代碼而言,這項工作就是全部要做的。現(xiàn)在,到達服務(wù)器(無論是 Express 還是 Apollo)的每個請求都將被轉(zhuǎn)發(fā)到 Moesif API Analytics 服務(wù),并可進行進一步檢查。
在我們用自己選擇的框架設(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
使用 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/