当前端的一次操作会调用多个有关联的后台接口

Posted wen_rc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当前端的一次操作会调用多个有关联的后台接口相关的知识,希望对你有一定的参考价值。

由于历史原因,前端的一次操作需要调用多个后台接口,以前写的一般都是调用一个的,或者哪怕是多个,接口之间也不会有依赖。但最近做的需求里,前端一次操作需要调用两个后台接口,且这两个接口是有关联的,需要先调用接口A,再调用接口B。

一开始直接写两个Promise,一个成功后调用另一个,类似于这样子

 fetch(urlA)
	 .then((res) => 
	 	if (res.ret == 0) 
		 	fetch(urlB)
			 	.then(() => 
					///
				)
				.catch(e) 
				
		

	 )
	 .catch(e)
	 

一切看上去都这么美好,直到测试同学发现第二个接口一直调用不了。

才发现自己没考虑失败情况,如果接口A调用失败了,接口B是不会调用的。那么假设用户第一次操作,调用接口A成功,但后台因为某些原因B接口临时挂了,或者因为网络问题B接口调用失败了。用户第二次操作时,接口A因为保护机制,之前已经调用过一次了,这次错误码会返回非0,这样就调用不到接口B了。而且不管用户怎么重试,都调用不到。

与后台协商后,决定采用接口A结果返回非零也去尝试调用接口B,因为前端可能因为重启app、网页、小程序,无法确保是否调用过接口A,所以用户的操作流程是调用接口A,不管接口A是否返回成功,都去调用接口B,后台对接口B的调用进行判定,会判断接口A是否已经调用,未调用则不处理。

事后回想,其实这应该是常识

  1. 接口调用可能失败,一定要考虑失败的情况
  2. 一次操作调用多个关联的接口,要考虑若干接口可能调用失败的所有情况
  3. 前端要做到无状态,当接口调用失败后,要能够恢复,确保下次能发起请求,能正常调用接口

在前端方面,踩的坑还不够多,导致这种常识现在才知道……

以上是关于当前端的一次操作会调用多个有关联的后台接口的主要内容,如果未能解决你的问题,请参考以下文章

什么是幂等?

接口自动化的关联

前端调用后端的方法(基于restful接口的mvc架构)

再次提醒我一次“幂等性”

LayUI上传图片(文件)的时候,上传多张图片(文件)会调用多次接口,而我们想要让上传多个文件的时候只调用一次接口,怎么解决?

LayUI上传图片(文件)的时候,上传多张图片(文件)会调用多次接口,而我们想要让上传多个文件的时候只调用一次接口,怎么解决?