Skip to content

Latest commit

 

History

History
143 lines (116 loc) · 5.01 KB

README.md

File metadata and controls

143 lines (116 loc) · 5.01 KB

REST Client for Yii 2 (ActiveRecord-like model)

This extension provides an interface to work with RESTful API via ActiveRecord-like model in Yii 2. It is based on ApexWire's yii2-restclient.

Latest Stable Version Total Downloads License Build Status

Resources

Installation

The preferred way to install this extension is through composer.

Either run

$ php composer.phar require --prefer-dist simialbi/yii2-rest-client

or add

"simialbi/yii2-rest-client": "*"

to the require section of your composer.json.

Configuration

To use this extension, configure restclient component in your application config:

    'components' => [
        'rest' => [
            'class'   => 'simialbi\yii2\rest\Connection',
            'baseUrl' => 'https://api.site.com/',
            // 'auth' => function (simialbi\yii2\rest\Connection $db) {
            //      return 'Bearer: <mytoken>';
            // },
            // 'auth' => 'Bearer: <mytoken>',
            // 'usePluralisation' => false,
            // 'useFilterKeyword' => false,
            // 'enableExceptions' => true,
        ],
    ],
Parameter Description
baseUrl The location of the api. E.g. for http://api.site.com/v1/users the baseUrl would be http://api.site.com/v1/
auth Either a Closure which returns a string or a string. The rest connection will be passed as parameter.
usePluralisation Whether to use plural version for lists (index action) or not (e.g. http://api.site.com/users instead of user)
useFilterKeyword Whether to use "filter" key word in url parameters when filtering (e.g. ?filter[name]=user instead of ?name=user
enableExceptions Whether the connection should throw an exception if response is not 200 or not

Usage

Define your Model

<?php

namespace app\models;

use simialbi\yii2\rest\ActiveRecord;

/**
 * MyModel
 * 
 * @property integer $id
 * @property string $name
 * @property string $description 
 * 
 * @property-read MyOtherModel $myOtherModel
 */
class MyModel extends ActiveRecord {
    /**
     * {@inheritdoc}
     */
    public static function modelName() {
        return 'my-super-model-name';
    }

    /**
     * {@inheritdoc}
     */
    public static function primaryKey() {
        return ['id'];
    }
	
    /**
     * @return mixed
     */
    public function getMyOtherModel(){
        return $this->hasOne(MyOtherModel::class, ['my_model_id' => 'id']);
    }
}

/**
 * Class MyOtherModel
 * 
 * @property integer $id
 * @property integer $my_model_id
 * @property string $subject
 * 
 * @property-read MyModel[] $myModels
 */
class MyOtherModel extends ActiveRecord {
    /**
     * {@inheritdoc}
     */
    public static function primaryKey() {
        return ['id'];
    }
	
    /**
     * @return mixed
     */
    public function getMyModels(){
        return $this->hasMany(MyModel::class, ['id' => 'my_model_id']);
    }
}

It's important that you define the primary key by overriding primaryKey() method. Otherwise you'll get an exception. If you do not override the modelName() method, it will guess it by class name (MyModel becomes my-model). It's used to generate the URL together with simialbi\yii2\rest\Connection::$baseUrl.

The usage how to define the active record (rules, behaviors etc.) is the same like yii\db\ActiveRecord.

Important: Be sure to either define the properties of the object like in the example above (@property syntax in phpdoc) or override the attributes() method to return the allowed attributes as array

License

yii2-rest-client is released under MIT license. See bundled LICENSE for details.

Acknowledgments