membuat restful api laravel

Pada kesempatan kali ini, saya akan membahas tentang bagaimana membuat Restful API dengan menggunakan Laravel API Resource. Api Resource akan memudahkan dalam pembuatan Restful api dimana model yang sudah dibuat bisa menghasilkan output/response berupa JSON. Untuk membuat Resource pada laravel bisa menggunakan perintah berikut :

php artisan make:resource MusikResource

Pada kesempatan ini, kita akan membuat Musik reviews API, dimana pengguna bisa menambahkan, merubah dan menghapus musik. Langsung saja kita buat projek baru dengan perintah

laravel new musikreview

Membuat Model dan Migration

php artisan make:model Musik -m

setelah berhasil membuat model beserta migration nya, maka langsung saja ubah migration yang sudah dibuat menjadi

// database/migrations/TIMESTAMP_create_musiks_table.php

public function up()
{
  Schema::create('musiks', function (Blueprint $table) {
    $table->increments('id');
    $table->string('judul');
    $table->string('penyanyi');
    $table->timestamps();
  });
}

selanjutanya kita buat untuk model Rating

php artisan make:model Rating -m

ubah function up pada migration rating menjadi

/ database/migrations/TIMESTAMP_create_ratings_table.php

    public function up()
    {
      Schema::create('ratings', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('musdik_id');
        $table->unsignedInteger('rating');
        $table->timestamps();
      });
    }

Selanjutnya silahkan jalankan perintah migrations

php artisan migrate

jangan lupa untuk merubah .env sebelum menjalankan perintah tersebut.

Membuat Relasi pada Model

Pada model musik silahkan tambahkan kode berikut

 // app/musik.php

 protected $fillable = ['judul', 'penyanyi'];

 public function ratings()
 {
   return $this->hasMany(Rating::class);
 }

dan pada model rating silahkan tambah kode berikut

// app/Rating.php

protected $fillable = ['musik_id', 'rating'];

public function musik()
{
  return $this->belongsTo(Musik::class);
}

Membuat Resource dan Controller

membuat resource musik dengan perintah berikut

php artisan make:resource MusikResource

lalu buka resource yang sudah dibuat tadi dan ubah menjadi sebagai berikut

// app/Http/Resources/MusikResource.php

    public function toArray($request)
    {
      return [
        'id' => $this->id,
        'judul' => $this->judul,
        'penyanyi' => $this->penyanyi,
        'created_at' => (string) $this->created_at,
        'updated_at' => (string) $this->updated_at,
        'ratings' => $this->ratings,
      ];
    }

setelah membuat resource Musik, selanjutnya buat controller Musik

php artisan make:controller MusikController --api

lalu buka controller Musik dan tambahkan kode berikut

// app/Http/Controllers/MusikController.php

 // add these at the top of the file
 use App\Musik; 
 use App\Http\Resources\MusikResource;

 public function index()
 {
   return MusikResource::collection(Musik::with('ratings')->paginate(25));
 }

 public function store(Request $request)
 {
   $book = Musik::create([
     'judul' => $request->judul,
     'penyanyi' => $request->penyanyi,
   ]);

   return new MusikResource($musik);
 }

 public function show(Musik $musik)
 {
   return new MusikResource($musik);
 }

 public function update(Request $request, Musik $musik)
 {
   $book->update($request->only(['judul', 'penyanyi']));

   return new MusikResource($musik);
 }

 public function destroy(Musik $musik)
 {
   $musik->delete();

   return response()->json(null, 204);
 }

membuat resource rating

php artisan make:resource RatingResource

lalu ubah menjadi

public function toArray($request)
 {
   return [
     'musik_id' => $this->musik_id,
     'rating' => $this->rating,
     'created_at' => (string) $this->created_at,
     'updated_at' => (string) $this->updated_at,
     'musik' => $this->musik,
   ];
 }

setelah membuat resource, buatlah controller resource dengan perintah

php artisan make:controller ResourceController

lalu tambahkan kode berikut

use App\Musik;
use App\Rating;
use App\Http\Resources\RatingResource;

   public function store(Request $request, Musik $musik)
    {
      $rating = Rating::firstOrCreate(
        [
          'musik_id' => $request->user()->id,
          'musik_id' => $musik->id,
        ],
        ['rating' => $request->rating]
      );

      return new RatingResource($rating);
    }

Buka file Route/api.php dan tambahkan kode berikut

Route::apiResource('musiks', 'MusikController');
Route::post('musiks/{musik}/ratings', 'RatingController@store');

Setelah semua proses selesai, anda bisa mencobanya menggunakan Postman.