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.

Projek Buku Git – Bantuan Diperlukan

Saya telah memulakan Projek Buku Git di Github.

Web : https://kidino.github.io/buku-git/

Github : https://github.com/kidino/buku-git

Git merupakan satu kemahiran penting untuk seorang software developer. Ianya membantu dalam menguruskan kod dan versi aplikasi yang kita bangunkan. Ianya juga memudahkan kerja-kerja pengurusan dalam projek yang melibatkan ramai programmer. Tetapi saya merasakan yang graduan IT dan sains komputer tidak mempunyai kemahiran ini setelah tamat pengajian.

Jadi, bersama dengan JOMWEB, kami telah menjalankan beberapa bengkel untuk memperkenalkan Git dan memberi pendedahan. Bengkel kami biasa berjalan selama satu hari penuh dan kami ajarkan apa sahaja yang sempat. Kami kenakan harga RM20, termasuk makan tengahari. Tempat biasanya ditaja oleh rakan-rakan JOMWEB sendiri yang mempunyai kemudahan bilik latihan dan internet.

Perlu saya ucapkan terima kasih kepada rakan-rakan berikut yang telah menaja tempat latihan sebelum ini:

  • NEF
  • Altfa Training
  • Serai Solutions
  • Webshaper (Neowave)
  • KPTM Kuala Lumpur
  • MaGIC

Bengkel yang lepas : http://jomweb.github.io/bengkel-git/

Meluaskan Bengkel Git ke Seluruh Negara Secara Francais Percuma

Continue reading Projek Buku Git – Bantuan Diperlukan

NEF-JOMWEB Ketengahkan Kepakaran ICT Tempatan Melalui 17 Projek Di JOMLAUNCH

10 Oktober 2015
Content Malaysia Pitching Centre, FINAS
Kuala Lumpur

Siang tadi berlangsungnya majlis JOMLAUNCH yang dianjurkan bersama oleh Persatuan Usahawan dan Industri ICT Bumiputera Malaysia (NEF) dan komuniti pembangun IT JOMWEB. Majlis telah berlangsung sepanjang hari dari pukul 9.00 pagi hingga 5.00 petang di Content Malaysia Pitching Centre, FINAS di KL Sentral.

JOMLAUNCH adalah sebuah majlis di mana pihak individu mahupun syarikat boleh menunjukkan projek dan hasil kerja dalam bidang ICT yang telah dibangunkan kepada umum. Majlis ini bertujuan untuk meraikan mereka yang terlibat dalam pembangunan ICT dan juga mengetengahkan bakat-bakat hebat tempatan dalam bidang ini. Penekanan diberikan kepada teknologi dan kaedah yang digunakan dalam pembangunan ICT dan bukannya aspek komersil sesebuah projek.

Oleh yang demikian, projek-projek yang dipertontonkan dibahagikan kepada empat kategori; 1) komersil 2) peribadi 3) sumber terbuka (open source) 4) komuniti.

17 buah projek ICT hasil rekacipta dan inovasi tempatan telah dipertontonkan kepada umum.

Di samping projek-projek yang dipertontonkan, majlis juga dihadiri oleh presiden NEF, Ashran Dato’ Ghazi yang memberi penerangan tentang NEF dan fungsi NEF dalam industri. Satu slot juga diperuntukkan untuk perkongsian pengalaman beberapa peserta program eStanford ke Silicon Valley, USA oleh MaGIC. Slot tersebut telah dikendalikan oleh Yusno Yunus dan Farid Nor dari Evenesis dan juga Aizah dari Mad Cat.

Majlis ini dijayakan hasil tajaan dan kerjasama sukarelawan dari JOMWEB dan NEF, NEF sendiri, Evenesis, Katsana, Content Malaysia Pitching Centre dan juga Pixaworks.

Berikut adalah projek-projek yang telah dipertontonkan kepada umum.

Continue reading NEF-JOMWEB Ketengahkan Kepakaran ICT Tempatan Melalui 17 Projek Di JOMLAUNCH

