如何设计通过 GET 使用 REST API 仅检索特定属性

tyr*_*ion 6 rest asp.net-web-api2

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

GET /data/{typename}/{objectid}
Run Code Online (Sandbox Code Playgroud)

这将返回整个对象内容。

然而,对象的内容可能很大,因此调用者可能只想指定一些或少数属性作为响应发送。我自然想到的是向 GET API 添加一个 BODY,用户可以在其中指定要检索的对象的属性名称列表。但经过进一步研究,似乎不建议使用带有 BODY 的 GET API。我能想到的另一个选择是在查询字符串中传递属性名称 -

GET /data/{typename}/{objectid}?property=prop1&property=prop2...
Run Code Online (Sandbox Code Playgroud)

但这个列表很容易变得很大。

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

Amr*_*awy 5

从技术上讲,使用POST可以,但不是首选。如果您正在阅读,请使用GET. 例如,Facebook 有一个类似的用例,其中/me端点有许多过滤器,并且调用是GET.

最终的 URL 是, /me?fields=id,name,about,age_range,devices,currency,education

您可以从这里亲自尝试, https://developers.facebook.com/tools/explorer/145634995501895/ ?method=GET&path=me%3Ffields%3Did%2Cname%2Cabout%2Cage_range%2Cdevices%2Ccurrency%2Ceducation&version=v2.8

我建议阅读有关 GraphAPI https://developers.facebook.com/docs/graph-api/overview/和 GraphQL https://graphql.org/的更多信息