Aplikasi layanan api sederhana untuk menggunakan voucher dari pool. Ini untuk tujuan demo dan dibuat untuk menunjukkan keterampilan arsitektur & pemrograman.
Di bawah ini adalah poin-poin desain utama, dan cara penanganan & penerapannya.
Komposer digunakan untuk mengelola semua dependensi aplikasi. Semua paket/perpustakaan yang diperlukan dideklarasikan dalam file composer.json
. Dan dapat diinstal dengan menggunakan perintah composer install
.
Entri aplikasi diarahkan ke direktori public
, yang hanya menampung file index.php
dan juga dapat memiliki file aset yang dapat diakses secara publik. Selain itu, tidak ada kode atau file di luar folder ini yang dapat diakses secara langsung. Idenya adalah untuk melindungi semua file di luar direktori ini.
Semua permintaan dan cara menanganinya ditentukan di routes/api.php
.
Untuk berinteraksi dengan mySQL, kami menggunakan Illuminate Database alias "Eloquent". Hal ini memungkinkan kita untuk berinteraksi dengan database kita melalui Pemetaan Relasional Objek "ORM".
Untuk memigrasikan & menyemai database, kami telah menggunakan paket framework agnostic Phinx. Seiring berjalannya waktu, kode aplikasi berkembang dan database juga berkembang bersamanya. Untuk melacak perubahan kode, kami menggunakan alat pembuatan versi sumber seperti git. Dengan skrip migrasi kita juga dapat melacak perubahan database. Sangat membantu ketika bekerja dalam lingkungan tim. Saat rekan satu tim menarik perubahan Anda, jika mereka melihat skrip migrasi, mereka cukup menjalankannya dengan perintah sederhana untuk meningkatkan perubahan skema database lokal mereka.
Untuk mengelola dependensi kelas dan melakukan injeksi dependensi, kami menggunakan SlimFramwork Container
. Dengan ini kita dapat membalikkan kontrol dependensi dari aplikasi ke kelas sehingga terbentuk pola "Inversion of Control".
Untuk menangani pengaturan konfigurasi aplikasi, kami telah menggunakan Illuminate Config. Semua konfigurasi disimpan di direktori config
. Juga menggunakan Symfony Dotenv untuk memuat variabel yang ditentukan dalam file .env
, lalu mengaksesnya melalui fungsi getenv(). Hal ini berguna untuk memiliki pengaturan konfigurasi yang berbeda untuk setiap lingkungan yaitu pengembangan, staging, produksi.
Untuk memahami tentang apa yang terjadi dalam aplikasi kami, kami telah menggunakan perpustakaan Monolog yang menyediakan layanan logging kuat yang memungkinkan Anda mencatat pesan.
Untuk memvalidasi data permintaan HTTP masuk aplikasi Anda, Kami telah menggunakan Illuminate Validation, yang menyediakan berbagai aturan validasi yang kuat.
Untuk memberikan keluaran data respons API yang standar & konsisten, kami telah menggunakan League Fractal, sehingga kami dapat memiliki lapisan presentasi dan transformasi untuk data keluaran kami. Semua kelas transformasi disimpan di direktori app/Transformers
.
Saat penawaran khusus baru dibuat, kami tidak membuat voucher untuk semua penerima di sistem kami. Sebaliknya kami menggunakan HashIds untuk menghasilkan & memvalidasi voucher untuk setiap penerima. Kita dapat melakukan encode & decode dengan menggunakan kombinasi [{recipient_id}, {offer_id}]
. Itu selalu menghasilkan kode voucher persis 8 karakter yang juga dapat diperbarui di config/hashids.php
Untuk menguji layanan aplikasi kami, kami telah menggunakan Codeception, Out of the box memungkinkan kami untuk memiliki ketiga jenis pengujian yaitu pengujian unit, fungsional, dan penerimaan dalam kerangka terpadu. Dalam kasus kami, kami telah menguji unit objek bisnis inti di AppServices
, juga menulis tes penerimaan untuk memeriksa integrasi & fungsionalitas semua titik akhir API. Semua kasus uji, disimpan di direktori tests
. dan dapat dijalankan dengan perintah berikut:
$ php vendor/bin/codecept run --steps
Untuk mempertahankan standar pengkodean di seluruh tim, saya telah membuat file phpcs.xml
, yang berisi semua standar pengkodean. dan semua file kode dapat diperiksa sesuai dengan file ini dengan menjalankan perintah berikut:
$ php vendor/bin/phpcs
Persyaratan lingkungan pengembangan:
Menyiapkan lingkungan pengembangan Anda di mesin lokal Anda menggunakan skrip pengaturan (Untuk MAC/LINUX) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
./setup.sh
Pengaturan manual (Untuk Windows) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
cp .env.dev .env
docker-compose up -d
docker exec -it voucher-pool-php-fpm composer install
docker exec -it voucher-pool-mysql mysql -u root -pnewsletter2go -e " create database newsletter2go_testing; GRANT ALL PRIVILEGES ON *.* TO 'newsletter2go'@'%' IDENTIFIED BY 'newsletter2go'; " ;
docker exec -it voucher-pool-php-fpm php vendor/bin/phinx migrate
docker exec -it voucher-pool-php-fpm php vendor/bin/phinx seed:run
Sekarang Anda dapat mengakses aplikasi melalui http://localhost:8080.
Jalankan pengujian unit & pengujian penerimaan di wadah layanan PHP-FPM:
docker exec -it voucher-pool-php-fpm php vendor/bin/codecept run --steps
Anda dapat mengakses dokumentasi API publik di Tukang Pos. Untuk mengimpor dan menjalankan semua API, klik "Jalankan Di Tukang Pos" di bilah atas, setelah menginstal dan mengimpor Anda akan melihat koleksi baru sebagai "Newsletter2Go - Voucher API".