Tempat tertimbunnya tulisan - tulisan akibat kejangaran ngoding

07 October 2018

Cara Membuat API di Laravel

Membuat API Laravel

Assalamualaikum wr wb.
kali ini saya akan menulis tutorial tentang bagaimana cara membuat API di Laravel. pada pertemuan sebelumnya saya sudah membuat tabel siswa, nah sekarang saya akan buat API dari tabel siswa. Untuk yang belum membuat tabel siswa silahkan kunjungi Membuat Model dan Seeder di Laravel. Untuk tutorial install laravel silahkan kunjungi Cara Install Laravel.

Langkah 1
Pertama kita akan membuat controller untuk tabel siswa. Kita akan membuatnya lewat terminal atau command prompt.
php artisan make:controller Api/StudentController --resource --model=Student

Langkah 2
Selanjutnya kita akan membuat model binding dan routing. Pertama tambahkan kode berikut kedalam /routes/api.php.
Route::group(['namespace' => 'Api'], function () {
Route::resource('students', 'StudentController');
});

Tambahkan juga code dibawah ini, ke dalam app/Providers/RouteServiceProvider.php pada function mapApiRoutes(), fungsinya adalah untuk Route Model Binding
Route::model('student', Student::class);

Kemudian cek routes yang ada pada web kita dengan mengetikan kode berikut.
php artisan route:list


Selanjutnya edit file model Students.php menjadi seperti berikut.
namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    //model
    protected $guarded = ['id'];

    public static function rules($update = false, $id = null)
    {
        $rules = [
            'first_name'    => 'required',
            'email'         => ['required', Rule::unique('colleagues')->ignore($id, 'id')],
            'email'         => 'email',
            'gender'        => ['required', Rule::in(['male', 'female'])],
            'address'       => 'required',
            'phone_number'  => 'required'
        ];
        if ($update) {
            return $rules;
        }
        return array_merge($rules, [
            'email'         => 'required|unique:colleagues,email',
        ]);
    }
}

Pada code diatas, kita menambahkan rules yang berfungsi untuk validasi ketika kita melakukan aktifitas create dan update, dan property $guarded dengan value [‘id’] yang berfungsi supaya field selain ‘id’ menjadi assignable (dapat kita tambahkan kedalam db).

Selanjutnya kita akan membuat API Resources, nantinya akan ada dua resources yaitu resource data tunggal (item) dan resource collection.

Untuk class yang menghandle resource data tunggal akan memakai/meng-extend:
Illuminate\Http\Resources\Json\JsonResource
Sedangkan untuk yang bertipe Collection akan meng-extend:
Iluminate\Http\Resources\Json\ResourceCollection

Masukan perintah berikut untuk membuat resource item.

php artisan make:resource StudentItem

kemudian ubah kodenya menjadi seperti berikut ini. filenya terletak di /App/Http/Resources/

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class StudentItem extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'first_name' => $this->first_name,
            'last_name' => $this->last_name,
            'email' => $this->email,
            'gender' => $this->gender,
            'speciality' => $this->speciality,
            'phone_number' => $this->phone_number,
            'address' => $this->address
        ];
    }
}

Setelah itu kita akan membuat Resources Collection. Masukan perintah berikut kedalam terminal atau command line.

php artisan make:resource StudentCollection --collection

Kemudian edit filenya menjadi seperti berikut. lokasi file sama dengan file resources sebelumnya.

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class StudentCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'data' => StudentItem::collection($this->collection)
        ];
    }
}

Selanjutnya kita akan mulai mengedit controller yang kita buat diawal tadi. Ubah StudentController yang ada di /app/Http/Controllers/Api/.


namespace App\Http\Controllers\Api;

use App\Student;
use Illuminate\Http\Request;
use App\Http\Resources\StudentCollection;
use App\Http\Resources\StudentItem;
use App\Http\Controllers\Controller;

class StudentController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return new StudentCollection(Student::get());
    }

    /**
     * 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)
    {
        $this->validate($request, Student::rules(false));
        if (!Student::create($request->all())) {
            return [
                'message' => 'Bad Request',
                'code' => 400,
            ];
        } else {
            return [
                'message' => 'OK',
                'code' => 200,
            ];
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Student  $student
     * @return \Illuminate\Http\Response
     */
    public function show(Student $student)
    {
        return new StudentItem($student);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Student  $student
     * @return \Illuminate\Http\Response
     */
    public function edit(Student $student)
    {
        // 
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Student  $student
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Student $student)
    {
        $this->validate($request, Student::rules(true, $student->id));
        if (!$student->update($request->all())) {
            return [
                'message' => 'Bad Request',
                'code' => 400,
            ];
        } else {
            return [
                'message' => 'OK',
                'code' => 201,
            ];
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Student  $student
     * @return \Illuminate\Http\Response
     */
    public function destroy(Student $student)
    {
        if ($student->delete()) {
            return [
                'message' => 'OK',
                'code' => 204,
            ];
        } else {
            return [
                'message' => 'Bad Request',
                'code' => 400,
            ];
        }
    }
}

Setelah semuanya selesai silahkan test API yang telah dibuat. untuk testing API dengan metode get kita bisa langsung  mengaksesnya dari URL. Pertama aktifkan server laravelnya.
php artisan serve

selanjutnya masukan url 127.0.0.1:8000/api/students maka akan menampilkan semua data yang ada di tabel user.
untuk mengetes method lain, silahkan anda bisa mencobanya melalui aplikasi postman atau kode script php dengan membuat formnya terlebih dahulu.

Sekian postingan kali ini, semoga bermanfaat ;)

2 comments: