Membuat REST API dengan Laravel 7

By | 9 November 2020
81 / 100

API atau Application Programming Interface merupakan media komunikasi dan pertukaran data antar layanan. API sangat erat dengan pemrograman, apalagi sekarang banyak sekali aplikasi yang multi platform, yang tentu saja membutuhkan API untuk berkomunikasi dan bertukar data satu sama lain.

Pada posting sebelumnya kita sudah membahas mengenai authentikasi API di Laravel menggunakan Laravel Passport. Sekarang kita akan membuat REST API menggunakan Laravel.

[Baca: Membuat Authentikasi API dengan Laravel Passport]

Membuat REST API dengan Laravel

Untuk membuat REST API, kita akan memanfaatkan API Resource yang sudah disediakan Laravel. Kita akan membuat REST API untuk mengelola data mahasiswa.

Membuat Model

Pertama, kita perlu membuat model dan juga tabel database. Jalankan perintah berikut untuk membuat model dan juga migrationnya.

php artisan make:model Student -m

Dengan perintah tersebut, kita telah membuat model dengan nama Student dan juga file migrationnya. Pada method up() ganti dengan kode berikut untuk membuat tabelnya.

Schema::create('students', function (Blueprint $table) {
    $table->id();
    $table->string('name', 32);
    $table->string('npm', 16)->unique();
    $table->string('email', 64)->unique();
    $table->timestamps();
});

Jalankan perintah migrate untuk membuat tabel.

php artisan migrate

Setelah database siap, selanjutnya kita akan membuat controller.

Membuat Controller

Selanjutnya adalah membuat controller yang nantinya akan menangani proses-proses REST API. Jalankan perintah berikut:

php artisan make:controller Api/StudentController --api --model=Student

Perintah diatas akan menghasilkan controller baru yang tersimpan di folder app/Http/Controllers/Api.

Mendaftarkan Route

Selanjutnya kita perlu mendaftarkan route dari controller yang sudah kita buat. Buka file routes/api.php dan tambahkan kode berikut:

Route::apiResource('/students', 'Api\StudentController');

Untuk melihat daftar URL atau endpointnya, kita bisa menggunakan perintah route:list

php artisan route:list

Maka akan tampil URL dari route REST API kita seperti pada gambar berikut:

Route Endpoint REST API
Route Endpoint REST API

Bisa kita lihat pada bagian URI, endpoint dari REST API yang kita buat adalah: /api/students. Kita akan membahasnya di poin berikutnya.

Memahami Struktur REST API Laravel

Seperti pada gambar diatas, struktur URL REST API yang kita buat sesuai dengan standar REST API pada umumnya. Misalnya untuk menambah sumber daya (data) baru, kita harus menggunakan method POST. Untuk mengubah sumber daya (data) yang sudah ada kita harus menggunakan method PUT. Dan juga tindakan yang lainnya seperti pada tabel berikut.

TindakanURLHTTP MethodMethod
Menambah data/api/studentsPOSTstore()
Mengubah data/api/students/{id}PUTupdate()
Menghapus data/api/students/{id}DELETEdestroy()
Melihat data/api/students/{id}GETshow()
Melihat semua data/api/studentsGETindex()

Saat kita membuat controller dengan perintah artisan diatas, kita menambahkan flag “–api”, maksudnya adalah supaya Laravel hanya membuat method-method yang akan digunakan untuk keperluan REST API, yaitu method index, store, update, show dan destroy. Sedangkan method create dan edit tidak akan dibuat.

Sedangkan flag “–model=Student” adalah perintah untuk mengasosiasikan controller dengan model tertentu. Disini, controller StudentController dihubungkan dengan model Student.

Selanjutnya kita akan menguji REST API kita. Disini saya akan menggunakan aplikasi Postman. Jangan lupa jalankan artisan serve sebelum memulai.

php artisan serve

Menambah data

Untuk menambahkan data atau sumber daya baru, method yang digunakan adalah method store(). Pada controller StudentController.php, ubah method store() menjadi seperti berikut:

