API最佳实践 - 通用与特殊方法

时间:2013-06-29 18:32:21

标签: web-services rest api-design

我正在创建将由网页使用​​的REST API 我应该提供几种类型的数据,我想知道最佳做法是什么:

  1. 创建一个方法,该方法将返回包含所有所需数据的复杂对象。
    • 优点:需要从UI端进行一次调用才能获取所有数据。
    • 缺点:根本不是通用的解决方案。
  2. 创建多个自治方法。
    • 优点通用,足以让其他组件在将来使用。
    • 缺点:将要求用户界面对服务器进行多次调用。
  3. 哪一个更符合最佳做法?

2 个答案:

答案 0 :(得分:2)

它最终取决于您的环境,数据大小和方法的数量。但是有几个理由可以使用第二个选项,只有一个选择第一个选项。

第一个选项:一个复杂的方法

使用第一个的原因:多个请求的HTTP开销。

是否存在开销?当然,但真的 高吗? HTTP是最轻的应用层协议之一。 设计以节省开销。它的简单性和轻型标题是其成功的一些主要原因。

第二个选项:多个自治方法

现在有几个理由可以选择第二个选项。即使数据很大,相信我,它仍然是一个更好的选择。我们来讨论一些方面:

  • 如果数据量很大
    • 将数据传输分成更小的部分会更好。
    • HTTP是尽力而为协议,数据故障非常常见,特别是在互联网环境中 - 如此常见,应该预期数据块越大,重新请求所有内容的风险就越大。
  • 方法数量:可维护性,重用,组件化,可学习性,分层......
    • 您自己说,通用解决方案更容易被其他组件使用。方法的职责越简单,越简洁,就越容易理解它们,并在其他方法中重用它们。
    • 更容易维护,学习:它们越独立,就越不需要知道改变它(或摆脱一个错误!)。

在这里考虑REST非常重要,但将组件分解成更小部分的原因实际上来自于理解HTTP协议和良好的编程/软件工程。

答案 1 :(得分:0)

所以,事情就是这样:REST很棒。但并非所有最纯粹形式的模式都适用于所有情况。如果效率是一个问题,请采用一次通话路线。或者也许提供两者,如果其他人将消耗它,并且可能不需要每次都下拉完整的复杂对象。

我认为REST并不关心数据规范化。有两种方法可以获得相同的数据并不会受到伤害。