将 JSON Header 和 Body 传递给 ApacheNifi 中的后续 InvokeHTTP 处理器

Passing JSON Header and Body to subsequent InvokeHTTP Processor in ApacheNifi

我正在尝试构建一个自动化流程,以从我拥有所有 REST API 的 SaaS 云平台导出配置文件。这是我正在做的

  1. 登录登录 API 获取令牌(我已经能够使用 InvokeHttp 处理器成功做到这一点)。我在响应 JSON 中得到令牌,如下所示 { "access_token" : "<some_token_value>", "links" : [ { "rel" : "self", "href" : "https://ccadmin-xxxx.oracleoutsourcing.com/ccadmin/v1/login" } ], "token_type" : "bearer", "expires_in" : 300 }

  2. 我使用 EvaluateJSONPath 从 JSON 中提取令牌并添加动态 属性“令牌”以映射到 access_token JSON 我收到了回复。 evaluateJsonPath 的输出是一个属性“token”,其值为步骤 1 中的 access_token。

  3. 现在我正在为下一个 POST 调用准备 BODY,所以我使用 UpdateAttribute 处理器来定义我的属性。

  4. 接下来,我使用 AttributesToJSON 处理器将我在上一步中定义的属性转换为 JSON。这会将以下内容添加到其输出中的属性路径

JSON属性 {"mode":"standalone","filename":"profiles.json","format":"json","id":"Profiles"}

此外,步骤 1 中的令牌仍作为属性流动

  1. 接下来我将所有这些传递给我的第二个 InvokeHttp 处理器以调用批量导出。 现在,我想将此令牌作为 Header 传递,并将 JSON body 传递给 Invoke HTTP 处理器。所以我只是做了以下改变。向名为“Authorization”的 InvokeHTTP 添加一个动态属性并将值作为 Bearer ${token} 传递,我相信 body 将自动从先前处理器的属性中获取。

但是调用失败。有什么我想念的吗?我已经通过 POSTMAN 尝试了 运行 这个,一切都运行良好。

Nifi Flow Diagram

Input to 2nd InvokeHttp Processor

Second InvokeHttp POST processor

我想我明白了。我看到所有的东西都在流动,就像流动中的属性一样。 body 需要作为内容流动。所以我缩短了 UpdateAttribute 和 AttributeToJSON ,而是放置了一个 ReplaceText 处理器并将 JSON body 放在那里。我现在可以拨打成功了。