我应该在一次调用中获取父资源以及嵌套资源,在单独的调用中获取它们,还是两者都获取(REST API)?

问题描述 投票:0回答:1

我有一个 API 设计问题。如果我有一个带有嵌套资源的资源,并且有一半的时间需要从客户端获取父级以及嵌套资源,那么我应该使用一次调用来获取这些资源还是更好(在设计方面)获取它们在单独的通话中?

例如,大多数时候我需要用它的

Group
来获取
Employees
。最好是在一次调用中获取它们,还是使用两个不同的调用(一个用于
Group
,另一个用于
Employees

此外,使用条件参数从一次调用中有条件地获取嵌套实体会被认为是一种不好的做法吗?

示例:

/group?withEmployees=true
(获取包含员工的群组)

api rest
1个回答
0
投票

我有一个 API 设计问题。如果我有一个带有嵌套资源的资源,并且有一半的时间需要从客户端获取父级以及嵌套资源,那么我应该使用一次调用来获取这些资源还是更好(在设计方面)获取它们在单独的通话中?

正如所写,这个问题没有多大意义。这不是你的错:文学很糟糕

您问题中的缺陷是:“资源”不是数据模型中实体的概括; “资源”是网页的概括。

资源只是可以通过统一的resource标识符来标识的东西。我们有主要资源(通常由“绝对URI”标识),并且有通过引用主要资源和片段形式的附加标识信息来标识的次要资源(主要资源的某些“部分或子集”)。非常粗略 /resources?primary /resources?primary#secondary

因此,当您询问 
/group?withEmployees=true

时,您真正询问的是新的

primary
资源,该资源可能具有与现有 /group 资源不同的当前表示形式。


大多数时候我需要获取一个包含其员工的组。在一次调用中获取它们会更好还是使用两个不同的调用(一个用于组,另一个用于员工?

那么,拥有一个包含所有信息的表示的资源会更好,还是应该将信息分布在两个(或更多)不同的资源中?

答案:是的,其中一个选择可能至少比另一个选择稍好一些。但哪个?将通过分析所涉及的权衡并判断哪些收益大于哪些成本来回答。

对于主要向客户端提供信息的 API(换句话说,对于非常类似于网站的 API),您将主要关注与设计网站时会提出的相同类型的问题 -我们是否希望这两条信息具有相同的授权策略?我们是否希望两条信息具有相同的缓存策略?我们是否需要能够区分对跟踪/记录中的信息的请求?等等。

对于客户端定期发送会

更改

API 资源表示的信息的 API,那么您还需要考虑设计的缓存失效影响。

举一个权衡很重要的例子:在很多 API 中,设计者假设消费者永远不会从缓存中提取数据——消费者总是从源服务器获取新信息,并尽快根据该信息采取行动可以使用。

这大大简化了事情 - 当事实证明假设是有效的时,效果非常好。 当然,如果您的 API 取得了灾难性的成功,您的原始服务器就会受到攻击,也许您确实希望能够在您的服务器前面放置一个通用的 Web 缓存设备,并且您的权衡会发生变化。 (这并没有什么问题 - 需要更新您的设计决策,因为您试图承载比原始目标多 100 倍的流量,并且希望继续增长,这是一个

的问题。)

© www.soinside.com 2019 - 2024. All rights reserved.