Membina Two-Factor Authentication (2FA) Dalam Sistem PHP Menggunakan Google Authenticator

google-authenticator3Kita biasa login ke sistem di web mengguna username dan password. Dan kalau kita menggunakan aplikasi perbankan, sebagai tambahan kita perlu menggunakan kod TAC yang hadir dalam telefon melalui SMS.

Kalau kita biasa, mungkin ada website lain yang kita gunakan juga meminta kod khas yang hanya boleh didapati daripada telefon kita.

Ini semua dipanggil Two-Factor Authentication atau 2FA. Saya baru-baru ini mengaktifkan ciri-ciri 2FA untuk mengakses panel Amazon Web Service (AWS) syarikat. Amazon menggunakan aplikasi Google Authenticator untuk ini. Setelah aplikasi dipasang di telefon, kita boleh membuat tetapan khas bersama dengan AWS supaya boleh menggunakan 2FA.

Sekarang, apabila perlu login ke AWS, saya perlu nyatakan username, password dan kod khas yang saya boleh dapati daripada aplikasi Google Authenticator di telefon.

Sebenarnya kita juga boleh membangunkan sistem dan menggunakan Google Authenticator untuk pengguna-pengguna sistem kita.

Aplikasi Mobail Google Authenticator

Google Authenticator adalah aplikasi mobail yang boleh dimuat-turun kepada telefon pintar iOS, Android dan Windows. Kita boleh dapati aplikasi ini dari pautan di bawah:

Android
https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2

iOS (iPhone dan iPad)
https://itunes.apple.com/my/app/google-authenticator/id388497605?mt=8

Windows Phone
http://www.windowsphone.com/en-us/store/app/authenticator/021dd79f-0598-e011-986b-78e7d1fa76f8

Dengan aplikasi ini, pertama sekali yang kita perlu lakukan bersama pengguna adalah menyelaraskan kekunci khas yang digunakan untuk menjana nombor rawak unuk login kelak.

Apabila kita mengaktifkan ciri 2FA dengan pengguna, apa yang kita lakukan adalah menjana satu kekunci rahsia yang khusus, yang kita kongsi hanya antara pengguna dan sistem kita. Pengguna akan menggunakan aplikasi Google Authenticator untuk menyimpan kekunci tersebut. Dan kita boleh, boleh menggunakan database atau fail. Setiap pengguna akan mempunyai kekunci rahsia yang berbeza.

Bagaimana Google Authenticator Berfungsi?

Menjana nombor rawak untuk 2FA. Saya tak pasti saudara-saudari mengetahui bagaimana nombor rawak dijana. Tetapi, secara amnya, fungsi nombor rawak di dalam komputer pasti menggunakan satu nombor atau data “seed”. Kekunci rahsia yang kita jana tadi adalah “seed” untuk menjana nombor rawak untuk 2FA.

Berasaskan masa dan kekunci rahsia (sebagai seed) tadi, ianya digunakan oleh kedua-dua sistem untuk menjana kod nombor rawak yang digunakan untuk login. Selagi mana kekunci rahsia sama dikongsi oleh kedua-dua aplikasi, nombor rawak yang sama dapat dijana. Inilah yang digunakan untuk mengesahkan identiti pengguna secara 2FA.

google-authenticator4Integrasi Google Authenticator dengan Sistem

Saya ada membangunkan aplikasi demo penggunaan Google Authenticator. Ianya boleh didapati di Github saya.

Aplikasi Demo Google Authenticator oleh Saya
https://github.com/kidino/PHP-Google-Authenticator

Saya perlu beri kredit kepada pembangun library khusus untuk Google Authenticator dengan PHP. Saya dapatinya daripada PHPGansta di sini.

Library Google Authenticator untuk PHP yang saya gunakan
https://github.com/PHPGangsta/GoogleAuthenticator

google-authenticator2

Mungkin elok juga saya nyatakan bahawa kod yang saya hasilkan hanya sekadar mencuba integrasi aplikasi mobile Google Authenticator dengan sistem berasaskan PHP.

