Saturday, June 23, 2018

Golang Rest API Menggunakan GIN Framework

Hello Kawan - kawan sekalian, Kali ini saya akan membuat Tulisan tentang Golang Rest API menggunakan Framerowk GIN.
Kenapa Saya Menulis ini karena dapet tantangan dari Mas Yuki untuk membuat presentasi tentang golang, nah saya coba deh untuk menulis nya hehehehe....

mungkin gak usah di jelaskan ya golang itu apa karena bisa di lihat di LINK_INI yang telah di tulis oleh mas yuki sebelumnya sudah jelas dan gamblang tentang go.

Lalu Apa itu GIN adalah salah satu framework yang di buat dengan bahasa go . sudah fiture - fiture yang ada di framework ini seperti koneksi database,json formater dan banyak lagi. Untuk lebih lanjutnya bisa di buka di LINK_INI.

Langsung Saja saya tunjukan langkah - langkah membuat Golang Rest API menggunakan GIN framework, ini juga hasil berguru saya dan cari - cari referensi
Sebelumnya Untuk Koding GO harus mengatur gopath dan goroot nya dulu untuk itu bisa di lihat di tutorial LINK_INI

Setelah Sudah di setting saatnya untuk beraksi.

Pertama Ketikan :


perintah di atas adakah untuk memclone framework gin , gorm dan go driver sql
owh iya di sini untuk ORM nya saya memakai GORM.

Setelah itu Kita Buat koneksi Ke database seperti berikut:

Di atas adalah kodingan untuk mengakses database menggunakan gorm untuk mengakses database nya bisa di sesuaikan nantinya untuk user ,password dan nama database nya.

Selanjutnya Kita akan buat model nya untuk kita olah datanya. kalau di golang namanya adalah struct
kodingannya sebagai berikut:


di dalam model atau struch ini kita untuk membuat model itu sebagai Object table kita tandai dengan gorm.Model . Di dalam struct juga kita dapat langsung membuat json yang nantinya akan kita tampilkan nantinya dengan cara  `json:"nama"` .

Selanjutnya kita akan buat function untuk Create nya. Kodingannya sebagai berikut :


function di atas adalah function untuk cretae data ke database menggunkan gin.Context yang digunakan untuk memanggil fungsi gin. Untuk binding data yang akan di masukan menggunakan c.Bind(&std) dengan pertama buat variable data atau object yang akan di masukan seperti contoh di atas adalah var std transformedStudent adalah objet yang saya gunakan untuk masukan. fungsi db.Create(&model) untuk menyimpan ke database berdasarkan data yang di masukan dari object. fungsi dari c.JSON(http.StatusOK, gin.H{"message": http.StatusOK, "result": model}) adalah untuk mengeluarkan response json dari function yang di buat.

Selajutnya kita membuat function get All berikut kodinganya:

fungsi dari adalah db.Find(&model) untuk mencari semua data yang ada di dalam database, sebelumnya kita definisikan dulu modelnya menjadi sebuah listnya dengan cara seperti berikut var model [] student . Untuk Flownya codingan di atas adalah mencari semua data yang di dalam database lalu di buat object model list setelah itu di transfer ke bentuk object view yang akan di tampilkan.

Selanjutnya kita membuat function get Detail berikut kodinganya:

Cara Untuk Parsing id di atas menggunakan fungsi modelID := c.Param("id") untuk mencari data sesuai dengan field yang di cari di sini saya mencari id yang di masukan . Dan fungsi  untuk mencari data sesuai dengan param yang di inginkan dari fungsi di atas.

Selanjutnya kita membuat function update berikut kodinganya :


Untuk Update di atas ada fungsi db.Model(&model).Update(transferVoToModel(vo)) untuk mengupdate data ke dalam database.

Selanjutnya kita buat function delete berikut kodinganya:

Untuk Delete di atas ada fungsi db.Delete(model) untuk mendelete data yang ada di dalam database berdasarkan id yang di kirimkan.

Selanjutnya kita buat routernya untuk mengases semua function melalui REST HTTP berikut kodinganya:

Router di atas di gunakan untuk client mengakses function yang ada di dalam go dengan menggunakan REST HTTP. fungsi router := gin.Default() di gunakan untuk mendefinisikan variable router sebagai router gin default. fungsi v1 := router.Group("/api/student") digunakan untuk membuat nama url . fungsi router.Run(":20001") digunakan untuk membuat go berjalan di port yang di inginkan di sini saya menggunakan port 20001.

