Halo teman-teman semuanya, di artikel kali ini kita akan belajar bagaimana cara menampilkan data dari database menggunakan Rest API di Laravel. Dan kita akan menggunakan API Resource untuk menampilkan format JSON-nya.
Sebelum itu, silahkan teman-teman download aplikasi Postman terlebih dahulu. Aplikasi ini akan kita gunakan untuk melakukan proses uji coba Rest API yang kita buat nantinya.
Link Unduk Postman : https://www.postman.com/downloads/
Langkah 1 - Membuat Controller
Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan sudah berada di dalam project Laravel-nya.
php artisan make:controller Api/PostController
Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan 1 file controller baru dengan nama PostController.php
yang berada di dalam folder app/Http/Controllers/Api
.
Silahkan buka file tersebut, kemudian ubah kode-nya menjadi seperti berikut ini :
<?php
namespace App\Http\Controllers\Api;
use App\Models\Post;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\PostResource;
class PostController extends Controller
{
/**
* index
*
* @return void
*/
public function index()
{
//get posts
$posts = Post::latest()->paginate(5);
//return collection of posts as a resource
return new PostResource(true, 'List Data Posts', $posts);
}
}
Dari perubahan kode di atas, pertama kita melakukan import Model Post
terlebih dahulu. Karena kita akan menggunakan model ini untuk mendapatkan data dari database.
use App\Models\Post;
Setelah itu, kita juga import PostResource
yang sudah kita buat sebelumnya. Resource inilah yang nanti kita gunakan untuk mengubah data menjadi format JSON.
use App\Http\Resources\PostResource;
Dan di dalam class PostController
, kita menambahkan 1 method baru dengan nama index
. Di dalam method tersebut pertama kita melakukan get data posts dengan Model.
//get posts
$posts = Post::latest()->paginate(5);
DI atas, kita urutkan data yang akan ditampilkan menggunakan method latest
dan kita batasi data yang ditampilkan per-halaman menggunakan method paginate
.
Setelah itu, kita return menggunakan PostResource
dengan mengirimkan 3 paramater.
//return collection of posts as a resource
return new PostResource(true, 'List Data Posts', $posts);
Untuk parameter pertama, kita berikan nilai true
, yang mana merupakan status success dari response-nya. Kemudian untuk parameter kedua adalah List Data Posts
, yang merupakan message atau pesan dari response-nya. Dan terakhir adalah $posts
, yang merupakan data ysng diambil dari model dan akan di transformasi menjadi collection.
Langkah 2 - Membuat Route Api Resource
Setelah berhasil membuat controller, sekarang kita lanjutkan menambahkan route-nya. Silahkan buka file routes/api.php
, kemudian ubah semua kode-nya menjadi seperti berikut ini :
<?php
use Illuminate\Support\Facades\Route;
//posts
Route::apiResource('/posts', App\Http\Controllers\Api\PostController::class);
Dari perubahan kode di atas, kita menambahkan route baru dengan jenis apiResource
. Dengan menggunakan route tersebut, kita akan otomatis dibuatkan beberapa method route, seperti index
, store
, show
, update
dan destroy
.
Untuk memastikan route telah berhasil ditambahkan, silahkan jalankan perintah berikut ini di dalam termina/CMD :
php artisan route:list
Jika berhasil, maka akan menampilkan hasil seperti berikut ini :
Langkah 3 - Uji Coba Rest API
Sekarang kita akan lakukan uji coba Rest API kita menggunakan aplikasi Postman. Silahkan buka aplikasi Postman kemudian masukkan URL berikut ini http://localhost:8000/api/posts dan untuk method-nya silahkan pilih GET
.
Jika sudah, silahkan klik Send
dan jika berhasil maka akan menampilkan response data dengan pagination. Kurang lebih seperti berikut ini :
{
"success": true,
"message": "List Data Posts",
"data": {
"current_page": 1,
"data": [],
"first_page_url": "http://localhost:8000/api/posts?page=1",
"from": null,
"last_page": 1,
"last_page_url": "http://localhost:8000/api/posts?page=1",
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://localhost:8000/api/posts?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"next_page_url": null,
"path": "http://localhost:8000/api/posts",
"per_page": 5,
"prev_page_url": null,
"to": null,
"total": 0
}
}
Jika kita perhatikan, dibagian "data": [],
masih menampilkan array kosong. Yups itu karena kita belum memiliki data apapun di dalam table posts. Di artikel selanjutnya, kita akan belajar bagaimana cara melakukan proses insert menggunakan Rest API di Laravel.
Terima Kasih