muffin / webservice
Simplistic webservices for CakePHP
Installs: 158 389
Dependents: 16
Suggesters: 0
Security: 0
Stars: 89
Watchers: 11
Forks: 43
Type:cakephp-plugin
Requires
- cakephp/orm: ^4.2
Requires (Dev)
- cakephp/cakephp: ^4.2
- cakephp/cakephp-codesniffer: ^4.0
- phpunit/phpunit: ^8.5 || ^9.3
README
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
Usage
Datasource Configuration
In your app.php
, add a new webservice
config under Datasources
:
'Datasources' => [ // Other db config here 'webservice' => [ 'className' => \Muffin\Webservice\Datasource\Connection::class, 'service' => 'Articles', // Any additional keys will be set as Driver's config. ], ],
If you are making a plugin then conventionally the datasource config key name should be underscored version of plugin name.
As an ORM
Create driver
<?php namespace App\Webservice\Driver; use Cake\Http\Client; use Muffin\Webservice\Driver\AbstractDriver; class Articles extends AbstractDriver { /** * Initialize is used to easily extend the constructor. */ public function initialize(): void { $this->setClient(new Client([ 'host' => 'example.com' ])); } }
Create a webservice
<?php namespace App\Webservice; use Muffin\Webservice\Datasource\Query; use Muffin\Webservice\Datasource\ResultSet; use Muffin\Webservice\Webservice\Webservice; class ArticlesWebservice extends Webservice { /** * Executes a query with the read action using the Cake HTTP Client */ protected function _executeReadQuery(Query $query, array $options = []) { $response = $this->getDriver()->getClient()->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 Muffin\Webservice\Model\EndpointLocator; class ArticlesController extends AppController { // Either set the default model type to "Endpoint" or explicitly specify // model type in loadModel() call as shown below. protected $_modelType = 'Endpoint'; public function index() { // This is required only if you haven't set `$_modelType` property to // "Endpoint" as shown above. $this->loadModel('Articles', 'Endpoint'); $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:
- GitHub plugin - Provides access to the GitHub REST APIs.
- Pusher plugin - Provides access to the Pusher APIs.
- TMDB plugin - Provides access to the TMDB APIs.
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-Present, [Use Muffin] and licensed under The MIT License.