Showing posts with label web. Show all posts
Showing posts with label web. Show all posts

Wednesday, August 15, 2018

Berkenalan dengan Composer

Pada artikel saya sebelumnya tentang Membangun REST API menggunakan Slim, saya menggunakan suatu package & dependencies manager yang akan saya bahas di posting kali ini.

Beberapa tahun terakhir ini, konsep pemrograman di php mengalami perubahan yang cukup membuat banyak programmer beralih karena kemudahannya. Dengan adanya suatu dependencies manager yang populer akhir-akhir ini yaitu composer, konsep pemrograman di php jadi lebih terstruktur dan rapi.

Dengan composer dan autoload-nya serta namespace, kita bisa bebas mengakses file-file php tanpa harus ribet meng-include atau me-require semua file atau class yang kita butuhkan, autoload dari composer sudah melakukan semua itu out of the box. Sehingga OOP dalam php benar-benar nyamaan.

Kemampuan composer dalam hal dependencies sangat membantu programmer saat menggunakan suatu paket tertentu dimana paket tersebut membutuhkan paket-paket lainnya juga. Secara otomatis composer akan mengatur dan menyesuaikan ketergantungan suatu paket dengan paket lainnya juga.

Paket yang dapat digunakan bisa diakses di https://packagist.org. Sampai saat artikel ini ditulis, jumlah paket yang sudah terdaftar adalah 191, 491.

Berikut ini beberapa kendala yang bisa diselesaikan menggunakan composer:
  1. Mengatasi masalah denpendencies PHP package,
  2. Mengatasi masalah include file dengan autoload,
  3. Mengatasi masalah update paket.

Instalasi Composer

Composer membutuhkan PHP dengan versi 5.3.2+. Berikut cara instalasi di Sistem Operasi Linux & Mac:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Sedangkan untuk pengguna Windows dapat melakukan instalasi dengan download file instaler dari alamat di https://getcomposer.org/Composer-Setup.exe.

Setelah instalasi selesai, anda bisa cek dengan menjalankan perintah berikut di command atau terminal:
composer -V

Penggunaan

Misalkan kita ingin menampilkan tanggal dengan berbagai macam format, disini sudah terdapat paket yang sering digunakan yaitu Carbon. Kita bisa mengetahui nama paket dengan melakukan pencarian pada web https://packagist.org. Setelah menemukan nama paketnya (contohnya disini: nesbot/carbon), kita jalankan perintah berikut di command atau terminal untuk mennggunakannya:
composer require nesbot/carbon
Maka composer akan otomatis mendownload paket tersebut dan membuat file baru composer.json, composer.lock dan folder vendor.

Perhatikan file composer yang otomatis ter-create tadi.
{
    "require": {
        "nesbot/carbon": "^1.33"
    }
}
Disitu terdapat informasi dalam format json dimana kita menggunakan paket nesbot/carbon dengan versi 1.33, jika ingin menambahkan paket yang lain, kita tinggal edit file tersebut dan jalankan perintah composer update.

Selanjutnya kita bisa buat satu file php, misal kita simpan dengan nama index.php. Pada baris awal kita tambahkan fungsi require autoload.php yang otomatis sudah menyertakan semua paket yang kita butuhkan. Kemudian kita bisa gunakan fungsi use untuk instansiasi class nya. Detail code di index.php seperti berikut ini:
<?php require 'vendor/autoload.php';

use Carbon\Carbon;

$date = Carbon::createFromDate(1990, 11, 19);
$now  = Carbon::now();

$str = "Usia anda saat ini %y tahun, %m bulan dan %d hari\n";
printf($date->diff($now)->format($str));
Hasil dari code diatas akan menampilkan usia yang dihitung dari tanggal pada variable date dengan selisih hari ini yang ditampilkan dalam format tahun, bulan dan hari. Lebih detail fitur-fitur yang ada di paket carbon silahkan pelajari pada dokumentasinya di tautan https://carbon.nesbot.com/docs/.

Menambahkan paket baru

