Rest HTTP GET上的部分对象

Rest HTTP GET上的部分对象,rest,api,architecture,Rest,Api,Architecture,我们收集了以下文件: class Document { id; title; someContent; creator; ... } 需要实现RESTAPI,在第一种情况下,返回所有字段(“id”、“title”、“someContent”等)的所有文档。 在第二种情况下,返回所有文档,但只返回部分字段(仅返回“id”和“title”) 哪种方法最好?使用查询参数“field”在一个端点中实现它是一个好主意吗?还是将它们分离到不同的端点更好? 我也可以使用206状态码吗? 是否有实现此功能的“

我们收集了以下文件:

class Document {
id;
title;
someContent;
creator;
...
}
需要实现RESTAPI,在第一种情况下,返回所有字段(“id”、“title”、“someContent”等)的所有文档。 在第二种情况下,返回所有文档,但只返回部分字段(仅返回“id”和“title”)

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

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

因此,“field”是可选的查询参数,它只指示我们需要返回的字段

在first Get中,将返回所有字段。例如:
[{id:“5F1AB3”,标题:“文档1”,创建者:“John”,…},{…}]
。 在第二个示例中,JSON只包含两个字段:ID和title。响应看起来是这样的:
[{id:“5F1AB3”,标题:“document1”},{…}]

哪种方法最好

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

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

请注意,这正是作为客户机,如果您试图为资源添加书签或与其他人共享书签,您所希望的

GET /documents
GET /documents?field=id&field=title
这些标识符很好。REST很少关心用于区分一个标识符和另一个标识符的拼写约定。请注意,查询是标识符的一部分——就通用组件而言,这是两个不同的标识符,这两个资源可能根本不相关

这不是一个好主意;
206
的语义被耦合到,这不适合您正在做的事情

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