Beberapa pekan lalu, saya mengisi sebuah kelas tentang pengembangan aplikasi mobile. Dan dalam kelas tersebut kami membahas sekilas tentang pengembangan Rest API untuk mendukung pengembangan aplikasi mobile. Karena keterbatasan waktu, kami belum sempat praktik untuk mengembangkan Rest API. Tutorial membuat Rest API menggunakan API Platform ini dihadirkan untuk teman-teman yang sudah mengikuti kelas pengembangan aplikasi mobile dan juga kamu (teman-teman pengunjung blog ini). Selamat membaca!
Menurut dokumentasi resminya, API Platform adalah sebuah full stack framework yang di dedikasikan untuk API-driven project. Framework ini berisi library PHP untuk membuat API dengan fitur terlengkap yang mendukung standar industri, seperti JSON-LD, GraphQL, OpenAPI dan lain-lain.
API Platform juga menyediakan tool Javascript untuk mengkonsumsi API tersebut dalam sekejap (admin, PWA dan mobile apps generator, hypermedia client dan lainnya) dan juga integrasi Docker dan Kubernetes untuk develop dan deploy secara instant di Cloud.
Untuk membuat API dengan fitur lengkap, admin interface dan Progressive Web App, kita hanya perlu mendesain model data dari API kita dan buat data model tersebut sebagai Plain Old PHP Objects (POPO).
API Platform menggunakan class model untuk expose sebuah web API dengan berbagai fitur, diantaranya:
Dan satu lagi, di dalam distribusi API Platform ini terdapat framework Symfony. Jadi API Platform ini sangat compatible dengan berbagai Symfony bundles (plugins). Kita bisa menambahkan langsung fitur-fitur seperti custom, service-oriented, API endpoint, JWT atau OAuth authentication, HTTP caching, mengirim email atau asynchronous job untuk API kita.
Jadi gitu teman-teman... karena fiturnya yang segudang, saya memutuskan untuk menggunakan API Platform di tutorial ini. Nah sekarang kita mulai praktek yuk!
Studi kasus yang akan dibahas di tutorial membangun Rest API menggunakan API Platform ini adalah tentang aplikasi toko buku atau bookshop. Dalam aplikasi toko buku, setidaknya ada beberapa proses bisnis seperti pengelolaan data buku, pengelolaan stok buku, transaksi pembelian dan lain-lain. Dari beberapa proses bisnis yang tersedia, di tutorial ini kita akan fokus dalam mengelola data buku.
Sebagai contoh untuk project tutorial ini, skema database untuk aplikasi toko buku ini dapat kita lihat pada gambar berikut ini.
Cara terbaik dalam menggunakan API Platform adalah dengan mengunduh langsung distribusi official API Platform. Karena perlu belajar dulu tentang docker, jadi kita coba install API Platform ini menggunakan symfony cli
.
Pertama kita install dulu symfony cli
. Buka terminal lalu kita run command
ini.
curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.deb.sh' | sudo -E bash
sudo apt install symfony-cli
Untuk menginstall API Platform, pertama buka terminal, lalu ketik beberapa perintah ini.
symfony new bookshop-api
Selanjutnya masuk ke direktori projek.
cd bookshop-api
Di dalam direktori projek kita install api platform.
symfony composer require api
Kemudian kita tambahkan library maker-bundle
.
composer require symfony/maker-bundle --dev
Tunggu beberapa saat sampai proses instalasi selesai.
Setelah proses instalasi selesai, langkah berikutnya adalah mengatur konfigurasi database. Di tutorial ini, kita buat database dengan nama db_bookshop
. Buka file .env
di dalam root project, lalu atur konfigurasi database.
DATABASE_URL=mysql://db_user:[email protected]:3306/db_bookshop
Note:
db_user
merujuk ke username untuk mysqldb_password
merujuk ke password untuk mysqldb_bookshop
merujuk ke nama databaseGanti db_user
dan db_password
sesuai dengan credential database kamu. Jangan lupa save kembali file .env
.
Selanjutnya kita akan buat database. Di sini kita coba buat database melalui terminal. Buka terminal, lalu run command
ini untuk membuat database:
symfony console doctrine:database:create
Tahapan berikutnya adalah membuat model. Di tahapan ini kita akan membuat dua class model sesuai dengan skema database sebelumnya menggunakan symfony MakerBundle.
Sekarang kita buat terlebih dahulu entitas Book
dengan fields isbn
, title
, description
, author
, dan publicationDate
menggunakan symfony MakerBundle. Buka terminal, lalu run command
di bawah ini:
$ bin/console make:entity --api-resource
Selanjutnya akan muncul beberapa pertanyaan di output terminal. Kita isi sesuai dengan skema database yang sudah dibuat:
$ bin/console make:entity --api-resource
Class name of the entity to create or update (e.g. AgreeableKangaroo):
> Book
created: src/Entity/Book.php
created: src/Repository/BookRepository.php
Entity generated! Now let's add some fields!
You can always add more fields later manually or by re-running this command.
New property name (press <return> to stop adding fields):
> isbn
Field type (enter ? to see all types) [string]:
> string
Field length [255]:
> 255
Can this field be null in the database (nullable) (yes/no) [no]:
> no
updated: src/Entity/Book.php
Add another property? Enter the property name (or press <return> to stop adding fields):
> title
Field type (enter ? to see all types) [string]:
> string
Field length [255]:
> 255
Can this field be null in the database (nullable) (yes/no) [no]:
> no
updated: src/Entity/Book.php
Add another property? Enter the property name (or press <return> to stop adding fields):
> description
Field type (enter ? to see all types) [string]:
> text
Can this field be null in the database (nullable) (yes/no) [no]:
> no
updated: src/Entity/Book.php
Add another property? Enter the property name (or press <return> to stop adding fields):
> publicationDate
Field type (enter ? to see all types) [string]:
> datetime
Can this field be null in the database (nullable) (yes/no) [no]:
> no
updated: src/Entity/Book.php
Add another property? Enter the property name (or press <return> to stop adding fields):
>
Success!
Selanjutnya kita buat entitas yang kedua yaitu Review
dengan fields rating
, body
, author
, dan publicationDate
menggunakan symfony MakerBundle. Buka terminal, lalu ketik run command
di bawah ini:
$ bin/console make:entity --api-resource
Sama seperti sebelumnya, akan muncul interaktif di terminal:
$ bin/console make:entity --api-resource
Class name of the entity to create or update (e.g. VictoriousJellybean):
> Review
created: src/Entity/Review.php
created: src/Repository/ReviewRepository.php
Entity generated! Now let's add some fields!
You can always add more fields later manually or by re-running this command.
New property name (press <return> to stop adding fields):
> rating
Field type (enter ? to see all types) [string]:
> smallint
Can this field be null in the database (nullable) (yes/no) [no]:
> no
updated: src/Entity/Review.php
Add another property? Enter the property name (or press <return> to stop adding fields):
> body
Field type (enter ? to see all types) [string]:
> text
Can this field be null in the database (nullable) (yes/no) [no]:
> no
updated: src/Entity/Review.php
Add another property? Enter the property name (or press <return> to stop adding fields):
> author
Field type (enter ? to see all types) [string]:
> string
Field length [255]:
> 255
Can this field be null in the database (nullable) (yes/no) [no]:
> no
updated: src/Entity/Review.php
Add another property? Enter the property name (or press <return> to stop adding fields):
> publicationDate
Field type (enter ? to see all types) [string]:
> datetime
Can this field be null in the database (nullable) (yes/no) [no]:
> no
updated: src/Entity/Review.php
Add another property? Enter the property name (or press <return> to stop adding fields):
>
Success!
Dan yang terakhir, gunakan Doctrine
untuk sinkronisasikan struktur table database dengan data model yang baru dibuat:
$ bin/console doctrine:schema:update --force
Tahapan selanjutnya kita akan menguji coba project kita. Buka kembali terminal, lalu run aplikasi dengan command
di bawah ini:
symfony serve
Selanjutnya buka browser, lalu buka url http://127.0.0.1:8000/api
. Kita bisa lihat tampilan dokumentasi api seperti yang terlihat pada gambar di bawah ini.
Kita bisa coba-coba langsung mengirimkan request ke API kita melalui UI ini. Dan tentunya, kita bisa menggunakan HTTP client untuk mengirim request ke API kita, misalnya menggunakan Postman.
Ada satu kesimpulan yang dapat kita ambil setelah mencoba membuat project restful api menggunakan api platform ini, yaitu framework api platform ini benar-benar mempermudah kita sebagai developer untuk membuat restful api. Kita hanya perlu membuat entity
class, lalu restful api sudah tersedia.
Kalau ada framework ini, apakah sia-sia belajar membuat restful api tanpa framework? Tentu tidak sia-sia ya.. karena ketika kita belajar sejengkal demi sejengkal itu akan menambah pemahaman kita tentang restful api itu sendiri. Bagaimana menurutmu?
© 2024 qadrLabs . All rights reserved. 000515268