我想基于任何js框架实现SPA,例如角JS。我已经有许多现有的 Web API,其中包含我需要在应用程序上显示的信息。我必须再添加 1 个来管理新信息。新的 DTO 将引用其他 DTO。我的问题是,更好的方法是调用 API 并在 Web 应用程序上编译 DTO 或在新 API 中调用 API 合并所有数据并使用现成的对象创建 GET 方法。
第一种从网站角度来看的方法:
Call (I know userId - based on logged in user [in this example = 1])
/get/order/{userId}
{
UserId: 1
Products:{1,2}
}
based on that call:
/get/user/1
{
FirstName: test,
LastName: test
}
/get/product/1
{
Price: 10,
Name: Test
}
/get/product/2
{
Price: 100,
Name: Test2
}
合并 Angular Js Web 中的所有数据
从网站角度来看第二种方法:
合并 Order Web API 上的所有内容
Call:
/get/ordermerged/{userId}
{
FirstName: test,
LastName: test
Products:
{
{
Price: 10,
Name: Test
},
{
Price: 100,
Name: Test2
}
}
}
我附上屏幕截图以更好地概述。
这是可重用性和专业化之间的权衡。可重用性带来了明显的优势——您最终可能需要做更少的工作。专业化带来的优势是您的前端可以按原样使用 API。通过专业化,您也将只加载您实际需要的数据,而对于许多独立的 API,可能会存在冗余数据,并且可能会稍微增加一些开销。
我真的不认为存在一种方法比另一种方法更好的概念。这完全取决于您的具体情况是否值得。我认为你应该根据具体情况选择一种方法。如果某些端点实际上并未被重用,您不妨创建一个“合并”/专用版本,在一次调用中即可获得所有内容。在应用程序的其他部分,您可能拥有更可重用的端点,因此您坚持使用它们,并在客户端进行更多“处理”。
关于性能(单个 API 调用与多个 API 调用),HTTP/2 协议可能会稍微推动多个较小的 API 端点。
对于 Angular 而言,一种方法是否优于另一种方法并不重要。角不在乎。 :-)