使用REST GET API仅检索特定属性

使用REST GET API仅检索特定属性,rest,asp.net-web-api2,Rest,Asp.net Web Api2,我需要定义一个RESTAPI,它应该获取对象的唯一标识符并返回内容。内容从数据库中检索,并且是JSON类型。 所以,我有一个REST URL,如下所示- GET /data/{typename}/{objectid} 这将返回整个对象内容 但是,对象的内容可能很大,因此调用方可能只希望指定要作为响应发送的部分或少数属性。 我的自然想法是向GETAPI添加一个主体,用户可以在其中指定要检索的对象上的属性名列表。 但在做进一步的研究之后,似乎不推荐使用带有BODY的getapi。 我可以想到的另一

我需要定义一个RESTAPI,它应该获取对象的唯一标识符并返回内容。内容从数据库中检索,并且是JSON类型。 所以,我有一个REST URL,如下所示-

GET /data/{typename}/{objectid}
这将返回整个对象内容

但是,对象的内容可能很大,因此调用方可能只希望指定要作为响应发送的部分或少数属性。 我的自然想法是向GETAPI添加一个主体,用户可以在其中指定要检索的对象上的属性名列表。 但在做进一步的研究之后,似乎不推荐使用带有BODY的getapi。 我可以想到的另一个选项是在查询字符串中传递属性名-

GET /data/{typename}/{objectid}?property=prop1&property=prop2...
但名单很容易变得庞大


有没有关于我的API应该是什么样子的建议?我必须使用POST吗?

我建议使用
POST
,因为
GET
有长度限制。

否则,可以使查询字符串如下所示(对于数组) 如此接近:)


使用
POST
是不正确的。只要你在阅读,就使用
GET
。例如,Facebook有一个类似的用例,
/me
端点有许多过滤器,调用是
GET

最后的URL是
/me?字段=id、姓名、关于、年龄范围、设备、货币、教育

你可以在这里自己试试


从技术上讲,使用
POST
是可行的,但这是一个非常糟糕的设计

在您的情况下,排除属性会使URL变短吗?例如
?excludes=thisProp,thatProp,anotherProp
?关注点的可能重复项不是此处查询字符串的长度。我们关心的是如何传递会影响GET API响应的其他参数。谢谢您的回答。我确实觉得POST可能不是合适的方式。facebook的例子让我相信查询字符串可能是正确的方法。然而,我没有facebook登录,因此无法看到它的实际操作,但我明白了要点。尽管从技术上讲,对于检索数据而言,
get
请求是最正确的,但您确实对查询字符串长度有一个硬限制,这可能是一个问题,例如使用datatables。生成的查询字符串很快就达到了极限。您认为“,”作为字段名的delimter会是一个问题吗?一点也不,当您从get请求获得参数时,您将获得整个字符串。然后,您可以用逗号分割,以获得客户端想要读取的字段名称。我认为我非常接近你想要的。
GET /data/{typename}/{objectid}?property[]=prop1&property[]=prop2...