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