我的应用程序提供了以下资源:
GET /user/:id/orders正如通常使用的那样,这将返回所有用户订单的列表。
现在,客户端想要检查用户是否有任何订单,而实际上并没有得到完整的列表。
我目前的做法如下:
GET /user/:id/orders/exist但在我看来有点奇怪。
有没有一种更“标准”的设计方法?最后,该资源只需要返回以下信息:
发布于 2021-04-22 16:19:29
您将在某些API中看到的是存在(204)或不存在(404)的资源的概念。
但我确实不建议这样做:当您已经发送响应行和一堆HTTP头时,在资源表示中保存几个字节并不会有太大帮助。
你的“资源模型”可以是你想要的任何东西。
REST接口被设计成能够有效地进行大型超媒体数据传输,为Web的常见情况进行优化,但最终导致的接口对于其他形式的体系结构交互来说并不是最优的-- 菲尔丁,2000年。
因此,如果您愿意,可以创建细粒度的资源;但这可能会带来一些后果。“权衡”是一回事。
资源是“文档”的概括;如果有一个报告只是订单数量的计数,或者是订单数量大于零的语句,或者其他什么,那么该报告肯定是资源模型中的一个资源。
如果您知道报告是什么,那么您可能可以猜到报表的名称,并从那里猜到它的拼写。
报告标识符必须是/user层次结构的一部分并没有什么特殊的原因;机器并不关心您使用的拼写约定。
/user/:id/orders/report
/user/:id/orders-report
/user/:id/report
/report/:id
/report?user=:id
/report/user=:id这些都很好,请选择适合您当地会议的不同版本。
请注意,您希望了解缓存 --当您在两个不同的资源中拥有信息时,客户端本地缓存的副本很容易相互矛盾(报告说有订单,但订单列表是空的;或者相反)。就REST和通用组件而言,不同的资源是不同的,并且相互独立。
在大粒度的世界中,您不会经常遇到这个问题,因为您将厨房水槽扔到单个资源中;只要其产生的表示形式内部一致,缓存的副本也是一样的。
https://stackoverflow.com/questions/67216533
复制相似问题