复杂 API 与简单 API 端点
complex API vs simple API endpoint
我有一个后端 Rails 应用程序,主要是 API 端点和一个主要在 React 中构建的前端应用程序。
考虑以下模型:
- Panel:是仪表板内的容器元素。它在仪表板内定义了 dimensions/positions。它还使用 content_type 和 content_id(多态关联)定义其内容。
- Chart / SingleValue / Section:这些都是可以用作面板内容的模型。
我现在想做的是让用户一步创建一个"chart panel"。
我一直在想现在是否更好:
- 拥有所有基本的 CRUD API 端点并 100% 在前端管理面板+图表创建。这将意味着前端更复杂,但端点更少 API。
- 在 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 创建更复杂的结构,而无需进入实施细节上述结构。
我有一个后端 Rails 应用程序,主要是 API 端点和一个主要在 React 中构建的前端应用程序。
考虑以下模型:
- Panel:是仪表板内的容器元素。它在仪表板内定义了 dimensions/positions。它还使用 content_type 和 content_id(多态关联)定义其内容。
- Chart / SingleValue / Section:这些都是可以用作面板内容的模型。
我现在想做的是让用户一步创建一个"chart panel"。
我一直在想现在是否更好:
- 拥有所有基本的 CRUD API 端点并 100% 在前端管理面板+图表创建。这将意味着前端更复杂,但端点更少 API。
- 在 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 创建更复杂的结构,而无需进入实施细节上述结构。