我加入了一个正在开发Java的API REST的团队。 作为.Net开发人员,我正在开发使用该API的客户端,我正在使用RestSharp。 有时我在Java方面开发,有时在.Net方面开发。 分析java代码,我发现当出现问题时,如异常或失败的业务规则,他们(Java编码器)返回HTTP状态代码500(错误)。看这个例子:
try {
loteIde = input.getFormDataPart("ideLote", String.class, Class.class);
} catch (IOException e) {
return Response.status(400).entity(errorHandler.getJsonError(ErrorMsgs.ERRO_INTERNO)).build();
}
在上面的例子中,如果客户端(API调用者)没有传递参数" ideLote"对于请求,他们返回400错误。
否则,当缺少某些业务实体时,它们会返回404 HTTP错误(NotFound)。看:
Lote lote = loteDAO.findById(loteIde);
if (lote == null) {
return Response.status(404).entity(errorHandler.getJsonError(ErrorMsgs.NAO_POSSIVEL_IDENTIFICAR_LOTE)).build();
}
他们无法找到实体(Lote),因此他们返回了400 HTTP状态错误。
在我的构思中,HTTP状态表示HTTP请求的状态,而不是某些商务规则的状态,因此,在这两种情况下,它们都应该返回200个HTTP状态代码(没有错发生在Http请求中,以及其他一些关于业务规则中发生的事情的信息(可能是XML或JSON),例如,他们可能会给我这样的信息:
{
"IdCertificado": null,
"Errors": [
{
"Codigo": "0001",
"Mensagem": "You should inform the ideLote property"
}],
"TemErro": true
}
我的观念错了吗?什么应该是Web API的默认行为?
PS1:this回答同意我的观念并使用启示录和鸽子来解释它:)。PS2:欢迎提供更多参考资料。
答案 0 :(得分:-2)
你需要编写try catch如果和在try块中你需要检查是否满足条件以json格式返回数据否则找不到状态代码 如果data为null则返回异常 我认为你可以很容易地给出代码
[HttpGet]
public HttpResponseMessage GetNote(string ExamId, string QuestionId)
{
try
{
decimal exid = Convert.ToDecimal(ExamId);
decimal qid = Convert.ToDecimal(QuestionId);
var temp = new MemberQuestionsRepository().FirstOrDefault(x => x.MemberExamId == exid && x.QuestionId == qid);
if (temp != null)
{
var note = temp.Note;
return Request.CreateResponse(HttpStatusCode.OK, note);
}
else
{
return Request.CreateResponse(HttpStatusCode.NotFound, "No Note Found");
}
}
catch (Exception)
{
return Request.CreateResponse(HttpStatusCode.ExpectationFailed);
}
}