Introduction
Akhir-akhir ini kita sering mendengar istilah microservice sebagai sebuah istilah teknis di arsitektur sistem. Microservice adalah suatu konsep arsitektur yang memecah-mecah aplikasi berdasarkan fungsinya. Microservice merupakan kebalikan dari konsep monolitik, suatu konsep aplikasi terpadu yang semua servicenya menjadi satu dalam satu aplikasi.
Konsep microservice memungkinkan masing-masing aplikasi didevelop dengan teknologi yang berbeda, dengan infrastruktur yang berbeda, dan dengan tim pengembang yang berbeda pula. Dengan konsep ini, aplikasi dapat dikembangkan secara efektif tanpa saling mengganggu (ketergantungan) antara tim satu dengan tim lainnya. Demikian pula saat diimplementasikan, aplikasi dapat berjalan dengan efisien walaupun saat terjadi lonjakan pengunjung yang begitu besar.
Untuk berkomunikasi antara satu aplikasi dengan aplikasi lainnya, dibutuhkan suatu service web yang lebih dikenal dengan istilah API (Application Programming Interface). API bisa didevelop dengan berbagai macam bahasa pemrograman, seperti PHP, Node JS, Golang dan lain-lain.
Dalam buku ini, kita akan mendevelop API dengan bahasa pemrograman golang selangkah demi selangkah namun tetap mengacu pada standard aplikasi enterprise, meliputi kemudahan konfigurasi, penggunaan arsitektur MVC, keamanan dan lain-lain. Sampai saat ini, berdasarkan informasi dari https://blog.golang.org, pemanfaatan golang paling banyak masih diperuntukkan dalam pembuatan API.
Bahasa golang dipilih karena merupakan bahasa pemrograman yang sederhana, handal, dan efisien. Golang atau Go merupakan bahasa yang diciptakan oleh tiga karyawan Google yaitu Robert Griesemer, Rob Pike, dan Ken Thompson. Lahir dari lingkungan Google, membuat bisa berkembang dengan cepat.
Biarpun merupakan bahasa pemrograman yang relatif baru, Golang berkembang dengan baik dan stabil. Saat ini Golang banyak digunakan oleh perusahaan perusahaan besar, termasuk Google. Bisa jadi endorsement dari Google ini yang membuat Golang bisa lebih cepat diterima di kalangan programmer.
Mengapa Golang
Ada banyak alasan untuk memilih golang, ini adalah beberapa alasan kenapa memilih Golang.
Cepat
Performance Golang sangat cepat. Golang mempunyai performance yang baik karena merupakan compiler. Ini menyebabkan Golang jauh lebih cepat jika dibanding dengan bahasa PHP, Python atau Ruby yang bersifat interpreter. Hasil akhir dari Go adalah sebuah file binary yang bisa dieksekusi langsung oleh komputer tanpa memerlukan ketergantungan terhadap aplikasi yang lain. Go juga menawarkan proses kompilasi yang sangat cepat. Bahasa pemrogramn Go sangat disiplin, setiap variabel dan import yang diset harus digunakan. Jika tidak, maka proses kompilasi akan error.
Konkurensi
Tidak sekedar multi-threading, Go mendukung konkurensi. Bahasa tingkat tinggi seperti Java atau Python mempunyai fitur multi-threading. Namun konsep ini muncul pada saat tahun '90-an dimana teknologi processor masih single-core, sehingga konsep multi-threading dijalankan secara bersamaan melalui serangkaian proses penguncian threading, race conditions dan deadlock. Sehingga setiap satu thread yang dibuat akan memakan memory cukup banyak (sekitar 1MB) sehingga semakin banyak thread yang dibuat maka akan semakin boros memory.
Go lahir dalam lingkungan teknologi processor multi core, sehingga konsep yang ditawarkan adalah dengan mengksploitasi banyaknya core dalam processor. Alih-alih menggunakan thread, Go mengenalkan konsep routine dengan Go Routine. Masing-masing rutin dijalankan secara independen. Seberapapun banyaknya routine yang dijalankan, hanya menghabiskan 2KB memory. Selebihnya penggunaan memory hanya diperlukan jika memang kode yang dijalankan dalam rutin membutuhkan alokasi memory.
Kode Go mudah dipelajari dan dimaintenance
Ini sebenarnya relatif. Tapi harus diakui dokumentasi golang sangat bagus. Tur golang sangat rapi, terstruktur, mudah dipelajari dan bisa langsung live coding. Golang tidak mengenal OOP sehingga programmer tidak dipusingkan dengan class, pewarisan, dan konstruktor. Golang tidak mengenal anotation, dan tidak ada exception. Setiap statement juga tidak perlu ditutup dengan semikolon (titik koma). Golang merupakan bahasa pemrograman tipe strong, dimana semua elemen di Go harus dideklarasikan tipe datanya. Ini mengharuskan programmer untuk disiplin karena Go juga tidak akan menolerir apabila sebuah variable atau package didefinisikan tapi tidak pernah digunakan. Hal ini membuat Go jadi lebih mudah dipelajari, penulisan kode lebih rapi, dan mudah dimaintenance.
Dibackup Google dan Komunitas
Go lahir dari lingkungan Google untuk menjawab tantangan sistem dan arsitektur Google yang rumit. Go juga sudah digunakan oleh banyak perusahaan besar seperti Adobe, BBC, IBM, Intel, Dropbox, CloudFlare, Docker dan lain-lain. Jika perusahaan perusahaan besar bisa mempercayakan sistem mereka dibangun dengan Go, tentu aplikasi yang kita buat pasti bisa didukung oleh Go. Komunitas Go atau yang biasa disebut dengan gopher makin banyak jumlahnya. Komunitas Golang di Jakarta juga tergolong komunitas yang aktif melakukan meet up.
Buku ini untuk Siapa?
Buku ini ditujukan untuk programmer golang pemula, namun buku ini tidak membahas dasar pemrograman golang. Jika Anda programer golang pemula yang ingin mengeksplorasi pemakaian golang dalam project pembuatan API yang riil, buku ini cocok untuk Anda. Untuk membaca buku ini, diharapkan Anda sudah bisa menginstall golang dan editornya, sudah memahami logika pemrograman seperti variabel, pengkondisian, perulangan dan lain-lain. Juga sudah selesai mempelajari dasar-dasar pemrograman golang. Jika Anda belum memahami, silahkan pelajari dulu tur golang di https://tour.golang.org. Untuk instalasi golang bisa dipelajari di https://golang.org/doc/install. Untuk text editor yang memudahkan penulisan golang bisa menggunakan GoLand, Atom + go-plus, sublimetext 3 + GoSUblime, Brackets, Netbeans, Visual Studio Code dan lain-lain.
Ruang Lingkup Pembahasan
Buku ini fokus membahas pembuatan ReST API dengan segala pernak perniknya. Bab pertama membahas kode ReST API sederhana meliputi routing, menampilkan list data [GET index], menambah data [POST data], dan menampilkan data berdasarkan ID data [GET data]. Pada bab ini data disimpan di dalam memori, sehingga jika aplikasi dimatikan data yang sudah ditambah akan hilang.
Bab kedua membahas penggunaan konfigurasi file menggunakan viper. Kode akan membaca file konfigurasi berupa json. Implementasi konfigurasi yang dicontohkan adalah konfigurasi alamat port server.
Bab ketiga akan membahas MVC (Model-View-Controller). Menunjukkan langkah demi langkah membuat aplikasi yang clean dengan menerapkan arsitektur MVC dalam golang. Selain pemisahan dalam layer model, view dan controller, juga ditambahkan package repository dan library agar kode aplikasi menjadi lebih mudah dimaintenance.
Bab keempat akan membahas koneksi database menggunakan MySql. Bab ini tidak membahas koneksi database lainnya. MySql dipilih semata karena untuk mengantisipasi jika pembaca buku ini berlatar belakang programmer web yang jauh lebih familiar dengan database MySql.
Bab kelima membahas Auth Token. Menunjukkan langkah demi langkah membuat otentifikasi API menggunakan jwt-token. Pemilihan jwt-token semata berdasarkan kesederhanaan dalam penggunaan-nya.
Bab keenam membahas HTTP Code. Menunjukkan penggunaan HTTP Code di golang, untuk menyediakan informasi yang clear pada setiap request yang masuk.
Bab ketujuh membahas ORM in Golang. Implementasi ORM menggunakan Gorm.
Bab kedelapan Caching. Menunjukkan pemanfaatan caching untuk mempercepat load aplikasi. Pembahasan dibatasi hanya membahas penggunaan redis sebagai Engine cache yang dipilih.
Bab kesembilan membahas ACL (Access Controller List). Pembahasan meliputi pembuatan modul list controller, modul group of role dan set pemberian akses terhadap role group.
Bab kesepuluh membahas Apidoc. Menunjukkan pembuatan dokumentasi API menggunakan Swagger.
Bab apendix membahas konkuerensi, utamanya implementasi go routine. Juga membahas implementasi https di golang, instalasi aplikasi di server, serta membuat service aplikasi di server linux.
Downloading source code
Seluruh source code yang dibahas di buku ini disediakan secara terbuka untuk didownload di github, namun penulis menyarankan sebaiknya Anda mengetik sendiri secara langsung setiap pembahasan demi pembahasan agar terbiasa dan bisa lebih memahami sintaks penulisan golang. Namun jika Anda hanya ingin membaca dan memahami source code-nya, silahkan download melalui https://github.com/jacky-htg/api-go . Anda harus mempunyai akun github terlebih dahulu.
Pertanyaan, Saran dan Masukan
Anda bisa memberikan masukan atau kritik kepada penulis agar pembahasan buku ini bisa semakin baik. Untuk pertanyaan, saran, atau kritik bisa disampaikan melalui linkedin maupun website penulis.