Membuat REST API dengan Lumen #part 1

  bcscoder
27 Jul 2017 at 7:07 pm

Halo teman ngide! Kali ini kita akan membuat series tutorial bagaimana cara membuat REST API menggunakan Lumen. Untuk yang belum tahu apa itu REST API, kamu bisa membaca artikel sebelumnya tentang kenalan dengan REST API di sini. Di akhir tutorial ini, kalian diharapkan akan mampu membuat sebuah REST API yang bisa nanti di implementasikan ke project yang sebenarnya.

Oke langsung saja ikuti tutorial ini.

Apa itu Lumen?

Lumen adalah sebuah micro framework yang di kembangkan oleh tim Laravel yang memang dikhususkan untuk membuat sebuah REST API. Jadi dari segi performanya tidak usah di ragukan lagi. 

Lightning fast micro-services and APIs delivered with the elegance you expect. ~ lumen.laravel.com

Ada beberapa alasan kenapa memilih Lumen dibandingkan micro framework lainnya:

  • Lumen itu cepat.
  • Mampu menghadle lebih banyak request/second dibandingkan bapaknya yaitu Laravel dan micro framework lainnya.
  • Menggunakan nikic/FastRoute untuk routing
  • Ada command Artisan untuk mempercepat proses development
  • Im big fans of laravel stuff (LOL)

Install Lumen

Untuk cara install lumen yang lebih lengkap kamu bisa mengunjungi dokumentasi di website lumen.

Buka terminal kesayangan kamu, dan pergi ke root folder project misalnya di folder htdocs dan jalankan perintah di bawah ini:

composer create-project --prefer-dist laravel/lumen  online-store

Tunggu sampai proses install selesai, maka kamu akan mendapati sebuah folder baru dengan nama online-store di root project kamu. Masuk ke folder itu lewat terminal dan jalankan command php artisan untuk mengecek apakah lumen sudah terinstall dengan baik.

Buat database dan edit config file

Selanjutnya kita akan membuat sebuah database dengan nama online-store

Edit file.env dan ganti bagian yang di bawah ini sesuaikan dengan pengaturan user database di komputer kamu ya.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=online-store
DB_USERNAME=root
DB_PASSWORD=root

[Opsional] Sebaiknya kita membuat sebuah key dulu agar aplikasi kita lebih secure ya. Caranya kamu bisa generate random string dengan fungsi str_random(32); dan copy ke bagian key di dalam .env.

Buat Migration

Kemudian kita akan membuat 2 buah migration untuk beberapa table yang akan ada di dalam aplikasi online-store ini. Caranya jalankan perintah di bawah ini:

php artisan make:migration Products

php artisan make:migration Categories

Kamu bisa buka folder database/migrations dan edit masing-masing file migration tersebut. Tambahkan code di bagian function up()  seperti di bawah ini:

 

//ProductTable migration

Schema::create('products',function(Blueprint $table){

            $table->increments('id');
            $table->string('name');
            $table->integer('category_id');
            $table->string('slug');
            $table->integer('price');
            $table->integer('weight');
            $table->text('description');
            $table->timestamps();

        });
//CategortTable migration


Schema::create('categories',function(Blueprint $table){

            $table->increments('id');
            $table->string('name');
        
        });

Sekarang jalankan perintah artisan:migrate untuk membuat table diatas di database yang sudah kita buat.

Buat Model dan Controller

Buat 2 buah file model di dalam folder app dengan nama Product.php dan Category.php dan isi masing-masing dengan code di bawah ini:

Product.php

<?php namespace App;

use IlluminateDatabaseEloquentModel;

class Product extends Model {

    protected $fillable = ['name','category_id','slug','price','weight','description'];

    protected $dates = [];

    public static $rules = [
        'name' => 'required',
        'category_id' => 'required',
        'slug' => 'required',
        'price' => 'required',
        'weight' => 'required',
        'description' => 'required',
    ];

}

Category.php

<?php namespace App;

use IlluminateDatabaseEloquentModel;

class Category extends Model {

    protected $fillable = ['name'];

    public $timestamps = false;

    public static $rules = [
        'name' => 'required'
    ];

}

Selanjutnya buat 2 buah file controller di dalam folder app/Http/Controllers yaitu ProductController.php dan CategoryController.php

ProductController.php

<?php namespace AppHttpControllers;

use AppProduct;
use IlluminateHttpRequest;

class ProductController extends Controller  {

    public function index()
    {
        $products = Product::all();
        return response()->json($products);
    }

    public function store(Request $request)
    {
        Product::create($request->all());
        return response()->json([
            'message' => 'Successfull create new product'
        ]);
    }

    public function show($id)
    {
        $product = Product::find($id);
        return response()->json($product);
    }

    public function update(Request $request, $id)
    {
        $product = Product::find($id);
        $product->update($request->all());

        return response()->json([
            'message' => 'Successfull update product'
        ]);
    }

    public function delete($id)
    {
        Product::destroy($id);

        return response()->json([
            'message' => 'Successfull delete product'
        ]);
    }


}

CategoryController.php

<?php namespace AppHttpControllers;

use AppCategory;
use IlluminateHttpRequest;

class CategoryController extends Controller
{
    public function index()
    {
        $categories = Category::all();
        return response()->json($categories);
    }

    public function store(Request $request)
    {
        Category::create($request->all());
        return response()->json([
           'message' => 'Successfull create new category'
        ]);
    }

    public function show($id)
    {
        $category = Category::find($id);
        return response()->json($category);
    }

    public function update(Request $request, $id)
    {
        $category = Category::find($id);
        $category->update($request->all());

        return response()->json([
            'message' => 'Successfull update category'
        ]);
    }

    public function delete($id)
    {
        Category::destroy($id);

        return response()->json([
            'message' => 'Successfull delete category'
        ]);
    }

}

Sebelum bisa menggunakan model di atas, kita harus mengaktifkan fungsi Eloquent dari lumen. Caranya buka file

bootstrap/app.php dan hapus comment (tanda #) di depan $app->withEloquent();

Dari masing-masing file controller di atas, kita memiliki fungsi index, store,show, update dan delete yang nanti akan berfungsi untuk menghadle CRUD dari masing-masing object Product dan Category

Membuat API Routes

Kita akan membuat routing untuk menghadle CRUD dengan prefix api. Buka file web.php di dalam folder routes lalu tambahkan code di bawah ini:

$app->group(['prefix' => 'api'], function () use ($app) {
    //product route
    $app->get('products', 'ProductController@index');
    $app->get('products/{id}', 'ProductController@show');
    $app->post('products', 'ProductController@store');
    $app->put('products/{id}', 'ProductController@update');
    $app->delete('products/{id}', 'ProductController@delete');

    $app->get('categories', 'CategoryController@index');
    $app->get('categories/{id}', 'CategoryController@show');
    $app->post('categories', 'CategoryController@store');
    $app->put('categories/{id}', 'CategoryController@update');
    $app->delete('categories/{id}', 'CategoryController@delete');

});

Testing REST API

Untuk testing api yang sudah kita buat, kamu bisa menggunakan Postman. Jalankan PHP server untuk api yang sudah kita buat di localhost dengan menjalankan perintah di bawah ini:

php -S localhost:8000 -t public

Sekarang mengakses REST API di alamat localhost:8000

Test CRUD untuk produk

Buat produk baru. Kamu bisa menambah produk baru dengan mengakses /api/products dengan method POST. Lengkapi juga data body yang dibutuhkan. Jika berhasil maka akan mendapatkan response seperti dibawah ini.

Kita test juga validasi dengan menghapus beberapa field dari request body

List semua produk

Untuk mengakses semua produk yang sudah dibuat, kita bisa mengaksesnya lewat /api/products dengan method GET seperti di bawah ini.

Tampilkan satu produk

Untuk menampilkan satu data, kamu bisa mengakses /api/products/{id}, dimana id adalah id dari produk yang akan kita cari.

Edit produk

Untuk mengedit produk, kamu bisa mengakses /api/products/{id}, dengan body request yang akan kita edit. Kamu bisa lihat contoh di bawah ini:

Delete produk

Untuk menghapus satu produk, kamu bisa mengakses /api/products/{id} dengan method DELETE.

Kamu bisa melakukan test untuk kategori dengan cara yang sama seperti di atas.

Kesimpulan

Jadi dalam tutorial ini kita sudah berhasil membuat sebuah simple REST API dengan menggunakan Lumen. Kita sudah belajar membuat model dan controller dan juga membuat routing untuk proses CRUD. Kita juga berhasil melakukan testing api yang kita buat menggunakan Postman.

Ditutorial selanjutnya kita akan menambahkan bagaimana cara implementasi authetikasi sehingga api kita hanya bisa diakses oleh user tertentu saja.


Share Yuk:

Rekomendasi untuk di baca!


Tutorial responsive web design part 1 : CSS3 Media Inquries

02 Sep 2014

Like our facebook page


Around Web