Plugin with HttpSource to provide base class for datasorses with Http protocol. Based on ProLoser implementation. I make some refactoring to make HttpSource more similar to DboSource and removed OAuth component, because i think for login better use Opauth.
For existing plugins check ProLoser readme. But they will not work with HttpSource. I will adapt these plugins later.
HttpSource
is an abstract class and must be extended by the Api you wish to support.
Open a bug ticket if you'd like some help making your own or just want me to do it.
It's very easy to add new ones - check out the list
cd my_cake_app/app
git clone git://github.com/imsamurai/cakephp-httpsource-datasource.git Plugin/HttpSource
or if you use git add as submodule:
cd my_cake_app
git submodule add "git://github.com/imsamurai/cakephp-httpsource-datasource.git" "app/Plugin/HttpSource"
then update submodules:
git submodule init
git submodule update
:: database.php ::
var $myapi = array(
'datasource' => 'MyPlugin.Http/MyPlugin', // Example: 'Github.Http/Github'
'host' => 'api.myplugin.com/v1',
'port' => 80,
'persistent' => false,
'auth' => array(
'name' => 'oauth',
'version' => '1.0', //version 2 not tested, maybe don't work
'oauth_consumer_key' => '--Your API Key--',
'oauth_consumer_secret' => '--Your API Secret--'
),
//all other parameters that passed to config of http socket
//...
);
:: MyModel.php ::
public $useDbConfig = 'myapi';
public $useTable = 'myapi_table';
:: bootstrap.php ::
CakePlugin::load('HttpSource', array('bootstrap' => true, 'routes' => true));
CakePlugin::load('MyPlugin');
Best to just give an example. I switch the datasource on the fly because the model is actually a projects
table in the
DB. I tend to query from my API and then switch to default and save the results.
App::uses('HttpSourceModel', 'HttpSource.Model');
class Project extends HttpSourceModel {
function findAuthedUserRepos() {
$this->setDataSource('github');
$projects = $this->find('all', array(
//used as repo name if useTable is empty, otherwise used as standart fields parameter
'fields' => 'repos'
));
$this->setDataSource('default'); // if more queries are done later
return $projects;
}
}
See wiki.