public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => ['required', 'max:32'],
            'npm' => ['required', 'max:16', 'unique:students,npm'],
            'email' => ['required', 'email', 'max:64', 'unique:students,email']
        ]);

        if ($validator->fails()) {
            return response()
                ->json([
                    'error' => true,
                    'validations' => $validator->errors()
                ], 422);
        }

        $student = new Student();
        $student->name = $request->name;
        $student->npm = $request->npm;
        $student->email = $request->email;
        $student->save();

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

Untuk menguji, jalankan Postman seperti pada gambar berikut:

Menambah data REST API

Jika menghasilkan response seperti diatas, artinya kita sudah berhasil menambahkan data ke database. Cobalah untuk memasukkan beberapa data lagi.

Pada contoh diatas saya menambahkan data mahasiswa dengan nama Ismiranda Syafitri, NPM G1A019001 dan email ismiranda@gmail.com. Setelah berhasil ID yang dihasilkan adalah 2.

Mengubah data

Untuk mengubah atau memperbarui data yang sudah ada, method yang digunakan adalah method update(). Kodenya seperti berikut:

public function update(Request $request, Student $student)
    {
        $validator = Validator::make($request->all(), [
            'name' => ['required', 'max:32'],
            'npm' => ['required', 'max:16'],
            'email' => ['required', 'email', 'max:64']
        ]);

        if ($validator->fails()) {
            return response()
                ->json([
                    'error' => true,
                    'validations' => $validator->errors()
                ], 422);
        }

        $student->name = $request->name;
        $student->npm = $request->npm;
        $student->email = $request->email;
        $student->save();

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

Untuk menguji, jalankan Postman dengan perintah seperti berikut:

Memperbarui data REST API
Memperbarui data REST API

Pada contoh diatas, data yang akan diubah adalah data dengan id 2. Selanjutnya pada kolom-kolom, saya memasukkan data baru untuk mengganti yang lama.

Menghapus data

Untuk menghapus data, method yang digunakan adalah method destroy()

public function destroy(Student $student)
    {
        $student->delete();

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

Untuk menguji, kita akan menghapus data dengan id 2. Jalankan Postman dengan perintah berikut:

Menghapus data REST API
Menghapus data dengan ID 2

Jika menghasilkan response seperti diatas, artinya kita berhasil menghapus data melalui REST API.

Melihat data

Untuk melihat data tunggal dengan id tertentu, method yang digunakan adalah method show(). Method ini akan menampilkan data berdasarkan id yang diberikan. Pada method show() isikan dengan kode berikut:

public function show(Student $student)
    {
        return $student;
    }

Kemudian coba jalankan Postman. Disini saya akan menampilkan data dengan ID 1.

Menampilkan data dengan REST API
Menampilkan data dengan REST API

Pada contoh diatas saya melakukan request dengan method GET, dan data yang diminta adalah data dengan ID 1.

Menampilkan semua data

Untuk menampilkan semua data, method yang digunakan adalah method index(). Isi dengan kode berikut:

public function index()
    {
        return Student::all();
    }

Method ini akan menampilkan semua data pada tabel students.

Menampilkan semua data dengan REST API
Menampilkan semua data dengan REST API

Seperti itulah cara membuat REST API menggunakan Laravel. REST API yang sangat sederhana dan sebenarnya hanya CRUD biasa. Dengan REST API ini, kita bisa mengintegrasikan aplikasi kita dengan aplikasi lainnya.

Melindungi REST API dengan Authentikasi

REST API yang sudah kita buat diatas sebetulnya sudah siap digunakan. Tapi, semua orang bisa mengakses REST API kita jika mengetahui URLnya. Hal ini tentu saja akan berbahaya, karena orang lain bisa mengubah bahkan menghapus data-data kita melalui REST API.

Solusinya adalah dengan melindunginya menggunakan authentikasi. Disini kita akan menggunakan Laravel Passport untuk melindungi REST API kita. Untuk menggunakan Laravel Passport, silahkan baca melalui tautan berikut: Membuat Authentikasi API dengan Laravel Passport.

Jika sudah, buka file routes/api.php dan ubah route sebelumnya menjadi seperti berikut:

Route::group(['middleware' => ['auth:api']], function () {
    Route::apiResource('/students', 'Api\StudentController');
});

Semua route yang dimasukkan dalam middleware auth:api selanjutnya tidak akan bisa diakses secara langsung, tetapi harus menyertakan token bearer yang dihasilkan saat login.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *