Programmer Notes

rest api menggunakan yii 2.0

Create API module

Buat direktori baru dengan nama “modules” pada root app. Kemudian gunakan GII untuk membuat module baru pada aplikasi.

Langkah selanjutnya, yaitu menambahkan baris perintah berikut pada config/web.php

web.php
1
2
3
4
5
6
7
...
'modules' => [
'api' => [
'class' => 'app\modules\api\Api',
],
],
...

Create model API

Pada contoh ini, kita membuat model baru menggunakan tabel dengan nama “summary”. Struktur tabel dapat dilihat pada blok kode berikut:

1
2
3
4
5
CREATE TABLE "public"."summary" (
"id" int2 NOT NULL DEFAULT nextval('summary_id_seq'::regclass),
"name" varchar(255) COLLATE "pg_catalog"."default",
"total" int8
)

Gunakan struktur tabel di atas, kemudian generate model menggunakan GII.

Selanjutnya tambahkan baris perintah berikut pada model yang telah digenerate.

Summary.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class Summary extends \yii\db\ActiveRecord
{
...
const SCENARIO_CREATE = 'create';

public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['create'] = ['name', 'total'];
return $scenarios;
}
...
}

create controller API

Selanjutnya buatlah sebuah controller menggunakan GII.

Tambahkan baris perintah berikut pada controller yang telah digenerate.

SummaryController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
namespace app\modules\api\controllers;
use app\modules\api\models\Summary;

class SummaryController extends \yii\web\Controller
{
...
public $enableCsrfValidation = false;

public function actionCreateSummary()
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$summary = new Summary();
$summary->scenario = Summary::SCENARIO_CREATE;
$summary->attributes = \Yii::$app->request->post();
// return array('status' => true);

if($summary->validate()){
$summary->save();
return array('status' => true, 'data' => 'Summary created successfully.');
}else{
return array('status' => false, 'data' => $summary->getErrors());
}
}

public function actionListSummary()
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$summary = Summary::find()->all();
if(count($summary) > 0){
return array('status' => true, 'data' => $summary);
}else{
return array('status' => false, 'data' => 'No data summary.');
}
}
...
}

Uji coba

Anda dapat menggunakan postman untuk menguji coba.

Ujicoba POST data dapat menggunakan url berikut: http://localhost/sdpdashboard/web/index.php/api/summary/create-summary?name=smartcity&total=150

Untuk ujicoba GET data dapat menggunakan url berikut:
http://localhost/sdpdashboard/web/index.php/api/summary/list-summary