Link Search Menu Expand Document

可调用 Flux API 脚本和参数化查询

目录

  1. 参数化查询
    1. 参数化查询的类型
  2. 可调用 Flux API 脚本
    1. 使用参数化查询调用脚本
  3. 进一步阅读

InfluxDB Cloud 支持 Flux 中的可调用 API 脚本。InfluxDB Cloud 服务器托管和调用带有参数化查询的可调用 API 脚本,以便应用程序开发人员可以向其时间序列应用程序添加自定义功能,而无需在其客户端服务和代码中引入查询资源。参数化查询使您能够提供参数,然后将其插入到 Flux 查询中以供执行。通过支持运行时参数,可以泛化这些函数,以便可以为每个用户返回自定义结果。

参数化查询

对于最基本的示例,我们将传递一个桶名称作为参数传递给我们的参数化 Flux 查询。Flux 脚本如下所示

from(bucket:params.mybucket) 
|> range(start: -7d) 
|> limit(n:2)","params":{"mybucket":"telegraf"}

Flux 引擎将使用我们要查询的桶名称替换 params.mybucket。我们在 Flux 查询请求有效负载的末尾使用 “params”:{“mybucket”:”telegraf”} 指定 mybucket 参数的值以查询 “telegraf” 桶。由于必须使用 API 执行此查询,因此我们将查询转换为 JSON 以执行以下 cURL 请求

curl -X POST \
'https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/query?orgID=<myOrgID>' \
  -H 'authorization: Token <myToken>' \
  -H 'content-type: application/json' \
  -d '{"query":"from(bucket:params.mybucket) |> range(start: -7d) |> limit(n:2)","params":{"mybucket":"telegraf"}}'

就是这样!现在您可以开始构建参数化查询以保护您的 IoT 应用程序并帮助防止注入攻击。参数化查询还可以轻松更新查询以反映新的桶、过滤器或时间戳,并鼓励代码重用。

参数化查询的类型

使用参数化 Flux 查询非常简单。参数化 Flux 查询支持 int、float 和 string 类型的参数。但是,Flux 本身支持更多类型,例如 duration 等。因此,您必须确保正确键入日期参数。例如,如果要将参数设为时间戳,则必须使用 duration() 函数将该值转换为 duration。您的请求正文应如下所示

{"query":"from(bucket:\"telegraf\") |> range(start: duration(v : params.mystart)) |> limit(n:2)","params":{"mystart":"-7d"}}

可调用 Flux API 脚本

您可以使用 InfluxDB v2 API 创建可调用 API 脚本和关联的函数资源。关联的函数资源包含以下内容:名称、ID、描述、组织 ID、脚本、语言、URL、创建时间和更新时间。这些功能可帮助开发人员识别其可调用 API 脚本及其关联的元数据。函数 ID 用于根据请求手动调用函数。

要使用关联的函数资源创建函数,请使用 api/v2/functions 端点。在此示例中,我们的参数化查询返回我们选择的桶中的最后两个数据点。

curl -X 'POST' \
  'https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/functions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "myFirstAPIInvokableScripts",
  "description": "a API Invokable Script that gathers the last point from a bucket",
  "orgID": "<myOrgID>",
  "script": "from(bucket:params.mybucket) \
|> range(start: -7d) \
|> limit(n:2)",
  "language": "flux"
}'

创建可调用 API 脚本时,函数 ID 将在响应正文中返回。或者,您也可以通过列出函数来检索函数 ID 和所有其他关联的函数资源。然后,您可以使用以下命令列出函数

curl -X 'GET' \
  'https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/functions?orgID=<myOrgID>' \
  -H 'accept: application/json'

使用参数化查询调用脚本

获得函数 ID 后,您可以手动调用可调用 API 脚本并提供参数。在这种情况下,我们将向 mybucket 参数提供桶名称。我们的请求如下所示

curl -X 'POST' \
  'https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/functions/<functionID>/invoke' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "params": {"mybucket":"telegraf"}
}'

下一节

进一步阅读

  1. https://influxdb.org.cn/blog/tldr-influxdb-tech-tips-api-invokable-scripts-influxdb-cloud/