tutorial laravel

Tutorial Laravel, Membuat Aplikasi Web Service

Tutorial laravel kali ini adalah kelanjutan dari tutorial sebelumnya yang mana kita sudah mencoba untuk menggunakan passport sebagai otentikasi user (https://soft-gain.com/2020/06/12/tutorial-laravel-rest-api-menggunakan-otentikasi-passport/), dimana kali ini kita akan mencoba membuat web service untuk aplikasi inventory yang sedang kita coba kembangkan. Langsung saja kita masuk ke dalam pembahasan pada artikel tutorial laravel, membuat aplikasi web service.

Pertama-tama kita akan membuat controller baru khusus untuk web service yang akan kita buat ini, controller yang akan kita buat adalah sg_transaksi, sg_barang dan sg_user, controller ini akan kita taruh di dalam folder baru bernama Api. Dan untuk testing tools nya kita akan gunakan postman, kalau belum ada silahkan di install terlebih dahulu postman-nya. Lalu silahkan ketik perintah berikut ini untuk meng-generate controller :

php artisan make:controller Api/sg_transaksi
php artisan make:controller Api/sg_barang
php artisan make:controller Api/sg_user

Isi dari sg_transaksi controller kurang lebih seperti ini :

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\sg_transaksi as model;
use App\sg_barang;
use Auth;

class sg_transaksi extends Controller
{
    public function index(){
    	$data = model::with('getNamaBarang','getCreatedBy','getUpdatedBy')->orderBy('id','desc')->get();
    	$success['data'] =  $data;
        
        return response()->json(['success' => $success], 200);
    }

    public function store(Request $request){
    	$validatedData = $request->validate([
	        'id_barang' => 'required|max:255',
	        'jenis_transaksi' => 'required',
	        'jumlah_barang' => 'required',
	    ]);

	    $request['created_by'] = Auth::user()->id;

    	model::create($request->all());

    	$this->trx = new \App\Http\Controllers\sg_transaksi;
    	$this->trx->updateSgBarang($request);

    	return response()->json(['success' => true], 200);
    }

    public function edit($id){
    	$data = model::find($id);
    	$success['data'] =  $data;
        
        return response()->json(['success' => $success], 200);
    }

    public function update(Request $request, $id){
    	$validatedData = $request->validate([
	        'id_barang' => 'required|max:255',
	        'jenis_transaksi' => 'required',
	        'jumlah_barang' => 'required',
	    ]);

	    $request['updated_by'] = Auth::user()->id;

	    $this->trx = new \App\Http\Controllers\sg_transaksi;
    	$this->trx->updateSgBarang($request, $id);

    	$data = $request->except('_method', '_token');
    	model::where('id',$id)->update($data);

    	return response()->json(['success' => true], 200);
    }

    public function delete($id){
    	$value = model::where('id',$id);
    	$sg_barang = sg_barang::where('id',$value->value('id_barang'));

        if( $value->first()->jenis_transaksi == 'Masuk' ){
            $sg_barang->update(["jumlah_barang"=>(int) $sg_barang->value('jumlah_barang') - (int) $value->first()->jumlah_barang]);
        }elseif( $value->first()->jenis_transaksi == 'Keluar' ){
            $sg_barang->update(["jumlah_barang"=>(int) $sg_barang->value('jumlah_barang') + (int) $value->first()->jumlah_barang]);
        }
    	model::destroy($id);
        
        return response()->json(['success' => true], 200);
    }
}

Untuk sg_barang controller seperti ini :

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\sg_barang as model;
use Auth;

class sg_barang extends Controller
{
    public function index(){
    	$data = model::with('getUpdatedBy')->get();
    	$success['data'] =  $data;
        
        return response()->json(['success' => $success], 200);
    }

    public function store(Request $request){
    	$validatedData = $request->validate([
	        'nama_barang' => 'required|max:255',
	        'jumlah_barang' => 'required',
	    ]);

	    $request['updated_by'] = Auth::user()->id;

    	model::create($request->all());

    	return response()->json(['success' => true], 200);
    }

    public function edit($id){
    	$data = model::find($id);
    	$success['data'] =  $data;
        
        return response()->json(['success' => $success], 200);
    }

    public function update(Request $request, $id){
    	$validatedData = $request->validate([
	        'nama_barang' => 'required|max:255',
	        'jumlah_barang' => 'required',
	    ]);

	    $request['updated_by'] = Auth::user()->id;

    	$data = $request->except('_method', '_token');
    	model::where('id',$id)->update($data);

    	return response()->json(['success' => true], 200);
    }

    public function delete($id){
    	model::destroy($id);
        
        return response()->json(['success' => true], 200);
    }
}

Untuk sg_user controller seperti ini :

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use App\User as model;
use Auth;

class sg_user extends Controller
{
    public function index(){
    	$data = model::all();
    	$success['data'] =  $data;
        
        return response()->json(['success' => $success], 200);
    }

    public function store(Request $request){
    	$validatedData = $request->validate([
	        'name' => 'required|max:255',
	        'email' => 'email',
		    'password' => 'required|confirmed|min:6',
		    'role' => 'required',
	    ]);

    	model::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
            'role' => $request->role,
        ]);

    	return response()->json(['success' => true], 200);
    }

    public function edit($id){
    	$data = model::find($id);
    	$success['data'] =  $data;
        
        return response()->json(['success' => $success], 200);
    }

    public function update(Request $request, $id){

    	if(isset($request->password) && isset($request->password_confirmation) && $request->password !== '' && $request->password_confirmation !== ''){
    		$validatedData = $request->validate([
		        'name' => 'required|max:255',
		        'email' => 'email',
			    'password' => 'required|confirmed|min:6',
			    'role' => 'required',
		    ]);
    	}else{
    		$validatedData = $request->validate([
		        'name' => 'required|max:255',
		        'email' => 'email',
			    'role' => 'required',
		    ]);
    	}

    	$data = $request->except('_method', '_token', 'password_confirmation');

    	if(isset($request->password) && isset($request->password_confirmation) && $request->password !== '' && $request->password_confirmation !== ''){
    		model::where('id',$id)->update([
	            'name' => $request->name,
	            'email' => $request->email,
	            'password' => Hash::make($request->password),
	            'role' => $request->role,
	        ]);
    	}else{
    		model::where('id',$id)->update([
	            'name' => $request->name,
	            'email' => $request->email,
	            'role' => $request->role,
	        ]);
    	}

    	return response()->json(['success' => true], 200);
    }

    public function delete($id){
    	model::destroy($id);
        
        return response()->json(['success' => true], 200);
    }
}

