Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确保外部API结果的连接和响应的最佳实践_Python_Django_Api_Transactions - Fatal编程技术网

Python 确保外部API结果的连接和响应的最佳实践

Python 确保外部API结果的连接和响应的最佳实践,python,django,api,transactions,Python,Django,Api,Transactions,我在python中有这段代码(使用django框架),它连接到外部API并更新该服务中的一些值。每个步骤都取决于上一个步骤(为了使步骤2起作用,步骤1必须返回True等,包括到API的有效连接)。我如何确保所有这些步骤同时进行?如果单个步骤失败,我如何回滚并在另一次尝试中同时运行所有步骤。这是代码。请注意,每个类方法都在该外部服务中执行某些操作 # 1. add new value to account if cls.add_balance(subscription_code, increase

我在
python
中有这段代码(使用
django
框架),它连接到外部
API
并更新该服务中的一些值。每个步骤都取决于上一个步骤(为了使步骤2起作用,步骤1必须返回True等,包括到
API的有效连接)。我如何确保所有这些步骤同时进行?如果单个步骤失败,我如何回滚并在另一次尝试中同时运行所有步骤。这是代码。请注意,每个类方法都在该外部服务中执行某些操作

# 1. add new value to account
if cls.add_balance(subscription_code, increase_amount):
# 2. set new base balance
if cls.set_topup_reset_action(
        subscription_code,
        new_base_balance,
):
    # 3. renew filters
    new_base_balance_20_percent = math.floor((Decimal(
        new_base_balance) * Decimal(20)) / Decimal(100))
    if cls.set_filter_80_percent(
            subscription_code,
            new_base_balance_20_percent,
    ) and cls.set_filter_100_percent(
        subscription_code,
    ):
        # 4. renew thresholds
        if cls.set_threshold_profile_80_percent(
                subscription_code,
        ) and cls.set_threshold_profile_100_percent(
            subscription_code,
        ):
            return True
return False

为了确保事务的原子性,应该在开始执行原子块之前存储数据的状态。如果发生故障,我们必须将数据恢复到相同的状态

在这种情况下,在开始4个步骤之前,请检查是否可以使用外部api获取现有值。如果有重新设置的规定。然后临时存储这些值,如果其中一个步骤失败,则恢复

或者尝试推断调用外部api时发生的更改,以及是否可以用其他方法还原它。由于外部api是一个黑盒,并且在每个步骤中都被调用,因此不可能确保事务是原子的


如果所有四个步骤都在调用相同的api,则在单个事务中计算外部api调用的所有参数,并仅调用一次api。

为确保事务的原子性,应在开始执行原子块之前存储数据的状态。如果发生故障,我们必须将数据恢复到相同的状态

在这种情况下,在开始4个步骤之前,请检查是否可以使用外部api获取现有值。如果有重新设置的规定。然后临时存储这些值,如果其中一个步骤失败,则恢复

或者尝试推断调用外部api时发生的更改,以及是否可以用其他方法还原它。由于外部api是一个黑盒,并且在每个步骤中都被调用,因此不可能确保事务是原子的

如果所有四个步骤都在调用相同的api,则在单个事务中计算外部api调用的所有参数,并仅调用一次api