复杂 API 与简单 API 端点

complex API vs simple API endpoint

我有一个后端 Rails 应用程序,主要是 API 端点和一个主要在 React 中构建的前端应用程序。

考虑以下模型:

  1. Panel:是仪表板内的容器元素。它在仪表板内定义了 dimensions/positions。它还使用 content_type 和 content_id(多态关联)定义其内容。
  2. Chart / SingleValue / Section:这些都是可以用作面板内容的模型。

我现在想做的是让用户一步创建一个"chart panel"。

我一直在想现在是否更好:

  1. 拥有所有基本的 CRUD API 端点并 100% 在前端管理面板+图表创建。这将意味着前端更复杂,但端点更少 API。
  2. 在 Rails 端有一个额外的 API 端点来创建 panel+chart/panel+single_value/panel+section(原子操作)。这意味着前端的复杂性要低得多,但端点更多 API。

理想的方法是什么?

也许对每个使用以下请求正文创建的面板执行单个 POST 请求 /panels/(假设每个面板都需要一个内容):

{
  dimensions: '',
  positions: '',
  content: {
    type: 'chart', // singleValue, section
    // content attributes
  }
}

我的建议是 Panel 应该是一个集中式组件(它解析维度和位置)并且对于每个 children 你根据 content.type 渲染它们。您将能够使用单个端点并仍然保持 RESTFul 标准。

在我看来,如果可以降低 UI 的复杂性,您可以聚合粒度端点并创建更多端点。这基本上是一个 Facade pattern(https://en.wikipedia.org/wiki/Facade_pattern) ,您可以在其中将粒度端点聚合到特定的高阶端点中,这将有助于 UI 创建更复杂的结构,而无需进入实施细节上述结构。