Laporan Praktikum API dan RESTful Pemrograman Web

API dan RESTful

Aliffia Humairah - 2311531004

Click to go to github


API

API (Application Programming Interface) merupakan sekumpulan aturan dan protokol yang memungkinkan aplikasi berbeda platform untuk berkomunikasi dan saling terintegrasi.

Pentingnya API

API (Application Programming Interface) adalah media untuk komunikasi antara aplikasi yang berbeda. Dalam era digital saat ini, hampir semua aplikasi modern menggunakan API untuk:

  • Integrasi dengan layanan pihak ketiga
  • Memisahkan frontend dan backend
  • Mendukung multiple platform (web, mobile, desktop)
  • Memungkinkan microservices architecture
  • Konsep Dasar API

    Agar lebih memahami konsep dasar API berikut analogi API pemesanan makanan pada restoran.

    https://i.imgur.com/FnRnPem.jpeg

    Komponen Utama API (Request dan Response)
  • Request (Permintaan): URL/Endpoint, HTTP Method, Headers dan Body/Payload
  • Response (Respons): Status Code, Headers, dan Body/Data
  • Berikut ini merupakan ilustrasi komponen utama API

    https://i.imgur.com/n0YfUgB.png

    Jenis-Jenis API
  • Web API : Menggunakan protokol HTTP/HTTPS
  • REST API: Mengikuti arsitektur REST
  • GraphQL API: Query language untuk API
  • SOAP API: Protocol berbasis XML
  • Library API: Interface untuk library atau framework
  • Operating System API: Interface dengan sistem operasi
  • Database API: Interface untuk mengakses database


  • RESTful API

    REST (Representational State Transfer) adalah arsitektur untuk merancang web services. REST bukan protokol atau standar, melainkan seperangkat prinsip desain.

    Prinsip REST (Representational State Transfer)
  • Client-Server Architecture: Client dan server terpisah dan dapat berkembang secara independen.
  • Stateless: Setiap request harus berisi semua informasi yang diperlukan server untuk memproses request tersebut.
  • Cacheable: Response harus dapat di-cache untuk meningkatkan performa.
  • Uniform Interface: Interface yang konsisten antara client dan server.
  • Layered System: Arsitektur berlapis yang memungkinkan scalability.
  • Code on Demand (Opsional): Server dapat mengirim kode executable ke client


  • Struktur URL REST
    https://i.imgur.com/xSFtrAK.png

    HTTP Methods dalam REST
    GET - Mengambil Data
    https://i.imgur.com/juCoAbt.png

    Keterangan :

  • Digunakan untuk retrieve data
  • Idempotent (hasil sama meski dipanggil berulang)
  • Tidak mengubah state server
  • POST - Membuat Data Baru
    https://i.imgur.com/2fIIYnn.png

    Keterangan :

  • Digunakan untuk membuat resource baru
  • Tidak idempotent
  • PUT - Update Seluruh Resource
    https://i.imgur.com/uyrIdGy.png

    Keterangan :

  • Update seluruh resource
  • Idempotent
  • PATCH - Update Sebagian Resource
    https://i.imgur.com/K18kQRh.png

    Keterangan :

  • Update sebagian field
  • Idempotent
  • DELETE - Menghapus Resource
    https://i.imgur.com/6YHgR1o.png

    Keterangan :

  • Menghapus resource
  • Idempotent
  • HTTP Status Codes
    2xx Success
  • 200 OK: Request berhasil
  • 201 Created: Resource berhasil dibuat
  • 204 No Content: Request berhasil, tidak ada content
  • 4xx Client Error
  • 400 Bad Request: Request tidak valid
  • 401 Unauthorized: Autentikasi diperlukan
  • 403 Forbidden: Akses ditolak
  • 404 Not Found: Resource tidak ditemukan
  • 422 Unprocessable Entity: Validation error
  • 5xx Server Error
  • 500 Internal Server Error: Error di server
  • 502 Bad Gateway: Gateway error
  • 503 Service Unavailable: Service tidak tersedia


  • Membuat API

    Setup Project

    https://i.imgur.com/s86nLGr.png

    Database dan Migration

    https://i.imgur.com/dUh0exz.png

    Model

    php artisan make:model Product

    https://i.imgur.com/L6Qmb0Z.png

    API Routes

    https://i.imgur.com/GtRMJ3X.png

    API Controller

    php artisan make:controller ProductController --api

    https://i.imgur.com/IgQkyaB.png

    https://i.imgur.com/5TyipUo.png

    API Resources (Data Transformation)

    Fitur yang memungkinkan untuk mentransformasi model data atau collection menjadi format JSON yang konsisten dan mudah dikustomisasi untuk API response. API Resource berfungsi sebagai layer transformasi antara model Eloquent dan JSON response yang dikirim ke client sehingga dapat digunakan untuk Mengontrol format output JSON, Menyembunyikan field sensitive, Menambahkan field computed dan Membuat response yang konsisten.

    Membuat Resource

    php artisan make:resource ProductResource

    https://i.imgur.com/qsCS2RY.png

    Ubah method index dan show menggunakan API Resource pada ProductController.php dan jangan lupa untuk import ProductResource menggunakan use.

    Menggunakan Resource di Controller

    Silahkan ubah method index dan show menggunakan API Resource

    https://i.imgur.com/MNDkVea.png

    Validasi dan Error Handling

    Form Request Validation

    php artisan make:request StoreProductRequest

    https://i.imgur.com/VRq7Spa.png

    Implementasikan pada method store

    Form Request Validation

    Tambahkan kode program berikut pada app/Exceptions/Handler.php untuk menanggani Exception.

    https://i.imgur.com/XJ5lhdQ.png

    Langkah-Langkah

    1. Buat Folder baru terlebih dahulu dengan memasukkan code seperti dibawah ini, bisa pada commandprompt, cmder, ataupun terminal.

    https://i.imgur.com/6heXwg6.jpeg

    https://i.imgur.com/ZHsXPox.jpeg

    2. Setelah itu jalankan project dengan php artisan serve

    https://i.imgur.com/ns68Mgm.png

    3. Membuat tabel baru dengan memasukkan kode php artisan make:migration create_product_table dan ubah kode schema pada file yang sudah ada dengan kode berikut ini pada file tersebut

    https://i.imgur.com/u24yv5n.jpeg

    https://i.imgur.com/DIiuFYA.jpeg

    4. Untuk melihat apakah file migration tersebut sudah dibuat maka jalankan perintah php artisan migrate dan jika berhasil hasilnya akan seperti dibawah ini

    https://i.imgur.com/fcauBRj.jpeg

    5. Selanjutnya membuat file product yang berada didalam folder models dengan menjalakan perintah php artisan make:model Product dan masukkan kode berikut ini pada file tersebut

    https://i.imgur.com/56pEDKG.jpeg

    https://i.imgur.com/CscoPUU.png

    6. Untuk menyambungkan dengan API buat file api.php pada folder routes dan masukkan kode berikut, pada kode ini bisa menggunakan route yang pertama saja atau menggunakan route yang manual

    https://i.imgur.com/XQ70isr.jpeg

    7. Selanjutnya membuat Controller yang akan mengelola logika bisnis untuk setiap endpoint API dengan menjalankan perintah php artisan make:controller ProductController dan masukkan kode berikut ini

    https://i.imgur.com/SF7JMFp.png

    https://i.imgur.com/6ORC4jr.png

    8. Kemudian membuat API Resources yang nantinya digunakan untuk mentransformasi model data atau collection menjadi format JSON yang konsisten dan mudah dikustomisasi untuk API response. Langkahnya dengan menjalankan perintah php artisan make:resource ProductResource dan masukkan kode berikut ini pada file yang telah dibuat

    https://i.imgur.com/wCtE4fC.jpeg

    9. Selanjutnya, edit bagian index dan show menggunakan API Resource pada ProductController.php dan tambahkan import ProductResource menggunakan use.

    https://i.imgur.com/mJrL3lf.png

    10. Kemudian pada bagian file app.php di folder bootstrap tambah kan api agar Laravel tahu bahwa file routes/api.php harus di-load sebagai route API. Jika tidak ditambahkan, maka route di routes/api.php tidak akan aktif/terdaftar – dan saat dicoba untuk diakses /api/products, maka hasilnya akan 404 Not Found.

    https://i.imgur.com/ccpq7bs.png

    11. Buat Form Request Validation yang digunakan untuk memisahkan dan mengorganisir logika validasi data input dari controller dengan menjalankan perintah php artisan make:request StoreProductRequest dan masukkan kode berikut ke dalam file.

    https://i.imgur.com/ccpq7bs.png

    12. Setelah itu buat folder baru didalam app dengan nama Exception dan jalankan perintah php artisan make:exception Handler yang akan digunakan untuk menangkap dan menangani semua exception/kesalahan yang terjadi di aplikasi secara terpusat, masukkan kode berikut pada file handler

    https://i.imgur.com/Q41VlFB.png

    13. Kemudian untuk melakukan pengujian API ini download aplikasi postman dari website resminya seperti berikut.

    https://i.imgur.com/AEEWdBx.png

    14. Setelah berhasil diinstal pilih bagian "Send and API request". Setelah itu pada terminal jalan kan perintah php artisan serve untuk mengambil url dan mengcopy nya pada bagian send and api request tadi dan tambahkan route yang sudah kita buat dan gunakan methode GET untuk mengambil data dan jika berhasil akan muncul hasilnya seperti dibawah ini

    Untuk 200 OK itu maksudnya adalah Request berhasil dan jika 400 Bad Request maka Request tidak valid.

    https://i.imgur.com/hnXVNQK.jpeg

    15. Selanjutnya, coba menggunakan method POST yang digunakan untuk menambahkan atau membuat data baru dan tambahkan data seperti dibawah ini

    https://i.imgur.com/gr1ztux.jpeg

    Dan jika berhasil tampilannya akan seperti dibawah ini. Untuk 201 Created artinya Resource berhasil dibuat

    https://i.imgur.com/w879tx3.jpeg

    16. Contoh lainnya, setelah menambahkan data tersebut kita coba menggunakan GET kembali dengan menambahkan id setelah products pada url dan hasilnya akan seperti ini

    https://i.imgur.com/6M9gm1M.jpeg

    17. Selanjutnya menggunakan method PUT untuk mengupdate seluruh resource, bisa dilihat dibawah ini dilakukan perubahan data dari yang sebelumnya. Dan hasil dari perubahan datanya akan seperti

    https://i.imgur.com/SkRa7JU.jpeg

    18. Selanjutnya method DELETE untuk menghapus data yang telah dibuat, dibawah ini pada url ditambahkan id berapa data yang akan dihapus dan hasil seperti dibawah ini

    https://i.imgur.com/AwdQlzv.jpeg