Di dalam sistem sebenar, implementasinya mungkin lebih rumit.

  • Kita perlu beri kebebasan kepada pengguna untuk mengguna ataupun tidak menggunakan 2FA.
  • Perlu ada cara reset kembali login 2FA secara manual
  • Perlu ada cara untuk reset kembali login 2FA dalam keadaan mana pengguna kehilangan telefon atau rosak
  • Perlu kaedah menyimpan secret key pengguna dengan lebih selamat, di dalam database barangkali (contoh saya hanya menggunakan fail teks)

Selamat mencuba…

 

 

3 Teknologi Pembangunan Aplikasi Web Open Source Yang Anda (Mungkin) Tak Tahu

Apabila untuk pembangunan web, yang biasa kita baca, kita dengar, dan mungkin kita gunapakai adalah seperti PHP, Ruby, Python, C# dan ASP. Mungkin juga kita pernah dengar pasal bahasa pengaturcaraan baru seperti Go dan Dart.

Dari segi platform dan framework, mungkin kita pernah dengar atau guna Laravel, Codeigniter, CakePHP, Yii, Zend, Symfony. Atau mungkin .NET, Ruby on Rails (RoR) dan Django. Mungkin kita juga teruja dengan teknologi NodeJS dan juga Meteor.

Tetapi tiga platform pembangunan web ini mungkin anda belum pernah dengar. Dan sebenarnya bukan calang-calang teknologi ini. Setiap sesuatu ada pengikut setia mereka, aktif dibangunkan malah digunapakai dalam projek-projek yang hebat seperti membina SaaS, membina OS, membina IDE, aplikasi enterprise dan sebagainya.

Kalau kita pernah dengar pun daripada 3 projek ini, mungkin kita tidak menyangka yang ianya digunakan untuk pembangunan web. Maka di sini saya ingin kongsi 3 teknologi open source yang digunakan untuk pembangunan web yang mungkin jarang-jarang kita dengari:

Continue reading 3 Teknologi Pembangunan Aplikasi Web Open Source Yang Anda (Mungkin) Tak Tahu

Menulis Markdown Dengan Brackets Dan Extension Markdown Preview

Bila kita memulakan sebuah projek programming, lebih-lebih lagi yang untuk dikongsi secara open source, eloklah ianya disertakan dengan dokumen README.md.

Mungkin ramai yang kurang biasa dengan format markdown, atau pun fail .md. Ianya adalah satu format fail teks yang ringkas, untuk memudahkan penulisan dokumentasi projek programming. Sekiranya di Github, apabila projek kita mempunyai fail README.md, kandungan fail itu akan terus dijadikan pengenalan kepada projek.

Mungkin lebih mudah saya andaikan markdown ini seperti HTML. Jika HTML adalah hypertext markup language, dari inspirasi itu, lahirlah markdown, seperti sedikit ajukan dalam dunia web.

Markdown mempunyai fungsi-fungsi seperti HTML untuk saiz huruf, baris bawah, bold, bullet list dan lain-lain. Tetapi ianya tidaklah mempunyai fungsi yang banyak macam HTML terutamanya dari segi layout, warna dan sebagainya. Ianya diringkaskan agar penulisan dokumen markdown menjimatkan masa, dan pada masa yang sama, tetap kemas untuk dibaca.

Website Daring Fireball sering menjadi rujukan tentang Markdown.

Continue reading Menulis Markdown Dengan Brackets Dan Extension Markdown Preview

PHP DOS Launch: Satu Langkah Melancarkan Browser dan Webserver untuk Melihat Hasil Programming

Sebagai web programmer, web designer kita perlu melihat hasil kerja kita di browser. Dan banyak kali, kita perlukan webserver sekali. Saya menggunakan Windows. Dan biasanya kita ada XAMPP. Tapi kadang-kala, rasa banyak langkah juga nak lancarkan XAMPP dan Apache.

Tapi sekarang ni, PHP hadir bersama webserver. Kita boleh gunakan Command Line dan gunakan arahan:

php -S localhost:port