Demikian lah Tutorial membuat REST API Golang mengguanakan GIN framework, untuk kodingan versi full nya ada di LINK

Semoga bermanfaat untuk semuanya..

Sumber:
https://medium.com/@thedevsaddam/build-restful-api-service-in-golang-using-gin-gonic-framework-85b1a6e176f3

https://github.com/gin-gonic/gin

https://github.com/jinzhu/gorm

https://www.youtube.com/watch?v=Mq6qk2xPJsc&t=2039s

REST API tiruan dengan json-server

Hallo bloger yang "Ounchhh",
pada kesempatan kali ini saya akan membagikan sesuatu yang "mainstream" dikalangan developer khususnya back-end ataupun front-end, ya semoga bermanfaat guys...
Singkat cerita saya membutuhkan sebuah URL yang akan mengembalikan hasil json ketika saya tembak pakai Postman untuk keperluan pengujian service, jurus andalan pun dikeluarkan(googling) alhasil menemukan sebuah artikel dari om Roy Agasthyan tentang cara membuat rest-api tiruan dengan json-server(kalau penasaran bisa dilihat link di bawah ya)

Tanpa Ba bi bu, kita langsung ke proses nya guysss,
  • Install nodeJS (npm)
  • Setelah itu kita install package-nya dengan npm install -g json-server
  • Buat file dummy info.json
  • Di direktori yang sama, kita jalankan json-server info.json (lihat gambar 1)
  • Selamat Rest API tiruan sudah jalan dan siap digunakan
Gambar 1. menjalankan json-server

Gambar 2. Contoh info.json
 Untuk melihat hasil kita tinggal menembak link yang ada digambar 1 dengan postman
Gambar 3. Contoh method GET
Gambar 4. Contoh method POST

Gambar 5. Hasil POST
Untuk method DELETE tinggal menambahkan /id_yang_akan_didelete, tetapi untuk yang update metode yang digunakan adalah PATCH dengan tambahan /id_yang_akan_diupdate. Jika ingin menambahkan URL tinggal edit file info.json, selain itu juga tersedia log di terminal seperti digambar 6.
Gambar 6. Contoh log
Yah, sekian dulu guys, untuk informasi yang lebih detail bisa mengunjungi ini (sangat lengkap) dan terima kasih untuk artikel Roy Agasthyan sebagai pemicu penulis. Sebagai bahan pertimbahan penggunaan REST-API tiruan bisa menggunakan mockAPI.

terima kasih


Friday, June 22, 2018

Road to World Cup

Pada blog bulan ini akan sharing project yang terjadi bulan ini, Tebak Skor


Semua dimulai saat dari lowongan project yang berasal dari suatu grup angkatan. Sebuah perusahaan mencari software house alternatif untuk mengerjakan gamification tebak skor Piala Dunia 2018. Hari itu kick-off piala dunia pertama kurang dari 1 bulan.

Dalam kondisi biasa jelas proyek ini tidak akan di follow up lebih lanjut, available resource yang belum ada dan fase development yang hanya 2 minggu tidak baik untuk kesehatan developer. Tetapi menimbang permintaan ini datang dari salah satu dari unicorn Indonesia dan traffic user yang pasti tinggi... Bring it on.

Tech Lead langsung diturunkan untuk mengerjakan proyek prioritas ini, padahal tech lead sendiri memegang minimal 2 proyek di tangan. Kemampuan tech lead diuji dengan mempertaruhkan nama baik Nostra.

Komunikasi adalah hal pertama yang penting. Sharing masalah, pengalaman, solusi, dan ide yang ditemukan membuat segalanya lancar. Komunikasi memberi berbagai perspektif berbeda dari sini desain, front end, back end, database dan devops. Masalah dapat diselesaikan lebih cepat, lebih baik dan dengan beberapa pilihan solusi.

Saling percaya satu sama lain bahwa tugas yang diberikan pasti selesai tepat waktu, dan rasa tanggung jawab bahwa ada orang lain yang menunggu selesainya tugas kita. Tim bagaikan berkomunikasi secara telepati dan dapat bergerak dengan tempo yang tinggi.

Inisiatif untuk mengambil tugas dan melengkapi kekurangan tim membawa dampak yang besar dalam selesainya proyek ini. Terkadang ada yang masih sibuk, terkadang ada bagian yang belum punya pengalaman. Di level tech lead pun tetap saling belajar dan tidak menutup diri untuk mencoba hal hal baru. Setiap orang punya 'kelemahan' dan punya 'kelebihan' dan 'kelemahan' seseorang ditutupi oleh 'kelebihan' orang lain membuat satu tim yang solid dan tidak bercelah.

