2017-06-02 71 views
0

正确的反应我们有以下响应客户端的格式,如果请求成功:的Web API - 客户

{ 
    "ExitCode": 1, 
    "ErrorMessage": "", 
    "NumberOfGreenBoxMatches": 4, 
    "NumberOfPinkBoxExtractFrames": 5, 
    "ProcessingTime": 4000, 
    “HasOverlay”: false; 
    "MatchResult": "...." 
} 

如果一个客户请求是坏的或内部错误发生客户提出返回如下:

{ 
    "ExitCode": -10, 
    "ErrorMessage": "Internal error parsing pink boxes. Please contact tech support", 
    "NumberOfGreenBoxMatches": 0, 
    "NumberOfPinkBoxExtractFrames": 0, 
    "ProcessingTime": 1240, 
    “HasOverlay”: false; 
    "MatchResult": "" 
} 

是不是正确的做法(返回类似的json)?我的意见不是,我们应该只返回像

{ "ErrorMessage": "Internal error parsing pink boxes. Please contact tech support" } 

和正确的HttpCode。什么是正确的方法?

回答

2

有关正确方法的建议看起来更符合HTTP标准。因为ExitCode看起来像HTTP响应代码功能重复。

但我认为最终的解决方案高度依赖于客户端架构。有一些问题需要考虑:

  • 客户端是否解析HTTP代码?
  • 客户端如何验证服务器响应?
  • 服务器错误响应必须是JSON模式与常规响应兼容吗?
  • 客户端是否必须始终接受字段中的值一样ProcessingTime
+0

如何以这种方式实现多语言? –

+0

@OlegSh你应该在客户端实现'Accept-Language:'头部。您可以在申请多语言错误消息时使用该头文件。 –

+0

好吧,用多国语言我同意。但是在很多情况下需要额外的“退出代码”。即用户没有选择图像,应用程序应该显示它的特殊形式... –

-1

使用Model收到来自网络API的结果,在这里,在客户端使用的型号是

public class MyResult 
{ 
    public int ExitCode { get; set; } 
    public string ErrorMessage { get; set; } 
    public int NumberOfGreenBoxMatches { get; set; } 
    public int NumberOfPinkBoxExtractFrames { get; set; } 
    public int ProcessingTime { get; set; } 
    public bool HasOverlay { get; set; } 
    public string MatchResult { get; set; } 
} 

,如果你在发生错误时发送不同的结果,它具有单一属性“ErrorMessage”,它们不能在客户端处理它。

因此,您最好根据客户提出的确切型号提供信息。

+0

状态代码表示客户端他不应该将其作为标准响应来处理 –

+0

他们可以根据其中的信息管理响应,例如:正如您在Q中指出的,退出代码:-10。他们可以基于此处理结果并显示错误消息。 – Vijayaraghavan

+0

它们可以,但是HTTP需要返回正确的状态码 –