Fusio – Bina REST API Untuk Aplikasi Web Dengan Mudah Dan Pantas

Baru-baru ni saya ada keperluan untuk membina API (application programmable interface) untuk aplikasi web yang sedia ada. API biasanya berkonsepkan REST (menggunakan protokol GET, POST, PUT, DELETE, PATCH).

Dengan adanya API, kita boleh membina aplikasi yang menggunakan database yang sama, tanpa membenarkan aplikasi mendapat akses terus kepada database. Dalam situasi yang lain, mungkin ada beberapa data dan operasi yang kita boleh benarkan kepada pihak luar, untuk mereka bina aplikasi mereka sendiri. Selain daripada contoh ini, dengan aplikasi mobail pula, memang biasa kita bina API agar aplikasi di telefon bimbit boleh membaca dan memanipulasi data dalam skop yang dibenarkan.

Bagaimana nak membina API?

Kaedah pertama yang terlintas di fikiran adalah dengan menggunakan framework seperti Codeigniter ataupun Slim. Kedua-dua ini menyokong protokol REST. Kita boleh tetapkan alamat URL atau routing dengan protokol REST yang disokong, dan kemudian menulis kod untuk melaksanakan operasi.

Kita boleh gunakan ini, akan tetapi membina API bukan sekadar menyokong operasi yang nak dilaksanakan oleh aplikasi luar. Selain daripada ini, API juga mesti mempunyai ciri-ciri :

  • Pengurusan pengguna
  • Pengurusan token keselamatan
  • Berupaya menyekat trafik yang melampau
  • Log dan analitik penggunaan
  • Membantu menetapkan URL API
  • Menguruskan dan mengawak akses dan kebenaran kepada API untuk pengguna
  • Membantu menetapkan syarat-syarat API seperti POST, GET, PUT, DELETE, PATCH dengan lebih mudah

Banyak juga yang nak dibangunkan. Saya ni programmer PHP sahaja. Dan mujur saya terjumpa sebuah sistem untuk pembangunan dan pengurusan API yang berasaskan PHP. Dan lebih menarik, ianya open source dan percuma.

Mari Berkenalan dengan Fusio

Pertama, elok kita beri kredit kepada pembangunnya, Christoph Kappestein. Kemudian, Fusio ini boleh didapati dari http://fusio-project.org

Fusio adalah sesuatu yang kita panggil API Gateway.

API Gateway ini memudah semua kerja-kerja yang saya senaraikan di atas tadi. Dengan Fusio, kita mudah untuk membina sesebuah API untuk aplikasi. Kita hanya perlu

  1. menetapkan routing atau alamat URL
  2. menyatakan jenis protokol yang diterima (GET / POST / dll)
  3. nyatakan script Action yang akan mengendalikan

Antara ciri-ciri menarik apabila kita membangunkan API dengan Fusio, apabila kita membangunkan Action untuk mengendalikan trafik ke API, ianya boleh dibangunkan secara:

  • SQL-Table – keadah mendedahkan table kepada umum secara REST tanpa sebarang pengaturcaraan.
    • GET akan menyenaraikan rekod-rekod dalam table
    • GET dengan id akan memaparkan rekod khusus
    • POST untuk memasukkan rekod baru
    • PUT untuk kemaskini rekod atau insert
    • DELETE untuk membuang rekod tertentu
  • PHP modular
  • PHP Class
  • Javascript melalui V8 Engine parser
  • Capaian HTTP ke luar
  • Membaca dan memaparkan kandungan fail
  • Memaparkan JSON terus

Selain dari itu, Fusio juga boleh membantu menyimpan data sambungan ke database untuk kegunaan Action. Kita boleh mempunyai lebih daripada satu sambungan database sekiranya perlu.

Sebagai ciri keselamatan, Fusio menggunakan kaedah JSON Web Token atau JWT untuk mengesahkan pengguna API.

API yang dibangunkan boleh ditetapkan sebagai terbuka ataupun tertutup (private). Sekiranya ia adalah API tertutup, maka API mesti dipanggil bersama dengan token yang dihantar dalam HTTP Header Authorization.