Pada akhirnya, aplikasi selesai tepat waktu, dites dengan lancar, dan berjalan aman hingga saat ini
Semoga valuenya juga dapat ditularkan ke proyek lain. Keep Coding

Sunday, May 27, 2018

Mengganti Banner Spring-Boot

Pada blog kali ini bakal membahas hal yang ga penting dan iseng aja, karena kerjaan lumayan sibuk
Menunggu back end start adalah hal yang cukup membosankan. Menunggu 15 detik sampai 2 menit sampai run selesai. Kita bisa membuat start ini lebih menarik dengan mengganti banner spring boot

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.1.RELEASE) 

Ini tampilan standar yang selalu kita lihat. Dengan membuat file banner.txt di dalam folder src/main/resource dengan kode

maka akan menjadi


Spring boot juga bisa menampilkan banner dalam bentuk gambar dalam format JPG dan PNG dengan me rename menjadi banner.jpg atau banner.png



Bahkan Spring Boot 2 bisa menampilkan GIF dalam terminal, tapi tidak disarankan karena waktu run akan menjadi lama karena harus mengunggu GIF selesai


Sekian, Happy Code

Saturday, April 14, 2018

Guide Line Database

Pada blog kali ini, bakal sharing session soal hal fundamental, yaitu database. Dari pengalaman, urusan database kebanyakan akan dihandle oleh back end, dari membuat tabel, membuat data initial, manipulasi data, dll. Padahal persoalan database kadang butuh handling sendiri, back end dan database duo yang saling melengkapi. Sendok dan garpu, piring dan gelas, back end dan database

Kebanyakan kita memberikan semua proses logika di bagian back end, sedangkan database hanya sebagai tempat penyimpanan. Untuk proses yang sederhana mungkin tidak akan jadi masalah, namun untuk yang sangat kompleks back end memiliki keterbatasan dalam waktu pemrosesan. Dari sisi lain, database juga memiliki keterbatasan lain, yaitu tidak dapat dilakukan unit testing untuk SQL dan maintain antar environment yang cukup merepotkan

Jadi kapan proses logika dibebankan di database ?
Berikut sedikit kasus nya

Report
Report di sini adalah kesimpulan dari sekumpulan data yang membentuk suatu pola. Karena biasanya membutuhkan banyak relasi tabel, report lebih baik dimaintain di database dalam bentuk view, atau jika perlu lebih cepat lagi juga dapat membuat function yang memberikan return bentuk tabel walaupun membuat function akan lebih sulit dibuat

Sinkronisasi Data
Dalam beberapa kasus, data yang kita butuhkan berasal dari sistem yang sudah ada, kalau kasus seperti ini ada beberapa pilihan sesuai kebutuhan
Apakah data ini masih di database yang sama ? Jika tidak, maka harus dihandle oleh back end
Apakah data ini sering dipakai ? Jika tidak, maka gunakan view saja. Jika sering, buat tabel bayangan nya dengan kolom seminimal mungkin dan buat prosedur sinkronisasi nya

Manipulasi Data Masif
Manipulasi data adalah perubahan data seperti insert, update, delete. Untuk jumlah data di bawah 20 bisa mengandalkan back end. Untuk jumlah data di atas 50 gunakan procedure atau function dari database. Perbedaan waktu antara proses back end dan proses database bisa berbeda ratusan kali lipat

Data Kompleks atau Loading Lama
Ada kalanya data yang ditampilkan berhubungan dengan banyak tabel, dan membuat kode di back end menjadi rumit dan panjang, yang tentunya juga membuat loading data menjadi lama. Jika proses return berjalan lebih dari 15 detik, maka itu pertanda back end tidak bisa menghandle proses ini. Dibutuhkan proses di database seperti pada report, yaitu dengan view, atau jika perlu lebih cepat dengan function. Penambahan index juga akan sangat membantu.

SQL bagi sebagian orang memang cukup sulit, dan jarang didalami. Butuh data yang banyak sekaligus variatif dan juga kasus-kasus baru untuk membuat query rumit sesuai proses bisnis. Jika ditemukan, jadikan lah sebagai kesempatan belajar. Tanya lah kepada yang berpengalaman jika mengalami kesulitan