首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST资源,用于检查资源是否有现有子资源。

REST资源,用于检查资源是否有现有子资源。
EN

Stack Overflow用户
提问于 2021-04-22 15:41:17
回答 1查看 27关注 0票数 0

我的应用程序提供了以下资源:

代码语言:javascript
复制
GET /user/:id/orders

正如通常使用的那样,这将返回所有用户订单的列表。

现在,客户端想要检查用户是否有任何订单,而实际上并没有得到完整的列表。

我目前的做法如下:

代码语言:javascript
复制
GET /user/:id/orders/exist

但在我看来有点奇怪。

有没有一种更“标准”的设计方法?最后,该资源只需要返回以下信息:

  • 是的,用户有订单
  • 不,用户没有任何订单
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-22 16:19:29

您将在某些API中看到的是存在(204)或不存在(404)的资源的概念。

但我确实不建议这样做:当您已经发送响应行和一堆HTTP头时,在资源表示中保存几个字节并不会有太大帮助。

你的“资源模型”可以是你想要的任何东西。

REST接口被设计成能够有效地进行大型超媒体数据传输,为Web的常见情况进行优化,但最终导致的接口对于其他形式的体系结构交互来说并不是最优的-- 菲尔丁,2000年

因此,如果您愿意,可以创建细粒度的资源;但这可能会带来一些后果。“权衡”是一回事。

资源是“文档”的概括;如果有一个报告只是订单数量的计数,或者是订单数量大于零的语句,或者其他什么,那么该报告肯定是资源模型中的一个资源。

如果您知道报告是什么,那么您可能可以猜到报表的名称,并从那里猜到它的拼写。

报告标识符必须是/user层次结构的一部分并没有什么特殊的原因;机器并不关心您使用的拼写约定。

代码语言:javascript
复制
/user/:id/orders/report
/user/:id/orders-report
/user/:id/report
/report/:id
/report?user=:id
/report/user=:id

这些都很好,请选择适合您当地会议的不同版本。

请注意,您希望了解缓存 --当您在两个不同的资源中拥有信息时,客户端本地缓存的副本很容易相互矛盾(报告说有订单,但订单列表是空的;或者相反)。就REST和通用组件而言,不同的资源是不同的,并且相互独立。

在大粒度的世界中,您不会经常遇到这个问题,因为您将厨房水槽扔到单个资源中;只要其产生的表示形式内部一致,缓存的副本也是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67216533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档