首页 > 解决方案 > 如果我们需要使用 magrite 代理进行两步休息 api 调用?怎么走一样?

问题描述

我需要使用 magrite 代理进行休息 api 调用,但挑战是 api 调用包括两个步骤。

让我知道是否有人可以提供帮助。

标签: palantir-foundry

解决方案


假设您每次想要获取数据时都会获得一个新的访问令牌,那么过程是:

  1. 调用获取令牌
  2. 从响应中提取令牌
  3. 使用令牌调用以获取数据

马格利特休息插件支持这个!

首选方法

如果您有权编辑 magritte 源,那么有更好的方法,您可以使用 Auth Call Source ( magritte-rest-auth-call-source) 为所有同步自动执行此过程。源将执行步骤 1 和 2:

type: magritte-rest-v2
sourceMap:
  ...
  my_new_auth_source:
    type: magritte-rest-auth-call-source
    url: 'https://my-api.com/'
  headers:
    Authorization: '{%access_token%}'
  authCall:
    type: magritte-rest-call
    method: GET
    saveResponse: false
    path: /get/access/token
    extractor:
      - type: magritte-rest-json-extractor
        assign:
          access_token: /token/json/path

调用将如下所示:

type: rest-source-adapter2
oneFilePerResponse: false
cacheToDisk: false
restCalls:
  - type: magritte-rest-call
    path: /get/data
    method: GET

选择

如果数据和令牌位于不同的域名(即需要不同的来源),或者如果您无法编辑来源,那么这是一种替代方法。但是,最好在源中保留任何标记,因此仅在必要时使用此方法。

您可以在一次同步中进行多个调用,并且在调用之间保留状态,示例可能如下所示:

type: rest-source-adapter2
oneFilePerResponse: false
cacheToDisk: false
restCalls:
  - type: magritte-rest-call
    path: /get/access/token
    method: GET
    saveResponse: false
    extractor:
      - type: magritte-rest-json-extractor
        assign:
          access_token: /token/json/path
  - type: magritte-rest-call
    path: /get/data
    method: GET
    saveResponse: true
    parameters:
      token: '{%access_token%}'

这种方法的一些陷阱和其他要点:

  • saveResponse默认情况下为 true (为了清楚起见,我在第二次调用中将其保留),因此需要在第一次调用中将其显式设置为 false 以避免将令牌保存在输出数据集中!
  • 如果数据和令牌位于不同的域后面(因此在不同的来源中),您可以添加source: my_data/token_source到每个调用中以将它们指向正确的来源。

更多详情

可以在文档中找到更多详细信息,打开 Foundry 文档并搜索REST API Plugin以找到它。


推荐阅读