Untuk menambah paket yang lainnya, silahkan edit file composer.json dan tambahkan nama paket yang akan digunakan. Contohnya akan ditambahkan paket untuk membuat qr-code dengan nama endroid/qr-code, berikut code di file composer.json setelah diupdate:
{
    "require": {
        "nesbot/carbon": "^1.33",
        "endroid/qr-code": "^3.2"
    }
}
Kemudian jalankan perintah berikut di command atau terminal:
composer update
Setelah proses download dan instalasi secara otomatis dari composer sukses, maka paket tersebut siap digunakan. Untuk menampilkan qr-code menggunakan paket tersebut sama seperti contoh sebelumnya, disini anda tidak perlu lagi meng-include / me-require nama paket yang baru, karena di fungsi require vendor sudah mengakomodasi semua paket yang terdownload melalui composer. Anda tinggal menginstansiasi saja nama class nya menjadi object di code php.

Berikut contoh code untuk menampilkan qr-code yang berisi suatu text "Hello World":
<?php require 'vendor/autoload.php';

use Endroid\QrCode\QrCode;

$qrCode = new QrCode('Hello World');

header('Content-Type: '.$qrCode->getContentType());
echo $qrCode->writeString();
Kesimpulan dari artikel ini, silahkan segera beralih menggunakan composer bagi programmer php yang belum, karena seperti dituliskan diatas ada 3 kemudahan yang didapatkan saat anda mulai menggunakannya.

Yang penting segera dicoba degh 😉

Tuesday, August 14, 2018

Membangun REST API menggunakan Framework Slim PHP

Pada salah satu project penelitian saya tentang sinkronisasi database, dimana terdapat 2 aplikasi yaitu: rest api dan android, saya berkesempatan menggunakan Framework Slim PHP untuk membangun aplikasi rest api. 

Ternyata Slim menawarkan kemudahan dalam membangun rest api. Detailnya bisa langsung menuju ke official web dari Slim di tautan berikut: https://www.slimframework.com/

Untuk memulai menggunakan Slim cukup mudah, silahkan dari command atau terminal ketikan perintah berikut ini:
composer require slim/slim "^3.0"
Jika komputer anda belum terinstal composer, silahkan bisa download dari tautan berikut ini.

Setelah anda jalankan perintah composer tersebut, maka akan akan ter-create folder /vendor dan file composer.json dan composer.lock.

Selanjutnya kita buat 1 file index.php dengin menambahkan code seperti dibawah ini:
<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';
$app = new \Slim\App();

$app->get('/', function (Request $req,  Response $res, $args = []) {
    return $res->getBody()->write('Hello Slim Framework');
});

$app->run();
Anda bisa cek hasilnya melalui browser ke alamat project yang anda buat, atau bisa juga menjalankan menggunakan internal web server dari php dengan menjalankan perintah berikut ini melalui command atau terminal pada path project anda:
php -S localhost:8090
Dan akses melalui browser di alamat http://localhost:8090

Untuk mendapatkan output dalam format json, bisa anda ubah pada baris ke 10 dengan code berikut ini:
$data = array("hello" => "slim framework", "version" => "3.10");
return $res->withJson($data);
Maka akan diperoleh hasil seperti berikut ini:
{"hello":"slim framework","version":"3.10"}
Untuk menambahkan end-point yang lain pada rest api anda tinggal menambahkan code seperti pada baris-9 sampai baris-11 pada contoh code sebelumnya. Misalkan berikut ini end-point yang akan membaca parameter dari alamat web
$app->get('/name/{you}', function (Request $req,  Response $res, $args = []) {
    $name = $args['you'];
    $data = array("hello" => $name, "message" => "have a nice day");
    return $res->withJson($data);
});
Dan anda bisa melihat hasilnya dengan akses ke alamat http://localhost:8090/name/arif laksito, maka akan terlihat hasilnya di halaman browser. Perhatian, untuk web server Apache atau Nginx anda perlu menambahkan file .htaccess pada project anda supaya alamat web tersebut dapat dikenali. Berikut ini script dari file .htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
Selain method GET seperti pada contoh diatas, anda bisa juga menggunakan method yang lainnya seperti POST, PUT, DELETE. Begitulah cerita saya dalam menggunakan Slim framework, lebih detail lagi anda bisa menuju ke halaman dokumentasi/manual dari Slim framework yang sudah cukup lengkap di https://www.slimframework.com/docs/.

Untuk contoh file project yang menggunakan Slim bisa anda dapatkan/clone di github saya dengan alamat https://github.com/ariflaksito/web-data-sync. Pilih di branch basic, karena branch master sudah terupdate fitur menggunakan Eloquent dan Middleware untuk validasi token. InshaAllah akan saya share juga artikel tentang penggunaan Eloquent dan Middleware tersebut.

Semoga bermanfaat, jangan lupa untuk dicoba yaa