首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rest设计在部分成功的情况下

Rest设计在部分成功的情况下
EN

Software Engineering用户
提问于 2018-07-16 10:07:27
回答 4查看 6.2K关注 0票数 2

所以我有订票系统。

我在api上有订票请求,从我的申请中我们称之为支付服务。

如果第一次尝试失败,我们将在队列中添加消息,以便以后处理付款。然后继续向顾客发放机票。

从队列中,我们重新尝试使用支付api 10次在10分钟内,如果没有成功,我们添加一些状态的票预订记录和离线意味着从客户那里得到钱。

问题:由于信用卡欺诈,我们得到了很多这样的预订。

溶液

我有一个解决方案,我不会继续在付款失败时发行机票,相反,我想返回一些不同的http代码给客户端。和其他一切一样,除了报酬,一切都是成功的。

在处理来自队列的消息时,如果消息在10次尝试后失败,我想通知客户端,这个事务失败了。

如果通过让客户知道继续开票

问:该解决方案是否具有技术可行性?

EN

回答 4

Software Engineering用户

发布于 2018-07-16 19:03:09

HTTP返回代码设计用于处理HTTP协议,而不是每个可能的请求/响应。

而不是选择一段模糊的代码,如果你斜视它,它可能会被粗略地解释成你想要它做的事情。只需在响应体中返回更多信息即可。

代码语言:javascript
复制
200 OK
{
    "userCreation" : "Passed",
    "ticketReservation" : "Passed",
    "paymentProcessing" : "Failed"
    "orderStatus" : "PendingPayment"
}
票数 9
EN

Software Engineering用户

发布于 2018-07-16 22:10:10

返回一个202 Accepted响应在这里非常合适。

来自维基百科

请求已被接受以进行处理,但处理尚未完成。请求可能会被执行,也可能不会被执行,并且可能在处理发生时被不允许。

这种状态是保留在这样的情况下,现在一切都很好,但有些带外处理正在进行,客户端应该稍后再检查。

各种“带外”处理都会发生。比如上传图片或视频后进行优化,或者像你一样,处理信用卡付款。

票数 4
EN

Software Engineering用户

发布于 2018-07-16 22:22:42

您可以在系统中引入另一个对象,即票证购买请求。

当用户试图购买票证时,您将立即创建其中一个对象(以及从cooresponding返回)。

然后调用方可以监视此请求的状态,使用之前返回的ID调用获取/票证购买-请求/{ID}。他可以读回它的状态,它仍然被信用卡公司验证,或者它失败了。

我不知道你为什么会想自动重试信用卡申请?如果它失败了,而你说这是因为欺诈性的请求,我看不出有理由再试一次。重试的唯一原因是,如果一个临时错误(例如,网络连接或服务器繁忙)导致信用卡运行失败。您需要查看信用卡公司返回的状态代码(如果他们说拒绝,不要重试)。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/375264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档