Maka pengguna API perlu login terlebih (secara API) untuk mendapatkan token Dengan token ini, baru pengguna ataupun aplikasi boleh melaksanakan operasi lain di API dengan menggunakan token.

Sebenarnya banyak yang boleh dilakukan dengan Fusio ini. Bagi saya, kalau kita nak membina aplikasi mobile, atau SPA (single page app) atau PWA (progressive web app), boleh pertimbangkan untuk guna Fusio sebagai backend atau API.

Baru-baru ini saya ada buat satu FB live yang menunjukkan beberapa ciri dalam Fusio. Mungkin boleh mula di sini. Dan selamat menonton.

KidinoCI – Projek Modifikasi Codeigniter Dengan Integrasi TankAuth, GroceryCRUD

Saya telah memulakan satu projek baru di Github. Anda boleh gunakannya ikut kesesuaian sendiri dan projek ini diedarkan dengan lesen open source MIT.

Saya ni takdelah pantas nak mengikut dan tangkap teknologi terkini dalam programming. Walaupun ramai yang dah beralih ke Laravel (mungkin saya perlu juga nanti), saya masih gunakan Codeigniter. Kalau nak saya rumuskan, Codeigniter ni senang untuk belajar, senang untuk diajar dan senang untuk deploy.

Apa-apa pun, inilah dia KidinoCI, sebuah modifikasi Codeigniter dengan integrasi ciri-ciri tersebut:

  • Codeigniter 3
  • Tema Bootstrap 3
  • GroceryCRUD – untuk pengurusan data dan menyokong ciri soft delete
  • MY_Model oleh averiner untuk operasi database selain GroceryCRUD
  • TankAuth – untuk login, logout, forget password, register, dll
  • Kaedah DRY melalui Public_Controller, Loggedin_Controller
  • Modul pengurusan pengguna
  • Modul pengurusan profil peribadi
  • Modul ACL dengan groups and permission
  • Modul Contacts / Address Book yang menggunakan GroceryCRUD

Pada saya, dengan ini mudahlah nak mula membangunkan aplikasi web berasaskan PHP. Setup sahaja, login, logout, pembangunan form dan tables, banyak benda-benda tu dah ada.

Harap-harap membantu.

KidinoCI
https://github.com/kidino/kidinoci

Nota:

Cara Ringkas Memantau Laman Web Masih Hidup Dengan PHP (Website Up Time Monitoring)

Saya pasang “website monitoring” ni beberapa bulan lalu. Tiada apa yang berlaku. Jadinya saya tiada menerima sebarang makluman daripada skrip PHP ringkas ini. Tapi hari ini tiba-tiba saya mula menerima email.

“website-orang.com has been down for 00:05:00”

Apa?! Memang saya terkejut. Ini laman web klien besar. Dahlah sebelum ni ada masalah besar yang berlaku. Ianya antara sebab kenapa saya pasang monitoring ni.

Jadi perkara pertama yang saya buat adalah mencuba laman web tersebut dengan pelayar Chrome. Eh? Boleh saja. Kenapa ni ya?

Jadi saya pun hubungi syarikat hosting yang saya gunakan. Ini antara maklumbalas yang saya terima.

Network Disruption Details:
There is network disruption for international link and only certain location clients will be affected when connect to all MY network IP.

We will perform a details check on this and post another updates once it become available.

Rupanya trafik dari luar Malaysia tidak boleh akses laman web ini. Skrip “monitoring” saya ni memang berada di server di luar negara. Jadi sebab itulah skrip ini tak boleh akses laman web klien, tetapi bila saya buka dengan Chrome, boleh pula.

Sebenarnya, bila saya berkongsi tentang hal masalah network ini di Facebook, ada yang bertanya perihal skrip yang saya gunakan. Jadi saya kongsikan di sini.

Skrip PHP ini saya gunakan dengan penjadualan Cron. Ianya berjalan selang 5 minit. Dan pastikan bila anda gunakan ini, skrip tidak berada di server yang sama dengan laman web yang ingin dipantau.

 

Ini Github Gist saya. Selamat mencuba.