Membuat REST API-LARAVEL
SETUP
Sebelum memulai menggunakan laravel, kita perlu mempersiapkan aplikasi pendukung pemrograman php menggunakan framework laravel.
Aplikasi yang perlu dipersiapkan yaitu composer. Silahkan mengunjungi link berikut untuk mempelajari composer
Link : https://getcomposer.org/
Kita bisa mengikuti petunjuk pada link https://getcomposer.org/download/ untuk melakukan installasi composer.
Untuk installasi Composer, silahkan bisa ikuti langkah-langkahnya sesuai dengan sistem operasi yang digunakan :
- Installation — Linux / Unix / macOS : https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos
- Installation — Windows : https://getcomposer.org/doc/00-intro.md#installation-windows
Untuk mengetahui apakah Composer berhasil terinstall, kita bisa menjalankan perintah berikut ini di dalam terminal/CMD :
composer
Jika berhasil, maka akan mendapatkan output kurang lebih seperti berikut ini :
CREATE NEW PROJECT LARAVEL
Setelah berhasil menginstall Composer di dalam komputer, maka kita sekarang sudah bisa melakukan installasi atau membuat project baru dengan Laravel. Pertama, silahkan masuk ke dalam folder dimana kita akan menyimpan project tersebut dan jalankan perintah berikut ini di dalam terminal/CMD :
composer create-project — prefer-dist laravel/laravel belajar_laravel
Setelah itu kita bisa membuka project installasi laravel dengan menggunakan tools visual studio code sepertio gambar dibawah ini :
Kita bisa melakukan check versi laravel yang terpasang pada project yang kita buat dengan perintah
php artisan — version
Pastikan untuk menjalankan perintah tersebut, kita sudah masuk pada folder nama aplikasi yang kita buat
Setelah berhasil terinstall, sekarang kita akan mencoba menjalankan project tersebut, silahkan jalankan perintah berikut ini di dalam terminal/CMD :
php artisan serve
Jika berhasil, maka project Laravel akan di jalankan di dalam localhost dengan port 8000, kita bisa membukanya di browser dengan mengetikkan http://127.0.0.1:8000dan kurang lebih seperti ini hasilnya :
CONFIGURASI DATABASE
Buat database dengan nama belajar_laravel. Setelah itu, buat tabel dengan nama modelproduks pada phpmyadmin dengan struktur seperti dibawah ini :
Silahkan buka project Laravel dengan text editor, seperti vscode, sublime text dan lain-lain. Dan buka file yang bernama .env dan Rubah file .env menjadi seperti berikut :
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:8HJlKzUlDl8E3vzqxL+bhvnUmAepz9wLo68KqU/VdHo=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=belajar_laravel
DB_USERNAME=root
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME=”${APP_NAME}”
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY=”${PUSHER_APP_KEY}”
MIX_PUSHER_APP_CLUSTER=”${PUSHER_APP_CLUSTER}”
Di atas, untuk DB_DATABASE merupakan nama database yang akan kita gunakan nanti, dan di atas kita atur dengan nama belajar_laravel.
Kemudian untuk DB_USERNAME silahkan disesuaikan dengan konfigurasi dari MySQL masing-masing, jika menggunakan XAMPP, maka secara default adalah root.
Dan untuk DB_PASSWORD silahkan disesuaikan juga dengan konfigurasi dari MySQL dan jika menggunakan XAMPP, maka defaultnya adalah kosong atau tidak perlu diisi.
CREATE MODEL
WARNING
::Nama dari model mewakili nama tabel (pada tabel nama belakang di tambah “s”)
Example :
Nama model : Modelproduk
Nama tabel : modelproduks
Setelah berhasil melakukan konfigurasi database, selanjutnya kita akan belajar bagaimana cara membuat model. Ada dua perintah untuk membuat model secara otomatis. Yang pertama adalah
php artisan make:model Modelproduk
Sedangkan yang kedua adalah
php artisan make:model Modelproduk -m
Pada perintah yang kedua, terdapat flag -m dimana berarti kita membuat model sekaligus membuat migration. Pada uji coba kali ini, kita tidak menggunakan flag -m, sehingga kita hanya menjalankan perintah
php artisan make:model Modelproduk
Jika berhasil maka akan muncul file Modelproduk.php pada folder Model seperti dibawah ini:
Setelah itu, rubah isi dari Modelproduk.php seperti dibawah ini
<?php
/**
* author : Suryo Atmojo <suryoatm@gmail.com>
* project : Belajar Laravel
* Start-date : 1–02–2021
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Modelproduk extends Model
{
use HasFactory;
protected $fillable = [
‘product’, ‘description’
];
}
CREATE RESOURCE
kita akan membuat resource class baru untuk data produk. Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan tentunya di dalam project Laravel.
php artisan make:resource ProdukResource
Jika perintah di atas berhasil, maka kita akan dibuatkan 1 file baru dengan nama ProdukResource.php di dalam folder app/Http/Resources/ProdukResource.php.
Disini kita tidak perlu melakukan perubahan kode apapun di dalam file ini, tapi jika kita mengembangkan aplikasi dengan sekala besar, maka kita bisa melakukan penyesuaian di dalam file resource ini.
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ProdukResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
CREATE CONTROLLER
Setelah berhasil membuat ProdukResource, maka kita lanjutkan untuk membuat controller baru yang kita gunakan sebagai API nantinya. Silahkan jalankan perintah berikut ini di dalam terminal/CMD :
php artisan make:controller Api\ProdukController -r
dengan menggunakan perintah di atas kita membuat sebuah controller baru dengan nama ProdukController.php yang berada di dalam folder app/Http/Controllers/Api
dan kita tambahkan flag -r yang artinya adalah resource controller, yaitu kita akan dibuatkan method-method di dalam controller tersebut sesuai dengan standart Laravel. Seperti :
- function index
- function create
- function store
- function show
- function edit
- function update
- function destroy
Sehingga source code akan tampak seperti ini :
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class ProdukController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
Kita lanjutkan untuk menambahkan beberapa kode di dalam controller ProdukController.php agar dapat digunakan untuk proses CRUD nantinya. Silahkan buka file controller tersebut dan ubah kode-nya menjadi seperti berikut ini :
<?php
/**
* author : Suryo Atmojo <suryoatm@gmail.com>
* project : Belajar Laravel
* Start-date : 1–02–2021
*/
namespace App\Http\Controllers\Api;
use App\Models\Modelproduk;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\ProdukResource;
use Illuminate\Support\Facades\Validator;
class ProdukController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//dengan perintah Modelproduk::all() maka akan memunculkan semua data
return new ProdukResource(Modelproduk::all());
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//set validation
$validator = Validator::make($request->all(), [
‘product’ => ‘required’
]);
//response error validation
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
//save to database
$modelproduk = Modelproduk::create([
‘product’ => $request->product,
‘description’ => $request->description,
]);
return new ProdukResource($modelproduk);
}
/**
* Display the specified resource.
* @param \Illuminate\Http\Request $request
* @param Modelproduk $modelproduk
* @return \Illuminate\Http\Response
*/
public function show(Request $request, Modelproduk $modelproduk)
{
$modelproduk = ModelProduk::find($request->produk);
// $modelproduk = ModelProduk::where(‘product’, “tugu buaya”)->first();
return new ProdukResource($modelproduk);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param Modelproduk $modelproduk
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Modelproduk $modelproduk)
{
//set validation
$validator = Validator::make($request->all(), [
‘product’ => ‘required’
]);
//response error validation
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
$modelproduk = ModelProduk::find($request->produk);
//update to database
$modelproduk->update([
‘product’ => $request->product,
‘description’ => $request->description
]);
return new ProdukResource($modelproduk);
}
/**
* Remove the specified resource from storage.
* @param \Illuminate\Http\Request $request
* @param Modelproduk $modelproduk
* @return \Illuminate\Http\Response
*/
public function destroy(Request $request, Modelproduk $modelproduk)
{
$modelproduk = ModelProduk::find($request->produk);
if ($modelproduk) {
$modelproduk->delete();
} else {
dd(“data tidak ada”);
}
return new ProdukResource($modelproduk);
}
}
Referensi :
CREATE ROUTE
Setelah kita membuat controller, tahap selanjutnya adalah modifikasi file route yang berada pada path belajar_laravel\routes\api.php
Menjadi seperti dibawah ini
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
/*
| — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
| 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::middleware(‘auth:sanctum’)->get(‘/user’, function (Request $request) {
return $request->user();
});
Route::apiResource(‘/produk’, App\Http\Controllers\Api\ProdukController::class);
Untuk melihat apakah route yang kita buat berhasil, kita bisa memverifikasinya dengan perintah berikut ini :
php artisan route:list
Setelah selesai, untuk menkalankan project laravel, kita dapat menggunakan perintah
php artisan serve
Setelah itu kita dapat mencoba route yang sudah dibuat dengan membuka postman dan masukkan url endpoint seperti dibawah ini :
jika muncul pesan error seperti dibawah ini :
Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘belajar_laravel.modelproduks’ doesn’t exist (SQL: select * from `modelproduks`) in file C:\Users\suryoatm\Documents\belajar-laravel\belajar_laravel\vendor\laravel\framework\src\Illuminate\Database\Connection.php on line 712
pastikan nama model sudah sesuai dengan nama tabel (jangan lupa penambahan huruf s di belakang). Setelah merubah nama tabel, lalu jalan kan ulang endpoint diatas pada postman. Sehingga jika semua sudah berjalan dengan baik maka akan muncul seperti gambar dibawah ini :