Membangun RESTful API dengan Golang dan Mongodb

Subscribe Dengan Account Google Untuk Membaca Artikel Tanpa Iklan
Membangun RESTful API dengan Golang dan Mongodb

API adalah singkatan dari Application Programming Interface. Merupakan suatu “penghubung” yang memungkinkan suatu aplikasi untuk berinteraksi dengan aplikasi lainnya dan berbagi data. RESTful API itu merupakan salah satu model implementasi dari web service. RESTful API merupakan implementasi dari API

Untuk mengikuti tutorial ini pastikan kamu sudah memiliki pengetahuan tentang bahasa pemrograman Go dan pengetahuan tentang database MongoDb

kali ini kita akan membuat Rest API dengan sumber data dari database mongodb data simulasi ini terinpirasi dari situs ini. url endpoint yang akan kita gunakan sebagai beriikut :


  • /trobosqua

  • /trobosqua/category/{category}

  • /trobosqua/id/{id}


perhatikan struktur data di bawah ini :

[{
"category": "andalan-air-tawar",
"title": " Perlunya Segmentasi Lele ",
"image_url": "http://www.trobosaqua.com/thumbnail/b_10618.jpeg",
"summary_content": " Untuk menjalankan usaha budidaya, dapat dibayangkan bahwa untuk budidaya membutuhkan lahan yang sangat luas dan jauh dari permukiman penduduk ",
"content": "['<p style=\"font-family: Helvetica, sans-serif; font-size: 17px;\"></p>', '<p style=\"text-align: justify;\"><strong>Pembudidaya perputaran uangnya cepat, serta tidak perlu waktu lama sehingga jenuh dalam melakukan proses budidaya</strong></p>', '<p style=\"text-align: justify;\"><br><br>Untuk menjalankan usaha budidaya, dapat dibayangkan bahwa untuk budidaya membutuhkan lahan yang sangat luas dan jauh dari permukiman penduduk. Namun, berbeda dengan konsep usaha budidaya lele yang dijalankan kelompok budidaya ikan (Pokdakan) Mina Srikandi. “Memanfaatkan halaman rumah serta fasilitas umum (Fasum) dan fasilitas sosial (Fasos) yang terbengkalai, dapat menjadi pemasukan bagi warga sendiri, warga setempat maupun pengurus lingkungan,” ujar Andi Sudirman, Ketua kelompok Mina Srikandi yang berlokasi di Kecamatan Mustika Jaya, Kota Bekasi-Jawa Barat.</p>', '<p style=\"text-align: justify;\"><br>Tidak itu saja, pria yang akrab disapa Andi ini melanjutkan, proses budidaya yang dijalankan mengedepankan segmentasi usaha. “Mina Srikandi melakukan segmentasi atau pengelompokan jenis usaha. Dan konsep ini dibentuk agar para pembudidaya memiliki perputaran uang yang cepat. Yakni, dalam satu bulan bisa panen satu kali, bahkan lebih. Selain itu, pembudidaya tidak perlu waktu lama yang menjenuhkan dalam berbudidaya.,” tuturnya.</p>', '<p style=\"text-align: justify;\"><br><br><strong>Segmentasi Usaha</strong><br>Andi menambahkan, ada beberapa segmentasi yang dibentuk. Yang pertama adalah proses pembenihan dengan menggunakan induk lele berkualitas yang berasal dari Balai Riset Pemuliaan Ikan (BRPI) Sukamandi, Kabupaten Subang, Provinsi Jawa Barat (Jabar). Alasannya, dengan menggunakan indukan berkualitas ditambah dengan SOP yang sudah dibuat akan menghasilkan benih yang berkualitas, sehingga mendukung.</p>', '<p style=\"text-align: justify;\"><br>Makanya, tambah Andi, dari indukan lele sudah diberikan asupan nutrisi khusus demi menghasilkan benih yang unggul. “Sebenarnya budidaya yang kita jalankan sangat umum, namun kita prioritaskan benih yang berkualitas. Maka kita terapkan Standar Operasional Prosedur (SOP) khusus sehingga berdampak pada proses segmentasi selanjutnya. Karena benih akan mempengaruhi proses budidaya lele segmen pembesaran,” terangnya pada saat ditemui TROBOS Aqua di lokasi budidayanya.</p>', '<p style=\"text-align: justify;\"><br>Benih yang diproduksi dari anggota kelompok akan didistribusikan kembali ke anggota kelompok yang melakukan proses pendederan. Imbuh Andi, apabila benih melebihi kebutuhan anggota kelompok, baru dijual keluar kelompok. Tujuannya, agar anggota tidak mengambil benih sembarangan yang belum jelas kualitas serta asal-usul benih. “Jika sembarangan mengambil benih dari luar yang tidak tahu asal-usulnya akan berdampak pada pertumbuhan benih yang tidak optimal dan permasalahan lainnya,”jelas Andi.</p>', '<p style=\"text-align: justify;\"><br>Memasuki segmentasi pendederan, lanjut Andi, yang memelihara benih pasca larva sampai ukuran tertentu. Selama proses pemeliharaan, benih diberikan treatment khusus yang berupa penambahan probiotik dan fermentasi pakan pabrik.</p>', '<p style=\"text-align: justify;\"><br>Probiotiknya, kata Andi, merupakan probiotik buatan kelompok Mina Srikandi yang mengandung bakteri-bakteri tertentu. Tujuannya, agar meningkatkan penyerapan nutrisi yang ada di pakan, melancarkan pencernaan ikan, dan memaksimalkan kondisi laju pertumbuhan ikan menuju proses pendederan selanjutnya.</p>', '<p style=\"text-align: justify;\"><br>“Proses pendederan kami bagi menjadi pendederan 1 sampai 4. Fase akhir pendederan lele berukuran 1 kilogram (kg) berisi 30 ekor. Mengapa ukuran ini? Biar di segmen pembesaran tidak memerlukan waktu yang lama, sekitar 1 bulan saja. Sehingga siapapun yang ingin memelihara lele tidak butuh waktu lama dan biaya besar seperti pembesaran lele pada umumnya. Disamping itu, budidaya lele itu bisa dikenalkan sebagai usaha yang tidak berat sehingga menjaring para pengusaha baru untuk memulai budidaya lele segmen pembesaran,” seloroh Andi kepada TROBOS Aqua.</p>', '<p style=\"text-align: justify;\"><br>Segmentasi akhir, yakni pembesaran. Lebih gamblang Andi menjelaskan, dalam segmen pembesaran yang dilakukan Pokdakan Mina Srikandi menggunakan sistem Bioflock Spesific Treatment (BST).</p>', '<p style=\"text-align: justify;\"></p>', '<p style=\"text-align: justify;\"></p>', '<p style=\"text-align: justify;\"><strong>Selengkapnya baca di majalah TROBOS Aqua Edisi-75/15 Agustus – 14 September 2018</strong><br></p>']",
"published_date": " Rabu, 15 Agustus 2018 "
},
{
"category": "almamater",
"title": " Yoga Bekti Perdana : Kembangkan Olahan Yutuk di Pantai Laut Jawa ",
"image_url": "http://www.trobosaqua.com/thumbnail/b_10298.jpeg",
"summary_content": " Yutuk atau undur-undur laut (Emerita emeritus) merupakan salahsatu jenis krustasea yang banyak ditemukan di pesisir selatan laut jawa, yakni Pantai Su ",
"content": "['<p style=\"font-family: Helvetica, sans-serif; font-size: 17px;\"></p>', '<p style=\"text-align: justify;\">Yutuk atau undur-undur laut (Emerita emeritus) merupakan salahsatu jenis krustasea yang banyak ditemukan di pesisir selatan laut jawa, yakni Pantai Suwuk, Kebumen Jawa Tengah. Undur–undur di daerah tersebut terkenal dengan sebutan “yutuk jambe”. Yutuk dapat dengan mudah ditemukan hanya dengan sedikit menggali pasir pantai yang masih merupakan zona intertidal.</p>', '<p style=\"text-align: justify;\"><br>Berlimpahnya yutuk di sepanjang pantai ini masih belum termanfaatkan dengan optimal. Pengolahan yutuk hanya sebatas menjadi rempeyek dan bakwan, sehingga bentuk asli hewan ini masih sangat terlihat dan mengurangi tingkat kesukaan masyarakat (palatabelitas).</p>', '<p style=\"text-align: justify;\"><br>Banyaknya macam olahan makanan saat ini, menjadi ide yang menarik untuk mengembangkan potensi yutuk menjadi makanan favorit. Oleh karena itu, diperlukan upaya diversifikasi produk olahan yutuk agar lebih menarik dan dapat diterima oleh semua lapisan masyarakat. Upaya diversifikasi olahan yutuk diharapkan juga mampu meningkatkan nilai jual yutuk dan produk olahannya. Salah satu diversifikasi dari yutuk adalah dengan membuat menjadi nugget.</p>', '<p style=\"text-align: justify;\"><br>Yutuk merupakan krustasea yang memiliki nilai gizi cukup tinggi. Hasil penelitian Mursyidin (2007) dalam Darusman dkk. (2015) menunjukkan bahwa yutuk mengandung lemak total yang cukup tinggi, berkisar antara 17,22 - 21,56 %. Kandungan asam lemak omega 3 total (EPA dan DHA) juga cukup tinggi, berkisar antara 7,75 - 14,48 % dibandingkan dengan beberapa jenis krustasea lain seperti udang, lobster, dan beberapa jenis kepiting.</p>', '<p style=\"text-align: justify;\"><br>Sedangkan kandungan EPA (6,41 - 8,43 %) lebih tinggi dibandingkan kandungan DHA (1,34 - 6,57 %). Total kandungan asam lemak omega 6-nya 12,94 % terdiri dari asam linoleat 11,11 % dan asam arakhidonat 1,83 %. Potensi nilai gizi yang cukup tinggi dari yutuk sangat baik dikonsumsi oleh semua kalangan umur.</p>', '<p style=\"text-align: justify;\"><br><br><strong>Nugget Yutuk</strong><br>Usaha yang dapat dilakukan untuk membuat yutuk menjadi olahan yang menarik tanpa mengurangi kandungan nilai gizinya ialah dengan mengolah yutuk menjadi nugget. Nugget merupakan salah satu produk olahan daging giling yang dibumbui, kemudian diselimuti oleh perekat tepung, pelumuran tepung roti (breading) dan digoreng setengah matang untuk mempertahankan mutunya selama penyimpanan (Permadi, dkk., 2010).</p>', '<p style=\"text-align: justify;\"><br>Nugget yang dibuat dari daging cenderung dipasarkan dengan harga yang cukup mahal karena bahan bakunya yang sudah cukup tinggi. Sehingga yutuk dapat dimanfaatkan sebagai bahan alternatif pengganti daging, sehingga yutuk dapat diperoleh dengan harga yang ekonomis. Pengolahan nugget berbahan baku yutuk akan menaikkan nilai ekonomis yutuk dan membuat nugget yutuk menjadi makanan cepat saji bernilai gizi tinggi dengan harga terjangkau.</p>', '<p style=\"text-align: justify;\"><br>Dengan mengolah yutuk menjadi nugget dapat dijadikan salahsatu oleh-oleh khas daerah pesisir Pantai Suwuk, Kabupaten Kebumen, sehingga dapat meningkatkan pendapatan masyarakat sekitar di daerah tersebut. Kehadiran nugget yutuk dapat menjadi inovasi baru dalam produk olahan nugget, hal ini dapat menjadi dayatarik masyarakat untuk mengkonsumsi nugget yutuk.</p>', '<p style=\"text-align: justify;\"><br>Kabupaten Kebumen memiliki destinasi wisata alam yang cukup baik. Terdapat beberapa di antaranya adalah Pantai Suwuk. Pantai Suwuk yang terletak di Dusun Suwuk, Kabupaten Kebumen kini memiliki dayatarik pariwisata yang cukup tinggi. Banyaknya pengunjung yang datang untuk menikmati panorama alam yang indah di PantaiSuwuk, merupakan salahsatu alasan untuk menjadikan nugget yutuk sebagai oleh-oleh khas Pantai Suwuk.</p>', '<p style=\"text-align: justify;\"><br>Peluang bisnis dan peluang meningkatkan pendapat masyarakat sekitar dengan mengolah sumberdaya alam perairan yakni yutuk menjadi nugget sangat berpotensi. Target pasar dari nugget yutuk adalahpengunjung-pengunjung PantaiSuwuk. Banyaknya pengunjung dengan status anak-anak masa pertumbuhan menjadikan nugget yutuk dapat dijadikan sarana edukasi untuk pentingnya mengkonsumsi makanan bergizi.</p>', '<p style=\"text-align: justify;\"></p>', '<p style=\"text-align: right;\"><strong>* Mahasiswa Alih Jenjang Fakultas Peternakan Universitas Jenderal Soedirman</strong><br></p>']",
"published_date": " Selasa, 15 Mei 2018 "
},
{
"category": "almamater",
"title": " Anugerah Erlaut: Mengenal pH di Tambak ",
"image_url": "http://www.trobosaqua.com/thumbnail/b_10183.jpeg",
"summary_content": " Di dunia perikanan, kualitas air adalah salah satu topik perbincangan yang didiskusikan setiap saat. Bagaimana tidak, kualitas air menentukan apakah h ",
"content": "['<p style=\"font-family: Helvetica, sans-serif; font-size: 17px;\"></p>', '<p style=\"text-align: justify;\">Di dunia perikanan, kualitas air adalah salah satu topik perbincangan yang didiskusikan setiap saat. Bagaimana tidak, kualitas air menentukan apakah hewan yang sedang dibudidaya akan tumbuh dengan baik atau tidak.</p>', '<p style=\"text-align: justify;\"><br>Di lapangan, khususnya tambak, kadangkala dirasa sudah kenal dekat dengan berbagai parameter kualitas air. Namun, apakah benar sudah betul-betul mengenalnya? Contohlah salah satu para parameter kualitas air, yakni pH.</p>', '<p style=\"text-align: justify;\"><br>Skala pH pertama kali dikenalkan oleh Søren Peder Lauritz Sørensen, seorang ahli kimia dari Belanda, pada tahun 1909. Saat itu, ia sedang mencari cara mengukur keasaman bir dalam proses fermentasi. Skala yang diciptakan oleh Sørensen disebut skala pH (singkatan dari power of hydrogen) dan mendeskripsikan konsentrasi ion H+ dalam air.</p>', '<p style=\"text-align: justify;\"><br>Dari gambar dapat dilihat bahwa ion H+ terdapat dalam jumlah banyak pada pH rendah. Pada pH tinggi, ion H+ terdapat dalam jumlah sedikit. Sementara itu pada pH netral, ion H+ berada dalam jumlah yang sebanding dengan ion OH-. Dari gambar tersebut, dapat dilihat juga bahwa kenaikan 1 unit pH menandakan penurunan sebanyak konsentrasi ion H+ (tanda [H+]) sebanyak 10 kali lipat, 2 derajat 100 kali lipat, dan seterunsnya. Dengan demikian, perbedaan pH sebanyak 1.5 (101.5 = 31 kali lipat) merupakan perbedaan yang cukup jauh.</p>', '<p style=\"text-align: justify;\"><br><br><strong>pH dan tambak</strong><br>Pengukuran pH dapat menggunakan kertas lakmus, kertas pH ataupun dengan pH meter. pH air optimum untuk budidaya berkisar antara 7.2-8.8, dengan rentang fluktuasi antara siang dan malam sebesar 0.5.</p>', '<p style=\"text-align: justify;\"><br>Dalam tambak, kondisi pH dipengaruhi oleh beberapa hal. Yakni yang pertama adalah tanah, seperti air, memiliki tingkat keasaman yang disebabkan oleh senyawa kimia dan organik yang terkandung di dalamnya. Pada kolam yang berlandaskan tanah, tanah dapat melepaskan zat-zat kimia ke dalam kolom air. Materi organik dalam tanah dapat membusuk dan membentuk asam organik yang dapat meresap ke dalam air, menurunkan pH air. Tanah berkapur dapat melepaskan zat kapur, yang menaikkan pH air.</p>', '<p style=\"text-align: justify;\"><br>Kondisi pH juga dipengaruhi karbon dioksida. Karbon dioksida dapat larut dalam air dan bereaksi membentuk asam karbonat (H2CO3). Selain itu, pengaruh lainnya adalah mikroalga. Organisme ini adalah tumbuhan mikroskopis dalam air yang mendapatkan makanannya melalui proses fotosintesis, mengubah karbon dioksida menjadi gula menggunakan cahaya matahari. Dalam hal ini, alga menyerap karbon dioksida, mengurangi jumlah asam karbonat dalam air.</p>', '<p style=\"text-align: justify;\"><br>Selain itu, pembusukan bahan organik juga berpengaruh pada kondisi tambak udang. Bahan organik dalam tambak termasuk alga yang mati, sisa pakan dan kotoran udang jatuh ke dasar, menumpuk dan membusuk. Proses pembusukan ini dibantu oleh bakteri. Dalam kondisi kurang oksigen, pembusukan berlangsung secara anaerobik (tanpa oksigen), menghasilkan asam organik yang dapat larut dalam air.</p>', '<p style=\"text-align: justify;\"><br>Perubahan pH yang drastis dalam waktu singkat dapat menyebabkan udang stres, sehingga menyebabkan turunnya nafsu makan dan melemahnya sistem imun, kemudian udang menjadi rentan penyakit. Dalam jangka panjang, pH air yang tidak optimal akan menyebabkan pertumbuhan yang tidak optimal dan menyebabkan kematian, menghasilkan nilai SR rendah dan FCR membengkak.</p>', '<p style=\"text-align: justify;\"><br>Contohnya, jika pH kurang dari 6.0 menandakan kadar kalsium yang rendah dalam air, menyebabkan soft-shell syndrome. Dalam budidaya, pH yang tinggi (8.5 &gt;) juga bersifat tidak optimal menyebabkan stres dan hilangnya nafsu makan. Dan jika pH tinggi, dapat meningkatkan kadar ammonia terlarut dalam air, sehingga dapat mencapai kadar berbahaya untuk udang.</p>', '<p style=\"text-align: justify;\"></p>', '<p style=\"text-align: right;\"><br><strong>*Alumni Magister Teknik Kimia Institut Teknologi Bandung</strong><br></p>']",
"published_date": " Minggu, 15 April 2018 "
},
{
"category": "gelombang",
"title": " Pengelolaan Rajungan Jangan Kebablasan ",
"image_url": "http://www.trobosaqua.com/thumbnail/b_10492.jpeg",
"summary_content": " Beberapa tenaga kerja tampak hilir mudik di sekitar pabrik perusahaan pengolahan rajungan di Rembang-Jawa Tengah. Terdapat bagian processing yang lang ",
"content": "['<p style=\"font-family: Helvetica, sans-serif; font-size: 17px;\"></p>', '<p style=\"text-align: justify;\"><strong>Industri rajungan terus berkembang tahun ke tahun, yang memerlukan pengelolaan secara tegas dan nyata</strong></p>', '<p style=\"text-align: justify;\"><br><br>Beberapa tenaga kerja tampak hilir mudik di sekitar pabrik perusahaan pengolahan rajungan di Rembang-Jawa Tengah. Terdapat bagian processing yang langsung bertanggung jawab untuk menjaga kualitas rajungan, misalkan dalam pemisahan karapas dan daging rajungan. “Jangan sampai tercampur antara karapas dan daging,” diungkapkan Manager Plant PT Pan Putra Samudera (PPS) Daromi yang mengarahkan hasil olahan rajungan kalengan ke pasar ekspor.</p>', '<p style=\"text-align: justify;\"><br>Tidak main-main, untuk mencapai pasar ekspor, yang sebagian besar notabene ke Amerika Serikat (AS), membutuhkan prasyarat yang tidak gampang. Untuk menembus pasar per kalengnya bisa dihargai ratusan ribu rupiah. “Rajungan pun menjadi sektor yang memberikan pendapatan tinggi. Kita ekspor saja bisa mencapai 15 ribu MT, senilai 300 juta USD atau Rp 4,7 triliun,” imbuh Direktur Eksekutif Asosiasi Pengelolaan Rajungan Indonesia (APRI), Hawis Madduppa.<br>Nilai ini, jelas Hawis, lari ke masyarakat itu sekitar 60 % - 80 %, dan lari ke industri hanya 20 %. “Jadi kalau hitung-hitung, ada sekitar Rp 50 miliar per bulan per provinsi selama 1 tahun yang lari ke masyarakat, dari bisnis ini,” ungkapnya.</p>', '<p style=\"text-align: justify;\"><br>Apalagi, terang Hawis, industri rajungan terus berkembang dari tahun ke tahunnya. Dia menjabarkan, dari sisi processing plant, terdapat 25 unit di Jawa, 8 unit di Sumatera, 4 unit di Sulawesi, dan 1 unit di Kalimantan.</p>', '<p style=\"text-align: justify;\"><br>Dan, imbuh Hawis, tiap daerah biasanya ada miniplant, rantai pasok pertama masuknya rajungan ke industri. Perputaran sekian triliun dari bisnis, adalah bagaimana bisnis rajungan ini menghidupkan nelayan, pengolah, dan lain-lain.</p>', '<p style=\"text-align: justify;\"><br>“MIsalkan dari data kita itu ada sekitar 50 ribu nelayan yang suplai, 100 ribu picker, kayak ibu-ibu itu semua. Di miniplant, atau di plant, picker ini yang memilih dan grading rajungan. Belum lagi keterlibatan industri es, nah dari situ bisa dilihat berapa banyak yang dihidupi dari industri rajungan ini,” ujar Hawis.</p>', '<p style=\"text-align: justify;\"><br>Yang perlu dicermati, tutur Hawis, yakni dari survei pada 2012 lalu hanya ada 186 miniplant. Namun, pada 2017 lalu sudah meningkat menjadi 311 miniplant. “Miniplant itu ada yang terintegrasi dengan perusahaan, ada yang independen, yang independen ini yang bahaya kan karena kadang ngirim kesana ngirim kesini, dia gak kontrak, jadi bebas aja,” bebernya.</p>', '<p style=\"text-align: justify;\"><br><br><strong>Peran Besar Asosiasi</strong><br>Untuk itulah, apa yang asosiasi lakukan sekarang itu adalah memastikan kredibilitas perusahaan, tata cara bagaimana mengikuti sertifikasi atau lembaga, dan lainnya. “Contohnya adalah tentang update regulasi yang diterapkan pemerintah untuk lokal maupun untuk pasar ekspor. Serta sertifikasi yang dibutuhkan pengolah untuk memasarkan produk rajungannya,” ungkap Daromi mengenai pentingnya peran asosiasi.</p>', '<p style=\"text-align: justify;\"><br>Artinya dampak positif dari diaturnya, makanya perlu pengelolaan itu supaya ini tetap berlanjut. Dalam hal ini peran asosiasi pun membantu pemerintah untuk menjamin keberlanjutan rajungan. Misalkan dari Peraturan Menteri sudah diatur Rencana Pengelolaan Perikanan Rajungan di Wilayah Pengelolaan Perikanan Negara Republik Indonesia.</p>', '<p style=\"text-align: justify;\"></p>', '<p style=\"text-align: justify;\"></p>', '<p style=\"text-align: justify;\"><strong>Selengkapnya baca di majalah TROBOS Aqua Edisi-74/15 Juli – 14 Agustus 2018</strong><br></p>']",
"published_date": " Minggu, 15 Juli 2018 "
}
]

 

