Provides base class for datasorses with Http protocol

Installs: 1 457

Dependents: 4

Stars: 2

Watchers: 3

Forks: 22

Open Issues: 6

Type: cakephp-plugin

1.2.11 2015-06-02 11:21 UTC


Build Status Coverage Status Latest Stable Version Total Downloads Latest Unstable Version License

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


Step 1: Clone or download to Plugin/HttpSource

cd my_cake_app/app
git clone git:// Plugin/HttpSource

or if you use git add as submodule:

cd my_cake_app
git submodule add "git://" "app/Plugin/HttpSource"

then update submodules:

git submodule init
git submodule update

Step 2: Add your configuration to database.php and set it to the model

:: database.php ::
var $myapi = array(
    'datasource' => 'MyPlugin.Http/MyPlugin', // Example: 'Github.Http/Github'
        'host' => '',
        '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';

Step 3: Load main plugin and your plugin

:: bootstrap.php ::
CakePlugin::load('HttpSource', array('bootstrap' => true, 'routes' => true));

Step 4: Querying the API

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() {
        $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.