2011-02-18 94 views
6

我从头开始构建PHP应用程序(使用Kohana3框架)。我要构建它,以便我可以使用API​​在内部访问数据。同时,我想最终提供给公众。我需要一个API。我应该从哪里开始?

我打算使用RESTful访问方法。但是,我很难找到有关如何正确保护API的明确信息。换句话说,我如何实现API签名和访问?

回答

5

你可以尝试frapi。它将很快允许您构建RESTful API,然后您可以将它用于您的应用程序,并在以后公开公开相同的API。

+0

Wrap frapi看起来很漂亮,虽然他们的网站比看起来更加斯巴达一旦你开始点击。 – Justin

1

我认为一个很好的起点是阅读关于数字签名的一般信息。维基百科是一个很好的资源http://en.wikipedia.org/wiki/Public_Key_Infrastructurehttp://en.wikipedia.org/wiki/X.509
在基本水平上,我会给每个客户一个私钥。在客户端库中,我会加密密钥。当客户发出请求时,请确认密钥是您发给该特定客户的密钥。

+1

另一个看它的链接是http://www.oauth.net/ – NotMe

+1

是的。这正是我想要了解的。 Oauth对如何在我自己的应用程序中作为提供者实现的方法感到困惑。我宁愿自己做,学习,然后考虑使用他们不断变化的图书馆。我在基础知识上遇到了麻烦。你解释了一些与我所设想的相似的东西。虽然会话和Cookie也会在请求登录时发挥作用。使用委托登录也是另外一个问题。 – Andres

0

我一直在使用的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; 
     } 
    } 
+0

按客户类别,您的意思是客户使用RESTful URL进行交谈的主界面?像客户端[控制器],get_name [方法]与URL,如:site.com/api/client/123?apikey=12345其中触发$ client-> get_name('123',apikey)? – Andres

+0

多数民众赞成在多数民众赞成在正确的,所以然后客户端可以包括类,并有权访问它在一个PHP文件,我会更新我的答案与CURL示例“获取”功能。 –

0

你提的问题比这大一点;但我可以提供一个关于REST的小小观察。

我与REST发现,那就是它最好使用人工键底层的数据模型,而不是自然键。

例如,考虑问题的REST网址:https://server/yourApp/viewUser/1234.html这将显示ID为1234的用户。然而,如果你使用的自然键,你可能有一个URL像这样https://server/yourApp/viewUser/Bob.html或者如果不是鲍勃其“鲍勃X”,甚至更糟“鲍勃?键=值”。您不必考虑生成无效的URL。

+0

谢谢,但不是我正在寻找的答案。我正在寻找认证密钥......有点。 – Andres

+0

我不明白那部分frapi(我没有看到他们在哪里定义了什么“API密钥”,我根据主题和授权进行了访问控制,可以使用HTTP BASIC/SSL或SSL相互授权以建立主题ID,以及任何您想要授权的内容。 – Justin

2

OAuth将是一个不错的选择。单个键/值对也是如此。你可能也想看看Mashape,但并不完全确定它适合你想要做的事情。

1

看看3比例(http://www.3scale.net/)来做到这一点 - 它处理认证,访问控制,策略,速率限制等,并且是免费的,显著的流量。我们有一个PHP模块插件到系统来启用这些功能。 (免责声明 - 我在那里工作 - 但希望它有用!)

相关问题