首页 > 解决方案 > 在 python 代码中为不同端点生成多个有效负载的最佳约定是什么?

问题描述

我的项目需要针对不同端点的不同请求负载。我在 python 代码中生成它们中的每一个,并将生成的有效负载传递给 python 请求库。它正在工作,但我正在寻找一种更优雅/更清洁的方式来做到这一点。我正在考虑拥有 yaml 文件并读取它们以生成我的有效负载。寻找更多想法和更好的方法来生成请求有效负载。

def abc(self):
    payload = {
             'key1' :'1',
             'key2' : '2'
               }
     return payload

def call_abc(self):
    request_payload = self.abc()
    requests.post(url, json=request_payload, headers)

标签: pythonapipython-requestspayload

解决方案


使用 YAML 或 JSON 并不重要。看看这段代码:

request_map = {
    "http://some/end/point": [
        {
            'key1': '1',
            'key2': '2'
        },
        {
            'key3': '4',
            'key4': '5'
        }
    ],
    "http://some/other/end/point": [
        {
            'key1': '1',
            'key2': '2'
        },
        {
            'key3': '4',
            'key4': '5'
        }
    ]
}

def generate_call():
    for endpoint, payloads in request_map.items():
        for payload in payloads:
            yield endpoint, payload


def call_endpoint(url, payload):
    requests.post(url, data=payload)


if __name__ == "__main__":
    for url, payload in generate_call():
        call_endpoint(url, payload)  

这将产生 4 个这样的调用:

http://some/end/point {'key1': '1', 'key2': '2'}
http://some/end/point {'key3': '4', 'key4': '5'}
http://some/other/end/point {'key1': '1', 'key2': '2'}
http://some/other/end/point {'key3': '4', 'key4': '5'}

如果您想使用它们,请将它们放在 yaml 或 json 文件中并将其加载到request_map变量中。您不需要对它们进行任何其他操作。喜欢:

request_map = yaml.safe_load(open('request_map.yaml'))

或者:

request_map = json.load(open('request_map.json'))

推荐阅读