Bringing the power of the CakePHP ORM to your favourite webservices
PHP
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config
src
tests
.editorconfig
.gitattributes
.gitignore
.semver
.travis.yml
LICENSE
README.md
VERSION
composer.json
phpunit.xml.dist

README.md

Webservice

Build Status Coverage Total Downloads License

Bringing the power of the CakePHP ORM to your favourite webservices.

Install

Using Composer:

composer require muffin/webservice

You then need to load the plugin. You can use the shell command:

bin/cake plugin load Muffin/Webservice

or by manually adding statement shown below to boostrap.php:

Plugin::load('Muffin/Webservice', ['bootstrap' => true]);

Usage

As an ORM

Create driver

<?php

namespace App\Webservice\Driver;

use Cake\Network\Http\Client;
use Muffin\Webservice\AbstractDriver;

class Articles extends AbstractDriver
{

    /**
     * {@inheritDoc}
     */
    public function initialize()
    {
        $this->client(new Client([
            'host' => 'example.com'
        ]));
    }
}

Create a webservice

<?php

namespace App\Webservice;

use Cake\Network\Http\Client;
use Muffin\Webservice\Query;
use Muffin\Webservice\ResultSet;
use Muffin\Webservice\Webservice\Webservice;

class ArticlesWebservice extends Webservice
{

    /**
     * {@inheritDoc}
     */
    protected function _executeReadQuery(Query $query, array $options = [])
    {
        $response = $this->driver()->client()->get('/articles.json');

        if (!$response->isOk()) {
            return false;
        }

        $resources = $this->_transformResults($query->endpoint(), $response->json['articles']);

        return new ResultSet($resources, count($resources));
    }
}

Create an endpoint (optional)

<?php

namespace App\Model\Endpoint;

use Muffin\Webservice\Model\Endpoint;

class ArticlesEndpoint extends Endpoint
{

}

Create a resource (optional)

<?php

namespace App\Model\Resource;

use Muffin\Webservice\Model\Resource;

class Article extends Resource
{

}

Use it

<?php

namespace App\Controller;

use Cake\Event\Event;

class ArticlesController extends AppController
{
    public function initialize()
    {
        // You can also put this in AppController::initialize() itself
        $this->modelFactory('Endpoint', ['Muffin\Webservice\Model\EndpointRegistry', 'get']);
    }

    public function beforeFilter(Event $event)
    {
        $this->loadModel('Articles', 'Endpoint');
    }

    public function index()
    {
        $articles = $this->Articles->find();
    }

}

As base for a driver

You can also use this plugin as a base to a separate plugin or to manage custom webservice drivers connections.

Until official documentation is written, David Yell wrote a good post to get you started.

Implementations of webservices

As an ORM

The following plugins use the Webservice ORM to give you easy access to all kinds of webservices:

  • GitHub plugin - Provides access to the GitHub REST APIs.
  • NS plugin - Provides access to the NS (Nederlandse Spoorwegen) APIs.
  • Stagemarkt plugin - Provides access to the SBB Stagemarkt REST APIs.
  • Twitter plugin - Provides access to the Twitter REST and streaming APIs.

As a driver

The following plugins implement a Webservice driver with their own methods:

Patches & Features

  • Fork
  • Mod, fix
  • Test - this is important, so it's not unintentionally broken
  • Commit - do not mess with license, todo, version, etc. (if you do change any, bump them into commits of their own that I can ignore when I pull)
  • Pull request - bonus point for topic branches

To ensure your PRs are considered for upstream, you MUST follow the CakePHP coding standards.

Bugs & Feedback

http://github.com/usemuffin/webservice/issues

License

Copyright (c) 2015, [Use Muffin] and licensed under The MIT License.