Port tu boleh guna apa-apa nombor. Tapi biasanya saya gunakan antara 1000 hingga 2000 sahaja. Folder di mana Command Line sedang berada, itulah akan menjadi webroot untuk localhost yang baru dilancarkan tadi.

Continue reading PHP DOS Launch: Satu Langkah Melancarkan Browser dan Webserver untuk Melihat Hasil Programming

Kemaskini Kod Git Push untuk Server AutoScaling di Amazon Web Service (AWS)

Sebelum ni saya menulis tentang menggunakan Git untuk menyuruh server mengemaskini aplikasi atau kod. Dengan hanya membuat push ke repo di server Git, server aplikasi juga akan mengemaskini dirinya dengan kod yang terkini.

AWS, Autoscaling dan ELB

aws-autoscaling

Saya banyak menggunakan server di Amazon Web Service (AWS). Antara ciri yang hebat di AWS adalah autoscaling. Dengan autoscaling, kita boleh membina sebuah load balancer dan meletakkan server-server di bawahnya. Maka, trafik yang diterima oleh website akan diagih-agihkan kepada server-server yang terdapat di bawah ELastic Load Balancer (ELB) ini. Biasanya server-server ini adalah serupa, mempunyai kod yang sama, setting yang sama dan lain-lain. Dengan autoscaling, kita boleh tetapkan beberapa peraturan bila dan keadaannya untuk AWS menambah atau mengurangkan server di bawah ELB ini.

Sebagai contoh, saya boleh tetapkan peraturan sebegini:
Continue reading Kemaskini Kod Git Push untuk Server AutoScaling di Amazon Web Service (AWS)

Malaysia’s OSS Heroes

Malaysia's OSS Heroes
Mior Muhammad Zaki, Redhuan D. Oon, Colin Charles, Syamil MJ, Azrul Rahim

I was at Malaysia Open Source Conference (MOSC.my) this year. Not for the whole conference though. Just to give a quick 45-minute (which concluded in 30) talk. The title of my talk is Malaysia’s OSS Heroes. OSS stands for Open Source Software by the way. I am going to show you my slides later on, but generally, I like sharing about the many cool people I know and about what they do and have done.

These people that I have on slides contributed a lot in terms of software and programming, and their OSS fans counterparts love them it.

So I gathered the five Malaysians that is big in OSS, put them in a series of slides, and let the MOSC.my people know. Oh, with the help of Ajif from KomikAjif.com, I also “hero them up” a bit.

Anyway, do check out the slides over at Slides.com.

By the way, Slides.com is awesome. It’s based on Reveal JS (gotta use open source for open source conference) and it has cool features for doing presentations like controlling the slides with your mobile phone.

Please bear in mind that this is not in any particular order. Also, I do not deny that there may be others also deserves to be called Malaysia’s OSS Heroes — I just don’t know them (yet). If you know more, do let me know. Comment here.

slides-front
Head over to slides.com for the presentation

10 Things I Learned About Katsana GPS, That I Did Not Know Before

katsana-pikom-skmm-3
The Katsana website. http://www.katsana.com

Last weekend, I was fortunate to be given some slots to manage during the PIKOM Fair, at the MCMC’s booth. I had eight slots and among that I invited to speak was friends from JOMWEB community.

I make sure that I have one slot reserved for Katsana GPS. Katsana is a product developed by Pixelated Sdn. Bhd. Their team comprises for fairly young dads I supposed. But  they have developed an interesting solution for end-user car GPS tracking.

So far I know that their lead developer, Mior Muhammad Zaki is a top-notch PHP programmer, a top Github user, top contributor to the Laravel framework and also the creator of the Orchestra Platform. I also know that Katsana is developed with Orchestra Platform. Katsana also won a spot in the first round of the Teraju’s SUPERB grant, which gave them an extra RM500,000 in grants.

And I also know… hmm… wait! That’s pretty much it. So during the talk by Syed Ahmad Fuqaha, who is the CEO of Katsana, also a really tech- and business-savvy guy, I made sure that I paid attention.

Continue reading 10 Things I Learned About Katsana GPS, That I Did Not Know Before