我正在设计一个REST api,感兴趣的是,如果有人可以在以下场景中提供最佳实践帮助。
我有......
我需要提供让客户获得最近订单的能力。这种情况下的最佳做法是什么?只需获取所有内容并按日期排序或提供特定方法?
答案 0 :(得分:2)
我需要提供让客户获得最近订单的能力。
当然,您可以提供查询参数来对订单集合进行过滤,排序和切片,但为什么不简化并在客户需要时提供最新订单呢?
你可以使用类似的东西(返回单个订单的表示):
GET /customers/{customerId}/orders/latest
以上网址会映射一个随时间变化的订单,并且完全没问题。
假设您还需要最后5个订单。你的路线怎么样?
上述方法侧重于获取客户最近订单要求的能力。如果返回最后5个订单要求最终会在一段时间后出现,我可能会引入另一个映射,例如/recent
,它返回带有最近订单的集合的表示并接受查询参数表示要返回的订单数量(如果省略该参数,5
将是默认值。)
/latest
映射仍然有效,并且仅返回最新订单的表示。
提供查询参数来过滤,排序和切片订单集合仍然是一种有效的方法。
关键是:如果您知道将使用API的客户端,请将其定位到他们的需求。否则,使它更通用。在修改API时,请小心修改和版本化API也很受欢迎。
答案 1 :(得分:1)
我认为不需要另一条路线。
在获取请求中传递&order=-created_at&limit=1
之类的内容
或&order=created_at&orderby=DESC&limit=1
(请注意,我不确定是否可以命名你的参数,所以也许你可以使用&count=1
代替&limit=1
,同上命令params)
我认为这也取决于您是否在该路线上使用分页,因此可能需要额外的参数
Customers/{customerId}/Orders?order=-created_at&limit=1
答案 2 :(得分:0)
用于类似用例的 Github API 使用最新的,以获取最新的单个资源。
https://docs.github.com/en/rest/reference/repos#get-the-latest-release
因此要获取您可以使用的最新单个资源。
<块引用>GET /customers/{customerId}/orders/latest
但是想知道社区对此有何看法。
IMO the resource/latest 给人的印象是响应将是按最新到最旧排序的资源列表。