我从头开始构建PHP应用程序(使用Kohana3框架)。我要构建它,以便我可以使用API在内部访问数据。同时,我想最终提供给公众。我需要一个API。我应该从哪里开始?
我打算使用RESTful访问方法。但是,我很难找到有关如何正确保护API的明确信息。换句话说,我如何实现API签名和访问?
我从头开始构建PHP应用程序(使用Kohana3框架)。我要构建它,以便我可以使用API在内部访问数据。同时,我想最终提供给公众。我需要一个API。我应该从哪里开始?
我打算使用RESTful访问方法。但是,我很难找到有关如何正确保护API的明确信息。换句话说,我如何实现API签名和访问?
你可以尝试frapi。它将很快允许您构建RESTful API,然后您可以将它用于您的应用程序,并在以后公开公开相同的API。
我认为一个很好的起点是阅读关于数字签名的一般信息。维基百科是一个很好的资源http://en.wikipedia.org/wiki/Public_Key_Infrastructure或http://en.wikipedia.org/wiki/X.509。
在基本水平上,我会给每个客户一个私钥。在客户端库中,我会加密密钥。当客户发出请求时,请确认密钥是您发给该特定客户的密钥。
我一直在使用的CodeIgniter使用基本身份验证,(提供“公司ID”和“API密钥”作为用户名/密码)做了一个PHP REST API。后来我们发现有必要配置与API密钥直接相关的会话密钥,只需要一个到期时间。
基本上,我们在我们的数据存储(NoSQL的各种查询不同类型的数据:)这取决于什么“法”在URL中提供。我们通过使用CodeIgniter提供的“段”功能来访问它。
然后我们包裹被退回,一个“json_encode”每个响应,我们也可用于安全的HTTPS连接。
对于客户端类,我们将所有内容都包装在$ client-> get_my_data($ api_key)等调用中,下面的图层使用PHP Libcurl,它非常适合提供基本身份验证。
希望这有助于
CURL_GET
private function curl_get($url, $apikey, $co)
{
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl_handle, CURLOPT_USERPWD, $co.":".$apikey);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_DNS_USE_GLOBAL_CACHE, FALSE);
$buffer = curl_exec($curl_handle);
$error = curl_error($curl_handle);
curl_close($curl_handle);
// check for success or failure
if (empty($buffer)) {
//echo 'Something went wrong :(error: '.$error.'<Br>';
} else {
return $buffer;
}
}
按客户类别,您的意思是客户使用RESTful URL进行交谈的主界面?像客户端[控制器],get_name [方法]与URL,如:site.com/api/client/123?apikey=12345其中触发$ client-> get_name('123',apikey)? – Andres
多数民众赞成在多数民众赞成在正确的,所以然后客户端可以包括类,并有权访问它在一个PHP文件,我会更新我的答案与CURL示例“获取”功能。 –
你提的问题比这大一点;但我可以提供一个关于REST的小小观察。
我与REST发现,那就是它最好使用人工键底层的数据模型,而不是自然键。
例如,考虑问题的REST网址:https://server/yourApp/viewUser/1234.html
这将显示ID为1234的用户。然而,如果你使用的自然键,你可能有一个URL像这样https://server/yourApp/viewUser/Bob.html
或者如果不是鲍勃其“鲍勃X”,甚至更糟“鲍勃?键=值”。您不必考虑生成无效的URL。
OAuth将是一个不错的选择。单个键/值对也是如此。你可能也想看看Mashape,但并不完全确定它适合你想要做的事情。
看看3比例(http://www.3scale.net/)来做到这一点 - 它处理认证,访问控制,策略,速率限制等,并且是免费的,显著的流量。我们有一个PHP模块插件到系统来启用这些功能。 (免责声明 - 我在那里工作 - 但希望它有用!)
Wrap frapi看起来很漂亮,虽然他们的网站比看起来更加斯巴达一旦你开始点击。 – Justin