我正在使用symfony。当我创建一个也有API的网页时,我该怎么办呢?它们之间的区别在于API将返回例如JSON字符串作为响应,但如果我没有弄错,网页将返回html /文本响应。那么我应该添加一些条件,如果URL将是api.something.com
然后返回JSON,如果它将是something.com
然后返回html /文本?或者我应该建立单独的控制器?但除了返回对象外,它们是相同的。
答案 0 :(得分:2)
您可以通过多种方式执行此操作。
1)如果您的应用程序流量很大,那么请使用api.example.com。一个可能是新托管的新域名。
2)您可以使用相同的域名。例如www.example.com/api/create/foo。
在这两种情况下,请确保您有不同的控制器和方法。
你很高兴..
答案 1 :(得分:1)
最好将域分开,这样您就可以使用RESTful最佳实践来构建API,而不会干扰您的www网址。 API的安全检查与Web请求的安全检查不同,这意味着您需要构建单独的控制器以正确处理这些检查。
如果您确实想要使用一个控制器(因为您认为您的projet不需要具有更高的标准),您可以在请求中检查标头以区分api呼叫和Web请求。例如,您可以使用标头accept: application/json
作为api请求。
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;
}
Laravel framework是制作此类网络架构的好方法。它可以帮助您以简单方便的方式分离域和控制器。它有工具可以帮助您立即构建RESTful架构。您可以了解如何使用它here。