HTTP GET上的部分对象

时间:2019-12-22 22:17:54

标签: rest api architecture

我们收集了以下文件:

class Document {
id;
title;
someContent;
creator;
...
}

需要实现REST API,在第一种情况下,该API返回具有所有字段(“ id”,“ title”,“ someContent”等)的所有文档。 在第二种情况下,返回所有文档,但仅返回部分字段(仅“ id”和“ title”)。

哪种方法最好?在具有查询参数“ field”的一个端点中实现它是一个好主意吗?还是将它们分离到不同的端点更好? 还可以使用206状态代码吗? 有没有实现此功能的“最佳实践”?

例如,我可以这样做(但我不确定这是正确的方法):

GET /documents (200 status code)
GET /documents?field=id&filed=title (206 status code)

因此,“字段”是可选的查询参数,仅表示我们需要返回的字段。

在第一个Get中,将返回所有字段。例如:[{id: "5F1AB3", title: "Document 1", creatur: "John", ...}, {...}]。 在第二个中,JSON仅具有两个字段:ID和title。响应以这种方式显示:[{id: "5F1AB3", title: "Document 1"}, {...}]

2 个答案:

答案 0 :(得分:0)

  

哪种方法最好?

您可能需要两种不同的资源,就像全尺寸图像和缩略图是不同的资源一样。

如果它们是不同的资源,那么我们应该期望看到两个不同的标识符。

请注意,如果您要为资源添加书签或与他人共享您的书签,这正是您作为客户端所想要的。

GET /documents
GET /documents?field=id&field=title

那些标识符很好。 REST很少关心用于将一个标识符与另一个标识符区分开的拼写约定。请注意,查询是标识符的一部分-就通用组件而言,这是两个不同的标识符,两种资源可能根本不相关!

206 Partial Content不是一个好主意; 206的语义与Range Requests耦合在一起,这不适合您的工作。

答案 1 :(得分:0)