Web services 关于是否为REST API使用单独控制器的建议?

Web services 关于是否为REST API使用单独控制器的建议?,web-services,rest,grails,groovy,Web Services,Rest,Grails,Groovy,我们正在为我们的应用程序规划一个RESTAPI,并正在尝试 决定是否为其余部分实施单独的控制器 功能与否 我们可以在当前控制器中使用withFormat{},但是 在不同的控制器中分离REST功能 稍微干净一点 通过这种方式,我们可以独立于当前控制器构建API 我们甚至可以将REST控制器引入另一个应用程序 等等 对这个问题有什么想法吗?有什么真实世界的经验吗 最佳实践是?我将很快使用grails,但到目前为止,我对它几乎没有经验。但在我工作的web应用程序中,我们总是将web服务与控制器代码分

我们正在为我们的应用程序规划一个RESTAPI,并正在尝试 决定是否为其余部分实施单独的控制器 功能与否

我们可以在当前控制器中使用withFormat{},但是 在不同的控制器中分离REST功能 稍微干净一点

通过这种方式,我们可以独立于当前控制器构建API 我们甚至可以将REST控制器引入另一个应用程序 等等

对这个问题有什么想法吗?有什么真实世界的经验吗
最佳实践是?

我将很快使用grails,但到目前为止,我对它几乎没有经验。但在我工作的web应用程序中,我们总是将web服务与控制器代码分开。我们还把其余的和肥皂分开。它们的常用方法是在服务层。它确实感觉更干净。我们不必在方法中插入太多的
if
s

我们最近面临同样的决定,我们决定为restapi使用单独的控制器

单独控制器的优点包括更干净/更清晰的控制器操作,以及以后支持不同版本的RESTAPI的可能性

我们还希望保持在单独的服务器实例上托管RESTAPI的选项处于打开状态。这些服务器将使用完全相同的.war,但具有不同的配置设置


单独控制器的一个缺点可能是控制器代码干燥。尽管这应该是有限的,因为IMHO应该尽可能精简控制器,并将共享逻辑提取到Grails服务或帮助器类。

对于给定的资源,我将使用一个控制器,该控制器基于上下文(接收或请求的媒体类型——SOAP、JSON、XML等)与服务层进行接口,您有一个真正的统一资源标识符,可以接受和返回各种媒体类型,控制器不需要知道任何事情,只需要知道用户想要对什么资源和涉及什么媒体类型执行什么方法

例如,服务层可能返回具有“toXml”、“toSoap”或“toJson”等方法的对象。然后,您可以要求服务层执行任何操作,并在请求的媒体类型上使用switch语句来返回请求的信息,或者在默认情况下抛出406不可接受的状态代码。对于不安全或幂等的事务,对象可能具有用于给定媒体类型的构造函数或工厂方法,然后您只需请求服务层对该对象执行任何操作