使用 python 递归迭代 API,直到找到所有值

Recursively Iterate an API with python until all value are found

提问人:alexraio 提问时间:11/12/2023 最后编辑:Brian Tompsett - 汤莱恩alexraio 更新时间:11/12/2023 访问量:31

问:

我正在使用 SAP Business Object Rest API 来查找组的所有子组。

我想找到一个组,如果该组有子组,我想找到它们,如果一个子组有一个子子组,我想得到它们,依此类推,直到我找到所有有子组的组。(我需要一个组的所有嵌套组,只要有一个组有一个子组)

例:

mygroup
---group_1
---group_2
---group_3
------group_3_a
------group_3_b
---------group_3_a_a
---group_4

最后我想要的是“我的组,group_3,group_3_b”

以下是 postman 的 API 查询输出:

* https://{{STAGE}}/biprws/v1/usergroups/19791/usergroups
{
  "entries": [
    {
      "__metadata": {
        "uri": "https://{{STAGE}}/biprws/v1/usergroups/19791/usergroups"
      },
      "cuid": "AVULJ1f4xTJJkSt.N33vH0w",
      "keywords": "",
      "created": "",
      "name": "SUPERVISOR",
      "description": "",
      "id": "7467291",
      "parentid": "20"
    },
    {
      "__metadata": {
        "uri": "https://{{STAGE}}/biprws/v1/usergroups/19791/usergroups"
      },
      "cuid": "Q1hAIaoABJhzAYIAkgAAW9cLRkE1NzY1NEM",
      "keywords": "",
      "created": "",
      "name": "Support",
      "description": "",
      "id": "891887",
      "parentid": "20"
    }
  ]
}

现在我想遍历两个 id:7467291 / 891887 具有相同的查询但不同的 id:

  • https://{{STAGE}}/biprws/v1/usergroups/7467291/usergroups

现在,如果查询没有条目,请继续...

  • https://{{STAGE}}/biprws/v1/usergroups/891887/usergroups

如果查询有条目,则循环访问组 ID,并查找它们是否有其他子组。

这是我试图做的:

# my group 
my_group = '19786'
# Show related group of my choosen group
the_page_url = f"{base_url}/v1/usergroups/{my_group}/usergroups"
payload = {}
headers = {
    'content-type': "application/json",
    'accept': "application/json",
    'x-sap-logontoken': sap_logon_token
    }

response = requests.request("GET", the_page_url, json=payload, headers=headers, verify=False)
j_response = response.json()

print('ZZZ--- ', j_response['entries'])

# Now I loop through the subgroup of my choosen group recursively. So long that j_response['entries'] is not empty the loop go on.
while j_response['entries']:
    try:
        for entry in j_response['entries']:
            si_name = entry['name']
            si_id = entry['id']
            si_parent_id = entry['parentid']
            the_page_url = f"{base_url}/v1/usergroups/{si_id}/usergroups"
            response = requests.request("GET", the_page_url, json=payload, headers=headers, verify=False)
            j_response = response.json()
            print('XXX---',si_name, "\n", j_response['entries'])
            # print(si_id, si_name, si_parent_id)
    except Exception as e:
        print(f"There was an error! Exiting Loop: {e}")
        break


问题是,通过这种方式,我只能向下迭代一个级别,但我想递归获取包含子组的所有组。

你能帮我解决问题吗?

Python REST 嵌套 SAP 业务技术平台

评论


答: 暂无答案