我正在构建一个构建在Symfony之上的Web应用程序,该应用程序将具有用于输入数据的正常网页以及一些REST API。例如,我可以有一个页面来创建一个新项目,我也想要一个REST端点。我现在正在努力思考哪种方法是处理同一事物的两个端点的最佳方法:我应该使用不同的代码来单独处理这两种格式,还是应该使用类似FOSRestBundle的东西,它在一种方法中处理相同的HTTP和HTTP的API休息?显然,后者的优势在于我不应该两次复制代码,但如果我想为端点的HTML版本提供特定的代码,我会有一些疑问。最后,大型网站如何设计其应用程序来处理标准页面和REST API?
答案 0 :(得分:1)
我通常会主张为我的REST服务提供单独的端点。我的理由如下:
使用MVC架构,您将拥有一个位于服务器端的视图。该视图的控制器(端点)可能具有特定于将在服务器端发生的HTML呈现的逻辑。视图本身在服务器端视图中也可能有一些逻辑。
当谈到使用RESTful服务时,可能具有相同(或某些相同)的逻辑服务器端,但您也可能具有完全不同的逻辑,或者在您的部分中放置一些逻辑从服务器获取数据后使用客户端的模板。
通常,我公开服务器端服务层以抽象出我的DAL(数据访问层),因此如果需要来自服务器端控制器的IDENTICAL代码,那么RESTful服务,您可以将逻辑抽象到中央服务层,从两种情况调用它,避免代码重复,同时仍然可以灵活地为HTTP和REST调用构建单独的功能。我不喜欢看到这样的事情:
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
/* special ajax here */
die($content);
}