Terakhir kita akan tambah kan route nya pada api.php, kurang lebih jadi seperti ini :

<?php

use Illuminate\Http\Request;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::post('login', 'Api\AuthController@login');

Route::group(['middleware' => 'auth:api'], function(){
    Route::post('barang', 'Api\sg_barang@index');
    Route::put('barang/store', 'Api\sg_barang@store');
    Route::post('barang/edit/{id}', 'Api\sg_barang@edit');
    Route::post('barang/update/{id}', 'Api\sg_barang@update');
    Route::delete('barang/delete/{id}', 'Api\sg_barang@delete');

    Route::post('transaksi', 'Api\sg_transaksi@index');
    Route::put('transaksi/store', 'Api\sg_transaksi@store');
    Route::post('transaksi/edit/{id}', 'Api\sg_transaksi@edit');
    Route::post('transaksi/update/{id}', 'Api\sg_transaksi@update');
    Route::delete('transaksi/delete/{id}', 'Api\sg_transaksi@delete');

    Route::group(['prefix' => '', 'middleware' => ['role']], function() {
	    Route::post('user', 'Api\sg_user@index');
	    Route::put('user/store', 'Api\sg_user@store');
	    Route::post('user/edit/{id}', 'Api\sg_user@edit');
	    Route::post('user/update/{id}', 'Api\sg_user@update');
	    Route::delete('user/delete/{id}', 'Api\sg_user@delete');
	});
});

Kita akan mencoba membahas beberapa perbedaan pada controller api ini dan non api. Pertama, return yang di kembalikan ke pada user atau client adalah berbentuk objek, dimana kali ini kita menggunakan json. Json sendiri adalah singkatan dari JavaScript Object Notation, bisa di artikan sebagai standarisasi format pertukaran data untuk memungkinkan terjadinya komunikasi antara mesin. Contoh yang kita implementasikan adalah seperti ini :

return response()->json(['success' => $success], 200);

Lalu untuk fungsi store dan update, di kita akan memanfaatkan fitur validasi bawaan dari laravel (https://laravel.com/docs/7.x/validation), dimana jika validasi yang kita terapkan ternyata tidak sesuai dengan data yang di kirimkan client, maka return nya akan di kembalikan dalam bentuk json pada client berikut dengan pesan error pada validasinya. Contohnya adalah pada bagian ini :

$validatedData = $request->validate([
    'nama_barang' => 'required|max:255',
    'jumlah_barang' => 'required',
]);

Sisanya, hampir tidak ada perbedaan antara controller api dan non api. Berikutnya kita akan coba melakukan pengujian menggunakan postman, silahkan di perhatikan gambar di bawah ini :

Index

Silahkan perhatikan bagian-bagian yang sudah saya highlight dengan warna merah, pertama silahkan di sesuaikan url yang akan di hit dengan postman dan juga sesuaikan http request method-nya. Lalu pindahkan pada bagian Headers dan isi kan sesuai parameter pada gambar, yang perlu menjadi perhatian adalah pada bagain Authorization, value nya harus di sesuaikan dengan token yang kita dapat ketika kita berhasil login, untuk detail lengkapnya silahkan baca kembali tutorial sebelumnya (https://soft-gain.com/2020/06/12/tutorial-laravel-rest-api-menggunakan-otentikasi-passport/), contoh pada aplikasi kita adalah :

Bearer token_string

Dan jika semua sudah terisi tinggal tekan send, jika menerima hasil seperti gambar di atas maka bisa di asumsikan kita telah berhasil membuat web service. Selanjutnya untuk store, edit, update dan delete juga hampir sama, hanya saja pada store dan update kita perlu mengisikan parameter pada tab body kurang lebih seperti ini :

Store

Demikian lah pembahasan kita pada kali ini, source full nya bisa di ambil di repo saya seperti biasa (https://github.com/ImmanuelJL/belajar-laravel), silahkan di ambil dari cabang aplikasi-stok-barang. Untuk postman collection nya bisa di download di sini (https://drive.google.com/file/d/1KlDQc62pYC9p0b27gnMn7gGTCkzceQ-0/view?usp=sharing), tinggal di download saja dan di import pada postman supaya bisa dapat semua collection request yang kita gunakan pada tutorial ini. Terima kasih.

1 thought on “Tutorial Laravel, Membuat Aplikasi Web Service

Leave a Reply

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