为网页构建API的正确方法

时间:2017-01-16 22:10:44

标签: php api symfony

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

2 个答案:

答案 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