Php RESTAPI和HTTP页面的端点设计

Php RESTAPI和HTTP页面的端点设计,php,rest,Php,Rest,我正在构建一个基于Symfony的web应用程序,它将有普通的web页面来输入数据,还有一些restapi。例如,我可以有一个页面来创建一个新项目,我还需要一个REST端点。我现在正在努力思考哪种方法是处理同一事物的两个端点的最佳方法:我应该使用不同的代码来分别处理这两种格式,还是应该使用类似于FOSRestBundle的方法来处理HTTP和REST的相同API?显然,后者的优点是我不应该重复代码两次,但我怀疑是否需要为端点的HTML版本提供特定的代码。最后,大型站点如何设计其应用程序来处理标准

我正在构建一个基于Symfony的web应用程序,它将有普通的web页面来输入数据,还有一些restapi。例如,我可以有一个页面来创建一个新项目,我还需要一个REST端点。我现在正在努力思考哪种方法是处理同一事物的两个端点的最佳方法:我应该使用不同的代码来分别处理这两种格式,还是应该使用类似于FOSRestBundle的方法来处理HTTP和REST的相同API?显然,后者的优点是我不应该重复代码两次,但我怀疑是否需要为端点的HTML版本提供特定的代码。最后,大型站点如何设计其应用程序来处理标准页面和REST API?

我通常主张为我的REST服务使用单独的端点。我的理由如下:

使用MVC架构,您将拥有一个位于服务器端的视图。该视图的控制器(端点)可能具有特定于将在服务器端进行的HTML呈现的逻辑。视图本身在服务器端视图中也可能有一些逻辑

在使用RESTful服务时,服务器端可能有相同的(或某些相同的)逻辑,但也可能有完全不同的逻辑,或者在从服务器获取数据后在客户端使用的部分模板中放置一些逻辑

通常,我会公开一个服务器端服务层来抽象出我的DAL(数据访问层),因此如果需要从服务器端控制器和RESTful服务中提取相同的代码,您可以将该逻辑抽象到一个中央服务层,从这两种情况中调用它,并避免代码重复,同时仍然可以灵活地为HTTP和REST调用构建单独的功能。我不喜欢看到这样的事情:

/* AJAX check  */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    /* special ajax here */
    die($content);
}