{"id":11188,"date":"2018-05-31T00:00:00","date_gmt":"2018-05-31T00:00:00","guid":{"rendered":"https:\/\/binus.ac.id\/binus-digital\/2018\/05\/31\/merancang-web-api-yang-mudah-dieksplorasi\/"},"modified":"2024-09-24T02:20:30","modified_gmt":"2024-09-24T02:20:30","slug":"merancang-web-api-yang-mudah-dieksplorasi","status":"publish","type":"post","link":"https:\/\/binus.ac.id\/binus-digital\/2018\/05\/31\/merancang-web-api-yang-mudah-dieksplorasi\/","title":{"rendered":"Merancang Web API yang Mudah Dieksplorasi"},"content":{"rendered":"<p>Meningkatnya jumlah aplikasi <em>software<\/em> (<em>App<\/em>) pada berbagai macam perangkat komputasi tentu memerlukan layanan dari berbagai sumber (Verborgh et al, 2015). Sebagai contoh, layanan <em>Facebook API<\/em> menyediakan layanan untuk melakukan <em>sign in<\/em> ke dalam sebuah <em>App<\/em> tanpa mengharuskan pengguna untuk melakukan pendaftaran baru ke dalam <em>App<\/em>. <em>App<\/em> akan mengkonsumsi layanan <em>Facebook API<\/em> untuk melakukan authentikasi dan izin untuk mendapatkan beberapa data dari <em>Facebook<\/em> untuk digunakan pada <em>App<\/em>. <em>Facebook API<\/em> adalah salah satu contoh dari berbagai jenis <em>Web API<\/em> yang tersedia di <em>Web<\/em> dan dapat dikonsumsi oleh berbagai <em>client App<\/em>.<\/p>\n<p><em>Web API<\/em> adalah sebuah <em>software<\/em> yang menyediakan layanan (fungsi-fungsi) spesifik yang dapat dipanggil melalui <em>Web<\/em> oleh berbagai jenis <em>software<\/em> lain. <em>Web service<\/em> adalah salah satu bentuk dari tradisional <em>Web API<\/em>, umumnya terdapat kontrak berupa sebuah dokumen <em>Web Service Definition Language (WSDL)<\/em> yang berisi fungsi-fungsi apa saja yang dapat dipanggil dan dieksekusi oleh <em>Web<\/em> <em>service<\/em> tersebut. Perkembangan selanjutnya adalah arsitektur <em>REST<\/em> (<em>Representational State Transfer<\/em>) <em>API<\/em> yang diperkenalkan oleh Fielding dan Taylor (2002). Sampai saat ini <em>REST<\/em> <em>API<\/em> sangat populer dan diimplementasikan pada banyak\u00a0<em>Web API<\/em>.<\/p>\n<p>Mengapa <em>REST API<\/em> menjadi lebih superior dibandingkan dengan\u00a0<em>Web service<\/em> tradisional? Menurut Verborgh et al (2015), <em>API<\/em> yang mengikuti prinsip <em>REST<\/em> adalah &#8220;<em>native Web citizens<\/em>&#8221; ini berarti <em>API<\/em> tersebut bekerja sesuai dengan prinsip kerja <em>Web<\/em>. Fielding dan Taylor (2008) menyebutkan bahwa <em>REST<\/em> mempunyai beberapa prinsip fundamental sebagai berikut:<\/p>\n<ol>\n<li><strong>Berorientasi pada <em>resource<\/em> dan <em>addressability<\/em><\/strong><br \/>\nSeluruh bit informasi harus dibungkus dalam sebuah resource yang dapat diakses melalui penanda yang stabil. Penanda ini disebut dengan <em>URL<\/em> dan resource diakses melalui <em>HTTP<\/em>.<br \/>\nContoh:<br \/>\n<em>URL<\/em> <em>endpoint<\/em> utama:<br \/>\n<span style=\"text-decoration: underline\">https:\/\/api.example.com\/<\/span><br \/>\nURL kumpulan <em>resource<\/em> pengguna:<br \/>\n<span style=\"text-decoration: underline\">https:\/\/api.example.com\/user<\/span><br \/>\nURL resource pengguna\u00a0spesifik dengan ID 1001:<br \/>\n<span style=\"text-decoration: underline\">https:\/\/api.example.com\/user\/1001<\/span><br \/>\nURL kumpulan buku milik pengguna spesifik dengan ID 1001:<br \/>\n<span style=\"text-decoration: underline\">https:\/\/api.example.com\/user\/1001\/book<\/span><br \/>&nbsp;<\/li>\n<li><strong>Penggunaan <em>interface<\/em> yang seragam<\/strong><br \/>\nArsitektur <em>REST<\/em> memiliki <em>interface<\/em> yang seragam untuk dapat mengakses sebuah <em>resource<\/em> dari <em>URL<\/em>. <em>Interface<\/em> ini disebut dengan <em>HTTP verbs<\/em> yang dijabarkan pada tabel berikut:<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<th><em>HTTP Verb<\/em><\/th>\n<th>Deskripsi<\/th>\n<\/tr>\n<tr>\n<td><em>GET<\/em><\/td>\n<td>Mengambil sebuah representasi <em>resource<\/em><\/td>\n<\/tr>\n<tr>\n<td><em>HEAD<\/em><\/td>\n<td>Mengambil informasi <em>header<\/em> <em>resource<\/em><\/td>\n<\/tr>\n<tr>\n<td><em>OPTIONS<\/em><\/td>\n<td>Mengambil daftar <em>verbs<\/em> yang didukung oleh <em>resource<\/em> ini<\/td>\n<\/tr>\n<tr>\n<td><em>PUT<\/em><\/td>\n<td>Mengganti <em>resource<\/em><\/td>\n<\/tr>\n<tr>\n<td><em>DELETE<\/em><\/td>\n<td>Menghapus <em>resource<\/em><\/td>\n<\/tr>\n<tr>\n<td><em>PATCH<\/em><\/td>\n<td>Memperbaharui <em>state<\/em> dari <em>resource<\/em><\/td>\n<\/tr>\n<tr>\n<td><em>POST<\/em><\/td>\n<td>Membuat <em>resource<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li><strong>Representasi <em>resource<\/em> dan tipe media<\/strong><br \/>\n<em>Resource<\/em> yang direpresentasikan dapat menyesuaikan dengan kemampuan <em>client<\/em>, contoh <em>HTML, XML<\/em>, atau <em>JSON<\/em>.<br \/>&nbsp;<\/li>\n<li><strong><em>Hypermedia as the Engine of Application State (HATEOAS)<\/em><\/strong><br \/>\n<em>Resource<\/em> harus memiliki <em>hyperlink<\/em> atau <em>form<\/em>, untuk berpindah ke <em>state<\/em> aplikasi berikutnya dan menampilkan <em>resource<\/em> yang berbeda.<\/li>\n<\/ol>\n<p><em>REST API<\/em> yang memanfaatkan prinsip <em>HATEOAS<\/em> <strong>memiliki keuntungan<\/strong> bagi <em>software developer<\/em>. Sebuah <em>REST<\/em> <em>API<\/em> memiliki satu <em>endpoint<\/em> utama (<em>URL<\/em>) yang dapat diakses, selanjutnya dapat dieksplorasi seperti halnya melakukan <em>browsing<\/em> pada <em>Web<\/em>. <em>Resources<\/em> dapat dengan mudah ditelusuri dan ditemukan melalui <em>hyperlinks<\/em>, serta juga dapat dimanipulasi dengan menggunakan <em>HTTP verbs<\/em> (Amundsen, 2010).<\/p>\n<p>Demikian sekilas mengenai teori dan prinsip terkait perancangan <em>Web API<\/em> yang mudah dieksplorasi. Pada artikel selanjutnya akan dibahas lebih lanjut mengenai implementasi dari arsitektur <em>REST API<\/em> memanfaatkan prinsip <em>HATEOAS<\/em>.<\/p>\n<h4>Referensi:<\/h4>\n<p>Amundsen, M. (2010, May 31). <em>H Factor: Hypermedia Types<\/em>. Retrieved Jan 20, 2014, from Amundsen: http:\/\/www.amundsen.com\/hypermedia\/hfactor\/<\/p>\n<p>Fielding, R. T. 2008. <em>REST APIs must be hypertext-driven<\/em>. Untangled \u2013 Musings of Roy T. Fielding. from: http:\/\/roy.gbiv.com\/untangled\/2008\/rest-apis-must-be-hypertext-driven<\/p>\n<p>Fielding, R. T. and Taylor, R. N. 2002. Principled design of the modern Web architecture. <em>Transactions on Internet Technology 2<\/em>, 2 (May), 115\u2013150.<\/p>\n<p>Gamache, P. (2014). Pragmatic Hypermedia: Creating a Generic, Self-inflating API Client for Production Use. <em>Proceedings of the 23rd International Conference on World Wide Web<\/em> (pp. 931-936). Seoul: ACM.<\/p>\n<p>Verborgh, R., Arndt, D., Van Hoecke, S., De Roo, J., Mels, G., Steiner, T., &amp; Gabarro, J. (2017). The pragmatic proof: Hypermedia API composition and execution. <em>Theory and Practice of Logic Programming<\/em>, 17(1), 1-48.<\/p>\n<p>++++++++++<\/p>\n<p>Photo by\u00a0<a href=\"https:\/\/unsplash.com\/photos\/5ax2dj3dvyA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Tran Mau Tri Tam<\/a>\u00a0on\u00a0<a href=\"https:\/\/unsplash.com\/search\/photos\/direction-sign?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Unsplash<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meningkatnya jumlah aplikasi software (App) pada berbagai macam perangkat komputasi tentu memerlukan layanan dari berbagai sumber (Verborgh et al, 2015). Sebagai contoh, layanan Facebook API menyediakan layanan untuk melakukan sign in ke dalam sebuah App tanpa mengharuskan pengguna untuk melakukan pendaftaran baru ke dalam App. App akan mengkonsumsi layanan Facebook API untuk melakukan authentikasi dan [&hellip;]<\/p>\n","protected":false},"author":19,"featured_media":11189,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77],"tags":[],"class_list":["post-11188","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles"],"_links":{"self":[{"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/posts\/11188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/comments?post=11188"}],"version-history":[{"count":1,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/posts\/11188\/revisions"}],"predecessor-version":[{"id":12005,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/posts\/11188\/revisions\/12005"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/media\/11189"}],"wp:attachment":[{"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/media?parent=11188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/categories?post=11188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/tags?post=11188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}