Php 为网页构建API的正确方法

Php 为网页构建API的正确方法,php,api,symfony,Php,Api,Symfony,我用的是symfony。当我创建的网页也将有一个API,我应该怎么做呢?它们之间的区别在于,API将返回例如JSON字符串作为响应,但若我并没有弄错的话,web页面将返回html/文本响应。那么,我是否应该添加一些条件,如果URL是api.something.com,则返回JSON,如果是something.com,则返回html/text?或者我应该构建单独的控制器?但除了返回对象之外,它们将是相同的 您可以通过多种方式来实现这一点 1) 如果你的应用程序流量很大,那么使用api.exampl

我用的是symfony。当我创建的网页也将有一个API,我应该怎么做呢?它们之间的区别在于,API将返回例如JSON字符串作为响应,但若我并没有弄错的话,web页面将返回html/文本响应。那么,我是否应该添加一些条件,如果URL是
api.something.com
,则返回JSON,如果是
something.com
,则返回html/text?或者我应该构建单独的控制器?但除了返回对象之外,它们将是相同的

您可以通过多种方式来实现这一点

1) 如果你的应用程序流量很大,那么使用api.example.com。一个可能有新主机的新域

2) 您可以使用相同的域。比如www.example.com/api/create/foo

在这两种情况下,请确保您有不同的控制器和方法


你很好,可以用多种方法去做

1) 如果你的应用程序流量很大,那么使用api.example.com。一个可能有新主机的新域

2) 您可以使用相同的域。比如www.example.com/api/create/foo

在这两种情况下,请确保您有不同的控制器和方法

您可以开始了。

最佳实践 最好是分离域,这样您就可以使用RESTful最佳实践来构建API,而不会干扰您的www URL。API的安全检查与web请求的安全检查不同,这意味着您还需要构建单独的控制器来正确处理这些检查

对于小型项目 如果您真的想同时使用一个控制器(因为您认为您的projet不需要更高的标准),您可以检查请求中的头,以区分api调用和web请求。例如,您可以对api请求使用标题
accept:application/json

例子: 框架建议 是一个很好的解决方案,使这样的网络架构。它帮助您以简单易用的方式分离域和控制器。它有一些工具可以帮助您快速构建RESTful体系结构。您可以学习如何使用它。

最佳实践 最好是分离域,这样您就可以使用RESTful最佳实践来构建API,而不会干扰您的www URL。API的安全检查与web请求的安全检查不同,这意味着您还需要构建单独的控制器来正确处理这些检查

对于小型项目 如果您真的想同时使用一个控制器(因为您认为您的projet不需要更高的标准),您可以检查请求中的头,以区分api调用和web请求。例如,您可以对api请求使用标题
accept:application/json

例子: 框架建议
是一个很好的解决方案,使这样的网络架构。它帮助您以简单易用的方式分离域和控制器。它有一些工具可以帮助您快速构建RESTful体系结构。您可以学习如何使用它。

但为什么要使用不同的控制器?除了最后一部分,API控制器将返回
json
,web控制器将创建视图或其他内容,它们将是相同的。这是因为代码的可读性。如果新开发人员来到您的项目中,那么代码就很容易理解了。但是为什么要使用不同的控制器呢?除了最后一部分,API控制器将返回
json
,web控制器将创建视图或其他内容,它们将是相同的。这是因为代码的可读性。如果新开发人员来到您的项目中,那么代码就很容易理解了。谢谢,这是一个很好的解释,我想我现在理解得更多了。主要的问题是“什么是最好的?”因为我只创建了一些小页面来学习,当我想做类似的事情时,两种方法(例如,单独的API控制器与一个控制器)都可以工作,但是一种方法比另一种更好,没有经验很难判断哪一种。我很高兴听到这一点。我想说的是,无论项目规模如何,都要遵循良好的实践。这将成为一种习惯,使您的代码易于其他开发人员理解并易于维护。因此,即使这两种方法都有效,更好的方法是允许任何开发人员接管您的项目,而无需向他解释,并允许您为api端(或web端)添加特定代码,而无需中断任何内容或在控制器中添加复杂代码。他说他目前使用Symfony。例如,如果Symfony可以很好地与FOSRestBundle配合使用,那么为什么要在这里引入其他框架呢?正如我所说,这是一个建议,加上Laravel使用了Symphony的某些部分。但如果其他人向我介绍一些我不知道的框架,这些框架可以帮助我完成我正在尝试的工作,我会很高兴。所以我只是在分享知识…谢谢,这是一个很好的解释,我想我现在明白多了。主要的问题是“什么是最好的?”因为我只创建了一些小页面来学习,当我想做类似的事情时,两种方法(例如,单独的API控制器与一个控制器)都可以工作,但是一种方法比另一种更好,没有经验很难判断哪一种。我很高兴听到这一点。我想说的是,无论项目规模如何,都要遵循良好的实践。这将成为一种习惯,使您的代码易于其他开发人员理解并易于维护。因此,即使这两种方法都有效,更好的方法是允许任何开发人员接管您的项目,而无需向他解释,并允许您为api端(或web端)添加特定代码,而无需中断任何内容或在控制器中添加复杂代码。他说他目前使用Symfony。如果Symfony可以在w
function isXmlHttpRequest()
{
    return !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
}
function isApiRequest()
{
    return strtolower($_SERVER['HTTP_ACCEPT']) === 'application/json';
}
if(isApiRequest() || isXmlHttpRequest()){
    return $jsonResponse;
}else{
    return $webPage;
}