是一个很好的RESTFUL API有不同的响应格式在相同的状态码?



前端应该在相同的状态码下处理不同json格式的响应吗?

或者是后端工作将它们分离成不同的状态码?

我问这个,因为我现在提供了一个restful api,在状态码200下有不同的json响应。

第一个:

{
"status": "error",
"msg": "have no user data",
"inputs": {
"id": "thisisafaketestid"
}
}

第二个:

{
"status": "success",
"user": {
"id": 1,
"name": "somename",
"email": "someEmail@gmail.com"
}
}

两个请求的状态码都是200。

第一个响应似乎应该有一个不同的状态码。如果您在这种情况下查找特定的用户,并且没有找到,则状态码可能应该是404。

无论如何,消息结构都不应该不同。

状态码,如200ok,是通过网络域传输文档的元数据。您向服务器请求资源的当前表示形式,服务器将向您返回资源的当前表示形式。200 OK是完全合适的。

想象一下,例如,一个普通的旧的无聊的web服务器。您请求/example.json的副本,服务器查看磁盘,找到该文件,并将其发送回给您。正确的状态码是什么?200好了。文档内容的语义会改变这个答案吗?没有。


它可能是或可能不是好的资源设计-即,这是一种文档模式,使良好的API体验?

在某些情况下,它确实很有意义:描述job-123结果的报告可能表明作业失败;描述server-456状态的报告可能表明该服务器不健康。

告诉我们我们的域的文档过程不是一路顺风可能非常不同的信息共享,不同领域。

您在这里演示的设计可能"很好",或者可能是最好的折衷方案。

是的,当这些类型的设计是合适的,客户端必须解析文档以确定语义。

调用API时的响应有http状态码:200,403,404,500…通常我们让服务器处理默认值,但有时我们会控制它们(与。net是StatusCode)。

  1. 前端是否应该在相同的状态码下处理不同json格式的响应?
  • 是的请参阅jquery代码:

    $.ajax({
    type: type,
    url: url,    
    dataType: 'json',
    data: params,
    success: function (data) {
    if(data.status == 200){ //this is http status code
    // success call
    if (data.return.status == 'error1'){ //this is your logic error
    your code here
    }
    }
    },
    error: function (data) {
    if (data.status == 401) { // this is http status code
    // Unaurhorized
    }
    })
    
  1. 或者后端工作将它们分离成不同的状态码?是的(如上所述)但是,如果您希望返回逻辑错误,则应该执行与上述代码相同的操作。即使用状态字段返回错误代码。返回值可按以下方式处理:
// handle http status code if needed. I usually let the server handle this by default, with return codes of 200, 404, 500..
your code here
// handle logic error
if (error1) { status = "error1"} else if (error2) { status = "error2"} 
your code here
// execute your logic
your code here

相关内容

  • 没有找到相关文章

最新更新