Yii2: Flexible way to create Restful Web Service on Yii 2


Untuk membuat aplikasi CRUD di Yii caranya cukup mudah karena terbantu dengan adanya tools Gii atau kode generator, so tinggal klik jadi, magic :). Lalu bagaimana dengan web service? Yii memang tidak menyediakan Gii-nya, namun Yii telah membuatkan sebuah class (yii\rest\ActiveController) yang hanya dengan sedikit konfigurasi maka jadilah web service.

Ini kode controllernya yang merupakan bagian utamanya..

<?php
namespace app\controllers;
use yii\rest\ActiveController;
class RestController extends ActiveController
{
    public $modelClass = 'app\models\Employee';
}

Maka semua fungsi CRUD web service jadi. Mana ada framework yang seperti ini?

Namun banyak orang yang gak suka dengan ini, its too magic, mereka menginginkan sesuatu yang manual, simple dan sesuai kebutuhan. Yii hanyalah sebuah tools untuk memudahkan dev membuat app, namun kemudahan itu disisi lain bisa menyebabkan penggunanya merasa di dikte :).. Oke lupakan itu..

Kita bisa membuat web service melalui pendekatan yang lain yaitu dengan menggunakan parent dari class ActiveController, class itu adalah \yii\rest\Controller, class ini akan membuat kita lebih flexible dalam membuat web service dibandingkan class ActiveController namun tetep “magic” nya juga dapet..

Ini contohnya:

<?php
namespace app\controllers;
use Yii;
class TestController extends \yii\rest\Controller
{
    protected function verbs()
  	{
  	   return [
  	       'insert' => ['POST'],
  	   ];
  	}

    public function actionInsert(){
        $exec = Yii::$app->db->createCommand()
        ->insert('guestbook', [
       	    'name' => $_POST['name'],
       	    'message' => $_POST['message'],
      	])->execute();
        $msg = ($exec)?"SUKSES":"ERROR KAKA";
        return ['data'=>$msg];
    }
}

Testing, saya test menggunakan tools HttpMaster (anda bisa gunakan tools lain macam POSTMAN di Chrome)

flex-web-service-yii

Pada contoh diatas sengaja saya tidak menggunakan models, melalui fungsi verbs saya definisikan http methodnya untuk fungsi insert (actionInsert) yaitu POST, kemudian pada fungsi insert pun kodenya juga normal layaknya kita membuat aplikasi biasa.. Dimana saya menggunakan Query Builder biasa, kemudian outputnya pun sederhana yaitu berupa array.

Nah kita juga bisa, menggunakan models, misal untuk kasus view data, kira2 kodenya sesimple ini

public function actionView($id){
    $model = \app\models\Guestbook::findOne($id);
    return ['data'=>$model];
}

Gimana mudah dan flexible bukan?

“Lho lalu outputnya gimana? saya kan pengennya JSON atau XML? bukan array kek gitu?” Jawabannya adalah: by default Yii udah mengconvert outputnya ke JSON & XML jadi kita gak usah pikirin lagi. termasuk juga headernya dsb.

Saya cuman ngasih contoh.. bahwa Yii sangat flexible dan lebih dari cukup untuk memenuhi kebutuhan aplikasi web yang ingin kamu bangun. Sebenarnya ada cara lain lagi yang lebih flexible.. tapi saya lagi gak minat mengshare cara tersebut :)

3 Comments
  1. Linda
    • Hafid Mukhlasin
  2. Linda

Leave a Reply

Your email address will not be published. Required fields are marked *