一个发布项目用的接口,需要做这些操作:
- 检查此项目的状态,是否可以发布(只有未发布过的才可以发布)
- 后端上传文件(可能有很多个文件,现在一个请求是最多 10 并发上传)到云服务(对象存储),文件不在前端,在后端,发布之前不允许提前将这些文件传到云对象存储
- 文件全都上传成功后,改写此项目状态为已发布
- 返回结果,前端结束 loading 状态,提示发布成功
请问这个接口应该怎么设计?因为整体比较耗时,有可能在中间上传文件的过程中失败。
我先谈下我的理解:
- 检查项目状态的时候,就加上悲观锁,不允许其他请求读取此项目的状态
- 上传的过程中,如果有失败,就返回失败信息,结束此请求
- 都成功的话,就改写项目状态后,解锁,其他请求可以继续
其实建议你上传和发布其实可以分开来,理论上,你可以弄一个素材库,用户可以先独立把资源上传到素材库中,用户只要在发布任务过程中,选择素材库里的已上传的内容就行了
这样做就把发布与上传隔离开来了,也不用特意去出对项目状态加锁,或者说因为某个文件没有上传成功,导致不能发布其他项目