首页 > 解决方案 > 是否有在 RESTful API 中定义“模板”资源的模式?

问题描述

假设我正在构建一个 Web 应用程序(使用 React,以防万一),有人可以在其中创建一个新的 Widget。一些 Widget 属性在 API 的数据模型中定义了默认值。这些默认值需要显示在 UI 表单中以创建新的 Widget。

我想避免在应用程序与 API 数据模型中重复这些默认值。这是 API 中定义的示例数据模型:

Widget
  _id
  name
  messageTextColor (default #999999)
  bodyBackgroundColor (default #FFFFFF)
  someBooleanValue (default true)
  someOtherBooleanValue (default false)
  ... and so on

有十几个设置,许多都有默认值。

我可以在我的 UI 应用中复制这些默认值:

class EditWidgetPage extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      name: '',
      messageTextColor: '#999999',
      bodyBackgroundColor: '#FFFFFF',
      someBooleanValue: true,
      someOtherBooleanValue: false,
      ... etc
    };
  }
}

我还可以在我的 API 中定义一个资源GET /widgets/new,它返回一个“模板”小部件:

{
  name: '',
  messageTextColor: '#999999',
  bodyBackgroundColor: '#FFFFFF',
  someBooleanValue: true,
  someOtherBooleanValue: false,
  ... etc
}

我想知道是否有人可以向我指出与常见模式相关的在线信息(例如,博客文章),通过这种模式可以在 RESTful API 中访问“模板”资源——或者甚至是此处未列出的替代方法。

标签: restweb-applications

解决方案


我担心这将被视为“基于意见”,或者至少是一个有点不清楚的答案。无论如何,您可能会在 HATEOAS 中找到答案。许多格式都有“形式”或“动作”的概念,“发现创建形式”的想法是一种非常常见的模式。

无论如何,我也不明白你怎么不能:

  1. http://api.example/foo/template在with处获取“模板”资源GET
  2. 编辑属性,以及
  3. 在新端点再次提交结果以使用PUT和创建资源POST

推荐阅读