copy json data diatas dan masukan kedalam database mongodb. secara default mongodb akan membuat unix id dalam bentuk bson data seperti di bawah ini

"_id" : ObjectId("5c7bbd1650d02c35191c4266"),

selanjutnya kita akan mebuat koneksi database dari Go ke mongodb dengan memanfaatkan library

gopkg.in/mgo.v2

kamu bisa mendapatkan library diatas dengan cara go get gopkg.in/mgo.v2 atau kamu data membaca dokumentasinya disini

perhatikan function main.go dibawah ini

func main() {
session, err := mgo.Dial("localhost:27017")
if err != nil {
panic(err)
}
defer session.Close()

session.SetMode(mgo.Monotonic, true)
ensureIndex(session)

router := goji.NewMux()
router.HandleFunc(pat.Get("/"), getIndex)
router.HandleFunc(pat.Get("/trobosqua"), controllers.AllTrobos(session))
router.HandleFunc(pat.Get("/trobosqua/id/:id"), controllers.TrobosById(session))
router.HandleFunc(pat.Get("/trobosqua/category/:category"), controllers.TrobosByCategory(session))
log.Fatal(http.ListenAndServe(global.GetEnv("PORT"), ghandlers.LoggingHandler(os.Stdout, router)))
}

 


baca artikel lainya Rest API Flask Swagger



 

dari code diatas perhatikan potongan code berikut :


session, err := mgo.Dial("localhost:27017")


secara default mongob memilki port 27017. dapatkan code lengkapnya di sini.

jika ada pertanyaan tentang rest api bisa kontak langsung penulis :)


baca artikel lainya: