跳转到内容
搜索文档

查询基础

最后更新 查看 MarkdownAgent 设置

GraphQL 查询结构

GraphQL 将数据结构化为图。GraphQL 使用 schema 定义对象及其在数据图中的层次结构。你可以使用查询探索图的边以获取所需数据。这些查询必须遵守 schema 的结构。

node 及其 fields 是 GraphQL 查询的核心。node 是特定 type 的对象;type 指定构成对象的 field。

field 可以是另一个 node,适当的查询将包含嵌套元素。某些 node 类似函数,可接受参数以限制其作用范围。你可以在每个 node 应用筛选器。

Cloudflare GraphQL schema

针对 Cloudflare GraphQL schema 的典型查询由四个主要部分组成:

  • viewer — 是根 node,
  • zonesaccounts — 表示查询范围,即要查询的域区域或 account。viewer 可以访问一个 zonesaccounts,或两者,
  • data nodedataset — 表示要查询的数据。zonesaccounts 可能包含一个或多个 dataset。要了解更多关于发现 node 的信息,请参阅 introspection
  • fieldsetdataset 的 field 或嵌套 field 集合。

向 Cloudflare GraphQL API 的查询必须通过 HTTP POST 请求发送,payload 为 JSON 格式,包含以下字段:

{
	"query": "",
	"variables": {}
}

从上述结构来看,query field 必须包含格式化为单行字符串的 GraphQL 查询(意味着应去除/转义所有换行符),variables 是包含查询中使用的所有占位符值的对象。

单个 dataset 示例

在以下示例中,GraphQL 查询从 zone 范围的 firewallEventsAdaptive dataset 获取 2 个 WAF 事件的 datetimeaction 以及作为 host field 的客户端请求 HTTP host。

A GraphQL querygraphql
query ASingleDatasetExample($zoneTag: string, $start: Time, $end: Time) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			firewallEventsAdaptive(
				filter: { datetime_gt: $start, datetime_lt: $end }
				limit: 2
				orderBy: [datetime_DESC]
			) {
				action
				datetime
				host: clientRequestHTTPHost
			}
		}
	}
}

在上面的查询中,我们有变量占位符:$zoneTag、$start 和 $end。我们通过将值放入 payload 的 variables field 来提供这些占位符的值。请注意,以下示例使用 UTC 时区,由字母 "Z" 表示。

A set of variablesjson
{
	"zoneTag": "<zone-tag>",
	"start": "2020-08-03T02:07:05Z",
	"end": "2020-08-03T17:07:05Z"
}

有多种方式将查询发送到 Cloudflare GraphQL API。你可以使用喜欢的 GraphQL 客户端或 CLI 通过 curl 发送请求。我们有关于使用 GraphiQL 客户端的操作指南,也可查看此处关于如何使用 curl 执行查询的指南。

A sample of a response for a query abovejson
{
	"data": {
		"viewer": {
			"zones": [
				{
					"firewallEventsAdaptive": [
						{
							"action": "log",
							"host": "cloudflare.guru",
							"datetime": "2020-08-03T17:07:03Z"
						},
						{
							"action": "log",
							"host": "cloudflare.guru",
							"datetime": "2020-08-03T17:07:01Z"
						}
					]
				}
			]
		}
	},
	"errors": null
}

在单个 GraphQL API 请求中查询多个 dataset

如前所述,查询可能包含一个或多个 node(dataset)。在 API 级别,数据提取将同时进行,但响应会延迟到所有 dataset 查询获得结果。如果执行过程中任何查询失败,整个查询将终止并返回错误。

A sample query for two datasets in a one gographql
query MultipleDatasetsExample(
	$zoneTag: string
	$start: Time
	$end: Time
	$ts: Date
) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			last10Events: firewallEventsAdaptive(
				filter: { datetime_gt: $start, datetime_lt: $end }
				limit: 10
				orderBy: [datetime_DESC]
			) {
				action
				datetime
				host: clientRequestHTTPHost
			}
			top3DeviceTypes: httpRequestsAdaptiveGroups(
				filter: { date: $ts }
				limit: 10
				orderBy: [count_DESC]
			) {
				count
				dimensions {
					device: clientDeviceType
				}
			}
		}
	}
}
A set of variables for the query abovejson
{
	"zoneTag": "<zone-tag>",
	"start": "2022-10-02T00:26:49Z",
	"end": "2022-10-04T14:26:49Z",
	"ts": "2022-10-04"
}
A sample response for the query with variables abovejson
{
	"data": {
		"viewer": {
			"zones": [
				{
					"last10Events": [
						{
							"action": "block",
							"country": "TR",
							"datetime": "2022-10-04T08:41:09Z"
						},
						{
							"action": "block",
							"country": "TR",
							"datetime": "2022-10-04T08:41:09Z"
						},
						{
							"action": "block",
							"country": "RU",
							"datetime": "2022-10-04T01:09:36Z"
						},
						{
							"action": "block",
							"country": "US",
							"datetime": "2022-10-03T14:26:49Z"
						},
						{
							"action": "block",
							"country": "US",
							"datetime": "2022-10-03T14:26:46Z"
						},
						{
							"action": "block",
							"country": "CN",
							"datetime": "2022-10-02T23:51:26Z"
						},
						{
							"action": "block",
							"country": "TR",
							"datetime": "2022-10-02T23:39:41Z"
						},
						{
							"action": "block",
							"country": "TR",
							"datetime": "2022-10-02T23:39:41Z"
						}
					],
					"top3DeviceTypes": [
						{
							"count": 4580,
							"dimensions": {
								"device": "desktop"
							}
						}
					]
				}
			]
		}
	},
	"errors": null
}

有用资源

以下是一些关于使用 Cloudflare Analytics API 和 GraphQL 的有用文章。

Cloudflare 特定

GraphQL 框架通用信息

这篇文档对您有帮助吗?