Membangun Rest API Sederhana dengan Symfony + API Platform

Hai, terima kasih telah berkunjung. Dipenghujung tahun 2018 saya mempunyai kesempatan untuk belajar salah satu tool yang populer dikalangan pengguna framework symfony yaitu API Platform.

Sederhananya API Platform merupakan sebuah tool yang dibuat untuk memudahkan dalam membuat REST API dengan fitur yang ditawarkan, diantaranya:

  • Automatic CRUD
  • Pagination
  • Filtering and Ordering
  • Advanced authentication and authorization rules, dan lainnya.

Jadi kali ini kita akan bahas Automatic CRUD, nah sesuai namanya fitur ini membantu kita dalam membuat operasi crud. Jadi kita punya satu Entity misalnya Book maka dengan fitur ini, kamu sudah bisa melakukan CRUD tanpa membuat masing-masing action di controller.

Entity

Pertama kita akan buat satu project symfony dengan perintah

composer create-project symfony/skeleton belajar-api-platform

Jika project berhasil dibuat maka kita tambahkan beberapa dependency yaitu api-platform, dan maker bundle, dengan mengeksekusi perintah berikut:

composer require api orm
composer require maker server --dev

Untuk melakukan pengujian apakah instalasi berhasil, jalankan perintah:

bin/console server:run

dan akses http://localhost:8000/api, maka kamu akan mendapatkan tampilan seperti berikut :

Selanjutnya yang kita lakukan adalah melakukan konfigurasi basis data. Lewati langkah ini jika sebelumnya sudah pernah melakukan konfigurasi database. Pastikan DATABASE_URL di file .env sudah benar, sebagai contoh saya akan menggunakan sqlite sebagai database dengan konfigurasi sebagai berikut :

DATABASE_URL=sqlite:///%kernel.project_dir%/var/data.db

Berikutnya adalah membuat entity Book dengan perintah:

bin/console make:entity Book

Lalu tambahkan column yang dibutuhkan sesuai dengan rancangan entity di atas,

Setelah selesai maka buka file src/Entity/Book.php lalu tambahkan anotasi @ApiResource seperti contoh dibawah :

<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
/**
* @ApiResource
* @ORM\Entity(repositoryClass="App\Repository\BookRepository")
*/
class Book
{

Untuk penambahan anotasi @ApiResource bisa dilewati dengan menambahkan opsi --api-resource pada saat pembuatan entity.

Jika sudah maka akses kembali url http://localhost:8000/api, kamu akan melihat bahwa CRUD untuk entity Book sudah dibuat seperti gambar di bawah ini :

Pada tahap ini kita sudah bisa memakai beberapa endpoint yang dibuat otomatis oleh Api Platform untuk entity Book. Kamu bisa langsung uji coba di halaman tersebut .

Dan jika kamu perhatikan dari awal hingga pada tahap ini, kita cuman install dan tambahkan beberapa baris kode saja. Nah inilah salah satu fitur api platform, jadi untuk urusan CRUD biasa sudah ditangani olehnya, jadi bisa hemat waktu juga kan? hehe. Nah sekarang kita akan uji langsung api yang sudah dibuat dengan Swagger yang telah dibuat otomatis oleh api platform.

Sebelum melakukan uji coba, maka kita harus buat dulu database, dan juga schema tabelnya, dengan perintah berikut:

bin/console doctrine:database:create
bin/console doctrine:schema:update --force

Pertama kita akan coba CREATE data book, klik pada bagian POST di endpoint /api/books, lalu klik tombol Try it out. Lalu isi title, dan author nya seperti gambar dibawah, jika sudah maka tekan tombol execute di bagian bawahnya:

Form Data Book
Response New Book

Lalu kita akan READ data buku tersebut, nah kita akan lihat koleksi data buku. Caranya tinggal klik pada bagian GET dengan endpoint api/books , lalu klik execute maka responsenya adalah koleksi data dari buku. Pada bagian ini juga api platform mendukung soal paginasi, jadi pada saat kamu mengambil koleksi data buku, kamu akan diminta untuk mengisi page number, walaupun ini tidak wajib diisi.

Ataupun kamu mau ambil data buku berdasarkan id , bisa dilihat di bagian method GET dengan endpoint api/books/{id} di bagian ini kamu wajib mengisi id yang ingin ditampilkan. Biasanya endpoint ini digunakan untuk melihat detail dari suatu data.

Selanjutnya adalah UPDATE, pada bagian ini kita di minta untuk mengisi id dari data yang ingin diupdate, lalu isi perubahan datanya. dan execute, maka data perubahan tersebut akan disimpan.

Dan terakhir kita akan DELETE datanya, pada bagian ini juga kita diwajibkan untuk mengisi id dari data yang ingin kita hapus.

Sekian untuk pengenalan singkat api platform, saya butuh saran dan kiritik dari teman-teman pembaca untuk lebih baik lagi, baik dari sisi penulisan, istilah dan lainnya. Terima kasih ^_^.

Yuk!, gabung di group Telegram Symfony Indonesia, https://t.me/symfonyid

Referensi :

Thanks buat mas Indra Gunawan yang sudah mereview tulisan ini.