在REST API中返回不完整结果的正确方法?

问题描述:

我有一个REST API,它汇集来自几个不同来源的数据,进行一些格式化,并将它提供回JSON有效载荷。在REST API中返回不完整结果的正确方法?

/API /胡说/资源

[ 
    { 
     "name": "resource1", 
     "value": 19, 
     "foo": "bar" 
    }, 
    { 
     "name": "resource2", 
     "value": 68, 
     "foo": "baz" 
    }, 
    { 
     "name": "resource3", 
     "value": 88, 
     "foo": "blee" 
    } 
    //etc... 
] 

然而,一些我聚集来源是不可靠的,并要求他们超时,失败,或者得不到回应间歇。

[ 
    { 
     "name": "resource1", 
     "value": 19, 
     "foo": "bar" 
    }, 
    //resource2 is missing :c 
    { 
     "name": "resource3", 
     "value": 88, 
     "foo": "blee" 
    } 
    //etc... 
] 

当这个集合的一部分失败,什么是最好的/ REST风格/正确地通知我的REST API的消费者,他们所请求的数据是不完整的方法吗?

+0

我不确定。有趣的问题。可能你应该为资源添加一个status属性,所以你可以在缺少的远程资源上设置一个'status:“timeout”'或类似的东西。 – inf3rno

+0

我会,但我不一定知道在这些错误情况下缺少哪些特定资源,所以在这些情况下我不能假定占位符。 – 72A12F4E

+0

我想至少你知道超时发生在哪些资源上。从客户角度来看,一些资源不可用很重要吗? – inf3rno

我想你应该使用特殊的HTTP状态码。你可以找到完美的一个here

+0

206部分内容似乎有潜力,但我认为它的目的在于从客户端发送的某个索引下载部分文件的特定用例。在我的使用案例中,它不正确,因为我实际上并没有要求范围或下载部分文件,我只是收到不完整的内容 – 72A12F4E

+0

@ 72A12F4E Yepp,afaik它用于服务范围请求,所以它不能解决您的问题问题。 – inf3rno