我应该将RESTful API控制器与“常规”控制器分开吗?

问题描述:

这似乎是一个基本问题,但经过大量搜索我似乎无法找到一个简单的解释:我应该将RESTful API控制器与“常规”控制器分开吗?

如果我正在构建一个Web应用程序,将主要通过Web浏览器访问,但是如果两者之间存在很大程度的分离,那么这也会以REST方式支持一些API请求?

一方面,似乎大量的功能是相同的,在不同的视图中呈现相同的数据(HTML或XML/JSON)。但另一方面,我需要向浏览器展示某些不太适合REST风格的方法:如何获取空表单来创建资源的新实例以及如何获取预填表单编辑现有资源。

这两种不同的方式通过不同的控制器来访问系统?同一控制器中的不同方法?与视图类型切换完全相同的方法?

您的核心控制器不必更改,但这并不意味着您无法单独支持您的UI。例如,您拥有的两个表单示例对于Web API都是唯一的。您的条目URI当然可以链接到机器和用户界面的这些页面,但不要指望机器用户真正使用它们。另外,如果你的机器客户端只是XML/JSON,那么这些表示根本不需要这些表单的链接,因为它们不会使用它们,并且它们不会在JSON/XML无论如何。您可以通过内容协商进行管理。