我的申请目前由两个微服务组成:
它还使用其他外部服务:
如果用户尝试使用无效的卡号创建订阅(让我们说他的卡被阻止),C。服务将返回200,并且成功"参数为" false" (我不会处理这项服务,所以我无法做任何事情。)
现在我的问题是,付款(B)和订阅(A)微服务应该返回什么状态代码?
我不确定它是4 **还是200(带有成功参数),因为请求本身没问题,输入格式正常(即使其中的数据无效) 。
答案 0 :(得分:3)
在这种情况下,200显然是不正确的,因为请求并不成功。
我在这种情况下的建议是HTTP 422 Unprocessable Entity,它在WebDAV中定义但是被广泛理解,并指示该请求在语法上有效但具有阻止成功处理的语义错误。
答案 1 :(得分:1)
如果请求在语法上是正确的 - 例如卡号与某些给定的正则表达式匹配,但在另一种方式中无效,它绝对不应该是400 Bad Request
。这不是一个糟糕的要求。
它也不应该返回任何2XX
代码,因为这些代码专门用于成功的响应,并且 - 正如您在正文success = false
中设置的不是成功处理的请求。
最合适的代码将是409 Conflict
以及描述问题的明确消息。它表示请求失败,澄清原因并明确说明在纠正请求后可以重新提交。