Kata Pengantar Puji dan syukur diucapkan kepada Allah SWT atas selesainya ebook sederhana yang berjudul Pengenalan ASP.NET Web API. Pada ebook ini akan dikenalkan tentang ASP.NET Web API dengan bantuan tool Visual Studio 2013. Selain itu juga akan diberikan contoh-contoh penggunaannya serta pemanfaatannya pada aplikasi web dan mobile. Akhir kata, selamat membaca dan semoga ebook ini bermanfaat bagi para web developer pemula untuk membuat aplikasi web. Kritik dan saran akan sangat berarti dan dapat ditujukan via email. Banjarmasin, 7 April 2014 M Reza Faisal (reza.faisal [at] gmail [dot] com) I Daftar Isi Kata Pengantar ............................................................................................... I Daftar Isi ........................................................................................................ II Daftar Gambar ............................................................................................. IV 1 Pendahuluan ............................................................................................. 1-1 Web Service ..................................................................................................... 1-1 ASP.NET & Visual Studio 2013 ................................................................... 1-3 Rangkuman ..................................................................................................... 1-4 2 Perkenalan ................................................................................................ 2-5 Project Web API.............................................................................................. 2-5 Web API pada Existing Project Web ........................................................ 2-11 ASP.NET Web Form Web Application ............................................................ 2-11 ASP.NET MVC Web Application ..................................................................... 2-13 ASP.NET Web Form Website ............................................................................ 2-14 Halaman Bantuan ASP.NET Web API ..................................................... 2-16 HTTP Verb .................................................................................................... 2-19 Mengakses Web API.................................................................................... 2-21 A Simple Test Client for ASP.NET Web API .................................................. 2-22 Rangkuman ................................................................................................... 2-28 3 Contoh-Contoh Web API...................................................................... 3-29 API Matematika............................................................................................ 3-29 Menampilkan Bilangan 1 sampai 10 ................................................................ 3-31 Menampilkan Kata dari Angka yang Dimasukkan ....................................... 3-32 Melakukan Operasi Matematika Sederhana pada Dua Bilangan ................ 3-33 API CRUD – LINQ to SQL ......................................................................... 3-35 Create .................................................................................................................... 3-38 Retrieve ................................................................................................................. 3-40 Update .................................................................................................................. 3-42 Delete .................................................................................................................... 3-44 Penggunaan Atribute [FromBody] ................................................................... 3-45 API CRUD – Entity Framework................................................................. 3-47 ADO.NET Entity Data Model ........................................................................... 3-48 II Class OutputModel.cs ........................................................................................ 3-50 Class MahasiswaController.cs........................................................................... 3-51 Create .................................................................................................................... 3-54 Retrieve ................................................................................................................. 3-55 Update .................................................................................................................. 3-58 Delete .................................................................................................................... 3-59 4 Pemrograman Akses Web API ............................................................. 4-61 Matematika.Console .................................................................................... 4-61 Mahasiswa.Console ..................................................................................... 4-65 Create .................................................................................................................... 4-68 Retrieve ................................................................................................................. 4-68 Update .................................................................................................................. 4-69 Delete .................................................................................................................... 4-69 Mahasiswa.Website ..................................................................................... 4-69 Menampilkan Data Mahasiswa ........................................................................ 4-69 Tambah Data Mahasiswa ................................................................................... 4-71 Memilih Mahasiswa ........................................................................................... 4-72 Update Data Mahasiswa .................................................................................... 4-73 Menghapus Data Mahasiswa ............................................................................ 4-74 Mahasiswa.WP.............................................................................................. 4-75 Project Windows Phone App ............................................................................ 4-76 Menampilkan Data Mahasiswa ........................................................................ 4-78 Memilih dan Update Data Mahasiswa ............................................................ 4-82 Tambah Data Mahasiswa ................................................................................... 4-85 5 Penutup.................................................................................................... 5-89 III Daftar Gambar Gambar 1-1. Aplikasi web. ................................................................................................................1-1 Gambar 1-2. Aplikasi mobile. ...........................................................................................................1-2 Gambar 1-3. HTTP Service ................................................................................................................1-3 Gambar 1-4. Ebook seri ASP.NET. ...................................................................................................1-3 Gambar 2-1. Window Add New Project..........................................................................................2-5 Gambar 2-2. Window New ASP.NET Project. ................................................................................2-6 Gambar 2-3. Solution Explorer. ........................................................................................................2-6 Gambar 2-4. Web API pada Empty template. ................................................................................2-7 Gambar 2-5. Project Web API dengan Empty template. ...............................................................2-8 Gambar 2-6. Menambah Web API Controller Class (v2). .............................................................2-9 Gambar 2-7. Halaman bantuan Web API. .....................................................................................2-17 Gambar 2-8. Window Manage NuGet Packages. .........................................................................2-18 Gambar 2-9. Folder Area. ................................................................................................................2-19 Gambar 2-10. Daftar API. ................................................................................................................2-21 Gambar 2-11. Manage NuGet Package – Microsoft.AspNet.WebApi.Client. ..........................2-22 Gambar 2-12. Daftar API pada class controller Values. ..............................................................2-23 Gambar 2-13. Tombol Test API.......................................................................................................2-24 Gambar 2-14. Form Test Client – Get api/Values. ........................................................................2-24 Gambar 2-15. Form Test Client – response for Get api/Value. ...................................................2-25 Gambar 2-16. Form Test Client – Post api/Values. .......................................................................2-25 Gambar 2-17. Form Test Client – response for POST api/Values...............................................2-26 Gambar 2-18. Form Test Client – PUT api/Values .......................................................................2-26 Gambar 2-19. Form Test Client – response for PUT api/Values. ................................................2-27 Gambar 2-20. Form Test Client – Delete api/Values. ...................................................................2-27 Gambar 2-21. Form Test Client – Response for DELETE api/Values. .......................................2-28 Gambar 3-1. Form akses GET api/Matematika. ............................................................................3-31 Gambar 3-2. Output API GET api/Matematika. ...........................................................................3-31 Gambar 3-3. Form akses GET api/Matematika/{id} .....................................................................3-32 Gambar 3-4. Output API GET api/Matematika{id} ......................................................................3-32 Gambar 3-5. Form akses API GET api/Matematika?op={op}&bil1={bil1}&bil2={bil2} ............3-34 Gambar 3-6. Response dari API GET api/Matematika? ?op={op}&bil1={bil1}&bil2={bil2} ....3-35 Gambar 3-7. Menambahkan database pada project. ....................................................................3-35 IV Gambar 3-8. LINQ to SQL Classes – Akademik.dbml. ...............................................................3-36 Gambar 3-9. Data class Mahasiswa. ...............................................................................................3-37 Gambar 3-10. Form POST api/Mahasiswa. ...................................................................................3-39 Gambar 3-11. Response POST api/Mahasiswa. ............................................................................3-39 Gambar 3-12. Hasil proses create data. ..........................................................................................3-40 Gambar 3-13. Form GET api/Mahasiswa. .....................................................................................3-40 Gambar 3-14. Response GET api/Mahasiswa. ..............................................................................3-41 Gambar 3-15. Form GET api/Mahasiswa/nim. .............................................................................3-41 Gambar 3-16. Response api/Mahasiswa/nim. ...............................................................................3-42 Gambar 3-17. Form PUT api/Mahasiswa. .....................................................................................3-43 Gambar 3-18. Response PUT api/Mahasiswa. ..............................................................................3-43 Gambar 3-19. Data telah diupdate. ................................................................................................3-43 Gambar 3-20. Form DELETE api/Mahasiswa. ..............................................................................3-44 Gambar 3-21. Response DELETE api/Mahasiswa. .......................................................................3-44 Gambar 3-22. Form POST api/Mahasiswa. ...................................................................................3-46 Gambar 3-23. Form PUT api/Mahasiswa. .....................................................................................3-47 Gambar 3-24. Respose GET dan POST. .........................................................................................3-47 Gambar 3-25. Window Add New Item – ADO.NET Entity Data Model - Akademik.edmx .3-48 Gambar 3-26. Entity Data Model Wizard – Generate from Database. ......................................3-48 Gambar 3-27. Pembuatan connection string. ................................................................................3-49 Gambar 3-28. Pemilihan versi Entity Framework. .......................................................................3-49 Gambar 3-29. Pemilihan tabel. ........................................................................................................3-50 Gambar 3-30. Antarmuka designer Akademik.edmx. ................................................................3-50 Gambar 3-31. Form POST api/Mahasiswa ....................................................................................3-55 Gambar 3-32. Response POST api/Mahasiswa .............................................................................3-55 Gambar 3-33. Form API GET api/Mahasiswa...............................................................................3-56 Gambar 3-34. Response API GET api/Mahasiswa. ......................................................................3-57 Gambar 3-35. Form API GET api/Mahasiswa?nim={nilai} .........................................................3-57 Gambar 3-36. Response api/Mahasiswa?nim={nilai} ...................................................................3-57 Gambar 3-37. Form PUT api/Mahasiswa ......................................................................................3-58 Gambar 3-38. Response PUT api/Mahasiswa. ..............................................................................3-59 Gambar 3-39. Form DELETE api/Mahasiswa. ..............................................................................3-60 Gambar 3-40. Response DELETE api/Mahasiswa. .......................................................................3-60 Gambar 3-41. Response DELETE api/Mahasiswa yang menampilkan kesalahan. .................3-60 Gambar 4-1. Manage NuGet Packages – Microsoft ASP.NET Web API 2.1 Client Library. ..4-61 V Gambar 4-2. Installasi Microsoft ASP.NET Web API 2.1 Client Library. .................................4-62 Gambar 4-3. Folder Reference – System.Net.Http dan System.Net.Http.Formating. .............4-62 Gambar 4-4. Hasil akses Web API dari aplikasi console. ............................................................4-64 Gambar 4-5. Output Web API dalam formal XML. .....................................................................4-65 Gambar 4-6. Gridview Data Mahasiswa. ......................................................................................4-71 Gambar 4-7. Form input data mahasiswa. ....................................................................................4-72 Gambar 4-8. GridView dengan link untuk memilih record. ......................................................4-73 Gambar 4-9. Menghapus record mahasiswa. ...............................................................................4-74 Gambar 4-10. Manage NuGet Packages untuk project Windows Phone 8. .............................4-76 Gambar 4-11. Instalasi library Microsoft.AspNet.WebApi.Client pada project Windows Phone 8. ......................................................................................................................................4-76 Gambar 4-12. Project Windows Phone App. ................................................................................4-77 Gambar 4-13. MahasiswaPage.xaml ..............................................................................................4-77 Gambar 4-14. WMAppManifest.xml. .............................................................................................4-78 Gambar 4-15. MahasiswaPage.xaml ..............................................................................................4-81 Gambar 4-16. MahasiswaDetailPage.xaml. ...................................................................................4-82 Gambar 4-17. MahasiswaAddPage.xaml. .....................................................................................4-88 VI 1 Pendahuluan Web Service Aplikasi web yang mempunyai sifat untuk dapat diakses di mana saja dan kapan saja, membuat banyak aplikasi-aplikasi banyakk bermunculan dan dimanfaatkan oleh orang banyak. Baik itu aplikasi yang berfungsi membantu untuk pekerjaan perkantoran atau aplikasi yang bersifat hiburan, jejaring sosial dan lain-lain. Mungkin kita lebih mengenal aplikasi web yang bersifat hiburan seperti youtube (www.youtube.com) atau aplikasi web jejaring sosial seperti facebook (www.facebook.com) atau twitter (www.twitter.com). Tetapi dalam perkembangannya, sekarang ini sudah sangat umum perangkat smartphone, pad atau tab sehingga tidak heran jika aplikasi web mempunyai “pendamping” dalam kehidupannya. “Pendamping” ini sering disebut dengan aplikasi mobile. Kenapa disebut “pendamping” alih-alih sebagai “pesaing”? Hal ini karena memang antara aplikasi web dan aplikasi mobile tidak saling bersaing, tetapi malah saling mendukung satu sama lain-lain. Untuk mengetahui bagaimana antara aplikasi web dan aplikasi web dapat saling mendukung satu sama lain, maka akan dipaparkan pada bagian dibawah ini. Pertama akan dijelaskan bagaimana aplikasi web secara umum bekerja. Aplikasi web yang berada pada web server akan dapat diakses oleh komputer yang digunakan oleh pengguna dengan web browser seperti Internet Explorer. Komunikasi yang terjadi antara web browser pada komputer dengan web server adalah dengan dua proses, yaitu request dan response. Aplikasi Web Internet Database Server Web Browser pada komputer Web Server Gambar 1-1. Aplikasi web. Request adalah proses yang dilakukan oleh web browser pada komputer ke web server, kemudian permintaan tersebut akan diolah oleh web server dan hasilnya akan dikirimkan ke web browser yang merupakan proses response dari web server. Hasil proses response ini lah yang akan kita lihat dalam bentuk halaman web pada web browser. Misal user ingin melihat data mahasiswa pada web browser, maka yang akan dilakukan adalah akan ada proses request ke web server. Permintaan tersebut akan diproses pada web server, karena ada kebutuhan akan data mahasiswa maka aplikasi web pada sisi server akan mengambil data mahasiswa 1-1 tersebut pada database kemudian hasilkannya akan dikirimkan ke web browser sebagai proses response. Dari paparan tersebut maka didapat gambaran jika aplikasi web itu adalah aplikasi yang disimpan di server, bagi pengguna yang ingin menggunakannya tidak perlu menginstall apapun di komputer miliknya. Pengguna cukup menginstall web browser, kemudian pengguna cukup mengetikkan alamat dari web server pada web browser tersebut, dan selanjutnya proses yang terjadi seperti yang telah dipaparkan di atas. Bagaimana kira-kira cara kerja aplikasi mobile (bukan : web browser pada perangkat mobile) jika ingin melakukan hal di atas? Aplikasi mobile memang sangat beragam, ada game, ada aplikasi tanpa perlu koneksi internet atau aplikasi yang terhubung jaringan internet untuk bisa digunakan, seperti aplikasi mobile twitter atau facebook. Gambar di bawah ini akan memberikan ilustrasi cara kerja aplikasi mobile yang membutuhkan koneksi internet. Web Service Aplikasi Mobile Internet Database Server Web Server Gambar 1-2. Aplikasi mobile. Dari gambar di atas dapat dilihat letak dari aplikasi mobile yang berada pada perangkat mobile itu sendiri, ini artinya aplikasi mobile harus diinstall pada perangkat mobile tersebut. Misalnya aplikasi mobile yang diinstall adalah aplikasi mobile Facebook, maka dipastikan akan ada halaman yang berfungsi untuk login atau halaman untuk menampilkan statusstatus yang ditulis. Pada proses login akan dilakukan pengecekan username dan password yang dimasukkan untuk dicocokkan dengan data yang ada di database. Begitu juga jika pada halaman ingin ditampilkan daftar status yang telah di tulis pada wall, maka perlu ada proses untuk mengambil data tersebut pada database. Tetapi jika dilihat pada gambar di atas, proses pengambilan data tersebut tentunya tidak bisa dilakukan langsung dari aplikasi mobile ke database server. Pada gambar terdapat layanan berbasis web (web service) yang berada pada web server, pada layanan tersebut terdapat fungsi-fungsi yang bertugas untuk melakukan hal-hal penting termasuk fungsi untuk mengakses data pada database server atau fungsi untuk otentikasi user untuk proses login. Maka aplikasi mobile cukup mengakses fungsifungsi pada layanan tersebut untuk melakukan proses-proses tersebut. Keberadaan web service sebagai perantara seperti gambar di atas mempunyai beberapa manfaat, diantaranya adalah : 1. 2. Layanan ini dapat lebih mengamankan data pada database server, hal ini dikarena database tidak langsung diakses oleh aplikasi. Layanan ini bukan hanya dapat diakses oleh aplikasi mobile, tapi juga dapat diakses oleh aplikasi jenis lain seperti aplikasi web atau aplikasi desktop. Selain itu layanan berbasis web ini akan dapat diakses dan dimanfaatkan pada berbagai platform atau 1-2 teknologi, artinya layanan ini bisa diakses oleh aplikasi yang dibangun dengan .NET, Java, PHP, Python, Ruby, Javascript dan lain-lain. Dari paparan di atas maka dapat digambarkan peran dari web service seperti gambar berikut ini. Aplikasi Mobile Web Service Internet Database Server Web Server Aplikasi Desktop Aplikasi Web Gambar 1-3. HTTP Service Dari paparan di atas maka diharapkan pembaca sudah mempunyai gambaran tentang apa itu web service dan manfaatnya. Selanjutnya pada ebook ini akan dibahas mengenai ASP.NET Web API yang merupakan framework yang didesain untuk menyederhanakan arsitektur web service. ASP.NET & Visual Studio 2013 Terdapat dua tipe aplikasi web ASP.NET yang dibangun dengan menggunakan Visual Studio, yaitu Web Site dan Web Application. Untuk lebih mengenal lebih dalam mengenai kedua hal tersebut bisa memanfaatkan ebook-ebook berikut ini yang dapat diunduh di http://www.rezafaisal.net/?p=902. Gambar 1-4. Ebook seri ASP.NET. 1-3 Rangkuman Pada bab ini telah dijelaskan beberapa hal sebagai berikut : 1. Pengantar web service. 2. Pengantar ASP.NET. 3. Pengantar Visual Studio. 1-4 2 Perkenalan Pada bagian ini akan dilakukan perkenalan dengan ASP.NET Web API dengan cara membuat kode program secara langsung. Kode program yang akan dibuat terdiri atas 2 cara yaitu : 1. 2. Project Web API, yaitu membuat kode program Web API secara khusus dari awal dengan template project yang telah disediakan. Penambahkan Web API pada existing project web, yaitu menambahkan class Web API controller pada project web application atau website ASP.NET Web Form atau ASP.NET MVC. Project Web API Berikut adalah langkah-langkah yang dilakukan untuk membuat project Web API. Langkah pertama adalah membuat project baru dengan cara klik File > New Project. Pada window Add New Project pilih Visual C# > Web > ASP.NET Web Application. Gambar 2-1. Window Add New Project. Tuliskan nama project pada kolom Name, kemudian klik tombol OK. Kemudian pada window New ASP.NET Project pilih Web API dan klik tombol OK. 1-5 Gambar 2-2. Window New ASP.NET Project. Hasilnya dapat dilihat pada area Solution Explorer seperti berikut ini. Gambar 2-3. Solution Explorer. Pada project ini selain terdapat class-class dan file-file utama Web API juga terdapat file-file pendukung seperti halaman web sebagai landing page dan help. Untuk mengaktifkan web 1-6 server dari project ini dan melihat pada web browser dengan cara klik kanan pada project WebAPI yang ada pada Solution Explorer kemudian pilih Debug > Start new instance. Dengan cara di atas dapat dilihat pada project sudah terdapat banyak file-file yang mungkin belum atau tidak diperlukan. Jika ingin membuat project kosong untuk implementasi Web API maka dapat dilakukan langkah-langkah berikut ini. Pilih File > New Project kemudian pada window Add New Project pilih Visual C# > Web > ASP.NET Web Application. Kemudian pada window New ASP.NET Project pilih Empty pada area Select a template dan centang Web API pada area Add folder and core reference for. Selanjutnya klik tombol OK. Gambar 2-4. Web API pada Empty template. Hasilnya dapat dilihat file-file yang terdapat pada project yang telah dibuat. 1-7 Gambar 2-5. Project Web API dengan Empty template. Langkah selanjutnya adalah menambahkan class Web API controller pada project tersebut dengan cara klik kanan pada folder Controllers kemudian pilih Add > Web API Controller Class (v2) seperti yang terlihat pada gambar di bawah ini. Dan beri nama ValuesController sebagai nama class tersebut. 1-8 Gambar 2-6. Menambah Web API Controller Class (v2). Dari kedua hal yang telah dilakukan di atas dapat dilihat beberapa kesamaan berupa file-file sebagai berikut : 1. 2. 3. WebApiConfig.cs yang terdapat pada folder App_Start. Global.asax yang terdapat pada /. ValuesController.cs yang terdapat pada folder Controllers. File WebApiConfig.cs berfungsi sebagai konfigurasi Web API routes yang menentukan bagaimana format url untuk mengakses class-class controller. Di bawah ini adalah isi dari file ini. WebApiConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace WebAPI.Empty { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); 1-9 } } } Pada kode di atas dapat dilihat baris di bawah ini. routeTemplate: "api/{controller}/{id}" dari format tersebut maka controller dapat diakses dengan cara menulis format url sebagai berikut : http://[nama_domain]/api/[nama_controller]/ Jika kode pada WebApiConfig.cs mempunyai baris sebagai berikut : routeTemplate: "webapi/{controller}/{id}" Maka format url untuk mengakses class controller akan menjadi sebagai berikut : http://[nama_domain]/webapi/[nama_controller] File kedua yang telah disebutkan adalah Global.asax dengan isi sebagai berikut : Global.asax using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Routing; namespace WebAPI.Empty { public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); } } } File ini berfungsi untuk memanggil dan mengaktifkan konfigurasi Web API pada class WebApiConfig.cs saat aplikasi web dijalankan. Pada kedua project di atas nama class controller yang ValuesController.cs maka dapat ditulis url sebagai berikut : telah dibuat adalah http://[nama_domain]/api/Values/ Sedangkan jika nama class controller adalah CalculateController.cs maka class ini akan dapat diakses dengan cara menulis url berikut : http://[nama_domain]/api/Calculate/ Dari contoh tersebut maka dapat disimpulkan nama class controller akan mempunyai format sebagai berikut : [nama_controller]Controller.cs 1-10 Web API pada Existing Project Web Dari penjelasan pada bagian sebelumnya maka jika ingin menambahkan class Web API Controller pada project web yang telah ada, yaitu dengan cara menambahkan tiga file dan dilakukan konfigurasi seperti yang telah disebutkan di atas. Pada bagian ini akan diterangkan langkah-langkah untuk menambahkan Web API, dalam hal ini adalah class Web API controller pada existing project web dengan tipe sebagai berikut : 1. 2. 3. ASP.NET Web Form Website. ASP.NET Web Form Web Application. ASP.NET MVC Web Application. ASP.NET Web Form Web Application Pada project Web Application secara default sudah memiliki file Global.asax sehingga yang perlu dilakukan adalah : Menambahkan folder App_Start. Menambahkan file WebApiConfig.cs ke dalam folder App_Start dengan isi seperti yang telah dijelaskan pada bagian sebelumnya. Menambahkan baris untuk mengaktifkan konfigurasi WebApiConfig.cs ke dalam file Global.asax. Menambahkan folder Controllers. Menambahkan class Web API Controller pada folder Controllers, pada saat melakukan proses ini secara otomatis akan ditambahkan reference yang berhubungan dengan Web API seperti System.Web.Http dan lain-lain. 1. 2. 3. 4. 5. Berikut ini adalah isi dari ketiga file yang telah dibuat tersebut. WebApiConfig.cs using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.Http; namespace ASPNET.WebForm.WebApp.App_Start { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } } 1-11 Global.asax.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Security; using System.Web.SessionState; using ASPNET.WebForm.WebApp.App_Start; namespace ASPNET.WebForm.WebApp { public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { GlobalConfiguration.Configure(WebApiConfig.Register); } } } ValuesController.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; namespace ASPNET.WebForm.WebApp.Controllers { public class ValuesController : ApiController { // GET api/<controller> public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/<controller>/5 public string Get(int id) { return "value"; } // POST api/<controller> public void Post([FromBody]string value) { } // PUT api/<controller>/5 public void Put(int id, [FromBody]string value) { } // DELETE api/<controller>/5 public void Delete(int id) { } } } 1-12 ASP.NET MVC Web Application Aplikasi web yang dibangun dengan ASP.NET MVC dibuat sebagai project Web Application seperti halnya yang telah dijelaskan pada bagian ASP.NET Web Form Web Application di atas, maka cara untuk menambahkan kemampuan Web API pada project ini mempunyai langkah-langkah yang sama seperti cara di atas. Yang perlu diperhatikan adalah urutan penulisan baris program pada file Global.asax di bawah ini. Baris GlobalConfiguration.Configure(WebApiConfig.Register); harus berada sebelum RouteConfig.RegisterRoutes(RouteTable.Routes);. Global.asax using using using using using using using using ASPNET.MVC.WebApp.App_Start; System; System.Collections.Generic; System.Linq; System.Web; System.Web.Http; System.Web.Mvc; System.Web.Routing; namespace ASPNET.MVC.WebApp { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); RouteConfig.RegisterRoutes(RouteTable.Routes); } } } Dan berikut adalah isi dari kedua file yang lain. WebApiConfig.cs using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.Http; namespace ASPNET.MVC.WebApp.App_Start { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); 1-13 } } } ValuesController.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; namespace ASPNET.MVC.WebApp.Controllers { public class ValuesController : ApiController { // GET api/<controller> public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/<controller>/5 public string Get(int id) { return "value"; } // POST api/<controller> public void Post([FromBody]string value) { } // PUT api/<controller>/5 public void Put(int id, [FromBody]string value) { } // DELETE api/<controller>/5 public void Delete(int id) { } } } ASP.NET Web Form Website Aplikasi web yang dibangun dengan menggunakan template Website mempunyai beberapa perbedaan prilaku jika dibandingkan dengan template Web Application. Oleh karena itu ketika menambahkan class Web API Controller akan terdapat perbedaan langkah-langkah yang dilakukan. Berikut ini adalah langkah-langkah untuk menambahkan class controller : 1. 2. 3. Menambahkan folder App_Code. Menambahkan file WebApiConfig.cs pada folder App_Code. Menambahkan file Global.asax. 1-14 Menambahkan baris untuk mengaktifkan konfigurasi WebApiConfig.cs ke dalam file Global.asax. Menambahkan class Web API Controller pada folder App_Code. 4. 5. Berikut ini adalah isi dari ketiga file tersebut. WebApiConfig.cs using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.Http; /// <summary> /// Summary description for WebApiConfig /// </summary> public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } Global.asax <%@ Application Language="C#" %> <script runat="server"> void Application_Start(object sender, EventArgs e) { // Code that runs on application startup WebApiConfig.Register(System.Web.Http.GlobalConfiguration.Configuration); } void Application_End(object sender, EventArgs e) { // Code that runs on application shutdown } void Application_Error(object sender, EventArgs e) { // Code that runs when an unhandled error occurs } void Session_Start(object sender, EventArgs e) { // Code that runs when a new session is started } void Session_End(object sender, EventArgs e) { // Code that runs when a session ends. 1-15 // Note: The Session_End event is raised only when the sessionstate mode // is set to InProc in the Web.config file. If session mode is set to StateServer // or SQLServer, the event is not raised. } </script> ValuesController.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; public class ValuesController : ApiController { // GET api/<controller> public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/<controller>/5 public string Get(int id) { return "value"; } // POST api/<controller> public void Post([FromBody]string value) { } // PUT api/<controller>/5 public void Put(int id, [FromBody]string value) { } // DELETE api/<controller>/5 public void Delete(int id) { } } Halaman Bantuan ASP.NET Web API Halaman bantuan ASP.NET Web API memberikan informasi daftar class controller dan daftar method didalamnya. Seperti yang dapat dilihat pada gambar di bawah ini. Pada contoh di bawah ini, terdapat dua class controler yaitu : 1. 2. OrganizationController.cs. ValuesController.cs. 1-16 Sehingga dapat dilihat pada halaman bantuan terdapat : 1. 2. Organization. Value. Gambar 2-7. Halaman bantuan Web API. Dapat dilihat pada gambar di atas, pada Organization controller hanya terdapat dua item pada kolom API, hal ini dikarena memang method yang terdapat pada class tersebut hanya dua method, seperti yang terlihat pada kode di bawah ini. OrganizationController.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; 1-17 namespace WebAPI.Controllers { public class OrganizationController : ApiController { // GET api/<controller> public IEnumerable<string> GetAll() { return new string[] { "value1", "value2" }; } // GET api/<controller>/5 public string GetById(int id) { return "value"; } } } Halaman bantuan ini hanya terdapat jika dibuat project dengan cara seperti yang diterangkan pada bagian Project Web API pada bab ini. Sedangkan jika Web API dibuat dengan cara seperti pada bagian Web API pada Existing Project Web di bab ini maka tidak akan ditemui halaman bantuan seperti ini. Untuk menambahkan halaman bantuan secara mandiri dapat dilakukan dengan mengikuti langkah-langkah berikut ini. Langkah pertama yang dilakukan adalah meninstall paket Microsoft ASP.NET Web API 2.1 Help Page dengan menggunakan fitur Manage NuGet Packages, dengan cara klik kanan pada project yang diinginkan kemudian pilih fitur tersebut. Gambar 2-8. Window Manage NuGet Packages. Pilih Microsoft ASP.NET Web API 2.1 Help Page kemudian klik tombol Install. Setelah proses pengunduhan dan installasi paket tersebut selesai maka akan dapat dilihat terdapat tambahan 1-18 folder dan file pada project, yaitu terdapat folder Area seperti yang terlihat pada gambar di bawah ini. Gambar 2-9. Folder Area. Selanjutnya untuk mengakses halaman ini dengan cara mengakses http://[nama_domain]/Help/. url berikut Cara ini dapat diimplementasikan pada template project tipe Web Application dan Website, baik untuk ASP.NET Web Form atau ASP.NET MVC. HTTP Verb Pada contoh kode di atas terdapat 5 method yang akan menjadi API dan terdiri atas 4 kelompok berdasarkan HTTP verb yaitu : 1. 2. GET, dalam penggunaannya method untuk kelompok HTTP verb ini adalah untuk mengambil atau membaca data. Method pada kelompok ini biasanya mengembalikan suatu keluaran/output yang kadang bisa disebut sebagai function. POST, dalam penggunaannya method untuk kelompok HTTP verb ini adalah untuk membuat (create) item/resource baru. Kelompok method ini biasanya tidak mengembalikan keluaran/output yang kadang disebut procedure. 1-19 3. PUT, dalam penggunaannya method untuk kelompok HTTP verb ini adalah untuk mengupdate item/resource yang telah ada. (procedure seperti pada point 2). DELETE, dalam penggunaannya method untuk kelompok HTTP verb ini adalah untuk menghapus item/resource yang telah ada. (procedure seperti pada point 2). 4. Untuk itu nama-nama method yang berada pada suatu class Web API controller akan sama dengan HTTP verb di atas yaitu Get, Post, Put dan Delete sebagai prefix dari nama method pada class controller. Sebagai contoh jika nama method adalah GetProduct, GetProductById atau GetAll maka API dari method tersebut akan termasuk dalam kelompok HTTP verb GET. Sedangkan jika nama method adalah PostProduct maka API dari method tersebut akan termasuk dalam kelompok HTTP verb POST. Cara lain untuk menentukan method ke dalam suatu HTTP verb bisa dengan cara memberikan atribute pada method tersebut. Sebagai contoh pada kode di bawah ini. ValuesController.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; namespace ASPNET.WebForm.WebApp.Controllers { public class ValuesController : ApiController { [HttpGet] public IEnumerable<string> Retrieve() { return new string[] { "value1", "value2" }; } [HttpGet] public string Retrieve(int id) { return "value"; } [HttpPost] public void Insert([FromBody]string value) { } [HttpPut] public void Update(int id, [FromBody]string value) { } [HttpDelete] public void Delete(int id) { } } } Dari kode di atas dapat dilihat penggunaan atribute [HttpGet], [HttpPost], [HttpPut] dan [HttpDelete] untuk menentukan HTTP verb untuk akses API dari suatu method. Dengan penggunaan atribute ini maka nama method dapat bebas sesuai keinginan. 1-20 Hasilnya dari kode di atas dapat dilihat pada daftar API yang ada pada halaman bantuan seperit yang terlihat pada gambar di bawah ini. Gambar 2-10. Daftar API. Mengakses Web API Setelah penjelasan di atas, pada bagian ini akan dijelaskan bagaimana mengakses dan menguji Web API. Jika project Web API masih dalam tahap development di Visual Studio, maka pastikan terlebih dahulu telah project aplikasi web tersebut telah dijalankan dan IIS Express sebagai web server masih aktif. Cara yang dapat dilakukan untuk melakukan hal ini adalah dengan klik kanan pada project kemudian pilih Debug > Start new instance. Atau jika pada Website, klik kanan pada website kemudian pilih View in Browser. Maka secara otomatis web browser akan dijalankan dan halaman default web pada project akan ditampilkan. Untuk mengakses API, cukup ketikkan pada address bar web browser dengan format seperti berikut : http://[nama_domain]:port/api/[nama_controller] Misal alamat akses project tersebut adalah http://localhost:11739/ dan nama class controller adalah ValuesController.cs maka alamat yang diakses adalah : http://localhost:11739/api/Values/ Tetapi akses via address bar pada web browser terbatas hanya untuk akses API yang bersifat GET, seperti contoh di atas. Untuk mengakses atau mencoba API yang bersifat POST, PUT atau DELETE tidak bisa dilakukan dengan cara menuliskan url pada address bar di web browser. Untuk itu perlu bantuan tool client untuk membantu mengakses Web API. 1-21 A Simple Test Client for ASP.NET Web API Tool ini adalah tool client untuk ASP.NET Web API yang melekat pada halaman bantuan Web API sebagai fitur tambahan. Tool ini hanya dapat digunakan untuk mengakses dan menguji Web API pada project tempat tool ini diinstall. Sehingga tidak bisa digunakan untuk menguji Web API lintas project atau lintas website. Untuk menggunakan tool ini harus dipastikan pada project sudah memiliki halaman bantuan Web API seperti yang telah dibahas pada bagian Halaman Bantuan ASP.NET Web API di atas. Kemudian lakukan langkah-langkah berikut untuk menginstall tool ini. Klik kanan pada project yang diinginkan, pilih Manage NuGet Packages, kemudian ketikkan kata kunci A Simple Test Client for ASP.NET Web API pada kolom pencarian. Maka akan dapat dilihat daftar berikut ini pada window Manage NuGet Packages. Gambar 2-11. Manage NuGet Package – Microsoft.AspNet.WebApi.Client. Kemudian klik install dan setelah proses pengunduhan dan installasi selesai, maka langkah selanjutnya adalah melakukan modifikasi file Api.cshtml yang terletak pada folder Areas\HelpPage\Views\Help\ dengan kode seperti berikut ini. Api.cshtml @using System.Web.Http @using WebAPI.Areas.HelpPage.Models @model HelpPageApiModel @{ var description = Model.ApiDescription; ViewBag.Title = description.HttpMethod.Method description.RelativePath; } + " " + <div id="body"> <section class="featured"> <div class="content-wrapper"> <p> 1-22 @Html.ActionLink("Help Page Home", "Index") </p> </div> </section> <section class="content-wrapper main-content clear-fix"> @Html.DisplayFor(m => Model) </section> </div> @Html.DisplayForModel("TestClientDialogs") @section Scripts { @Html.DisplayForModel("TestClientReferences") <link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" /> } Baris yang ditambahkan pada file di atas adalah 6 baris terakhir tersebut. Hasil ini nanti akan dapat dilihat ketika mengakses halaman bantuan, lebih tepatnya ketika salah satu API yang terdapat pada daftar API yang dimiliki oleh controller di klik. Gambar 2-12. Daftar API pada class controller Values. 1-23 Gambar 2-13. Tombol Test API. Ketika tombol Test API diklik maka akan dapat dilihat form seperti berikut : Gambar 2-14. Form Test Client – Get api/Values. Dari gambar di atas, pada form tersebut dapat dilihat HTTP verb GET yang digunakan untuk mengakses API ini. Dan berikut adalah ketika tombol Send diklik. 1-24 Gambar 2-15. Form Test Client – response for Get api/Value. Pada output di atas, terdapat tiga output yang dapat dilihat yaitu status, headers dan body, secara kasat mata lebih lengkap informasi yang dilihat jika dibandingkan dengan akses pada web browser. Dan berikut ini adalah form-form yang dapat dapat dilihat ketika melihat detail API untuk POST, PUT dan DELETE. Gambar 2-16. Form Test Client – Post api/Values. 1-25 Gambar 2-17. Form Test Client – response for POST api/Values. Gambar 2-18. Form Test Client – PUT api/Values 1-26 Gambar 2-19. Form Test Client – response for PUT api/Values. Gambar 2-20. Form Test Client – Delete api/Values. 1-27 Gambar 2-21. Form Test Client – Response for DELETE api/Values. Dengan bantuan tool ini maka semua API yang telah dibuat dapat diakses dan diuji. Tool ini akan digunakan untuk menguji keberhasilan dari API yang akan dijelaskan pada ebook ini. Rangkuman Pada bab ini telah diterangkan beberapa hal untuk berkenalan dengan ASP.NET Web API. Hal-hal yang telah dibahas pada bagian ini adalah : 1. 2. 3. 4. 5. Pembuatan aplikasi web ASP.NET Web API dengan menggunakan template porject yang telah disediakan pada Visual Studio. Pembuatan class controller Web API pada project yang telah ada sebelumnya. Pembuatan ini juga disertai dengan penjelasan pembuatan folder dan file pendukung serta konfigurasi yang harus dilakukan agar class controller tersebut dapat diakses dan digunakan. Cara mengakses Web API yang telah dibuat. Pembuatan halaman bantuan (help page) Web API yang berguna untuk melihat daftar class controller serta API yang terdapat didalamnya. Installasi dan konfigurasi Tool test client yang sederhana yang berfungsi untuk mengakses dan menguji API yang telah dibuat. 1-28 3 Contoh-Contoh Web API Pada bagian ini akan diberikan contoh-contoh sederhana Web API yang dimulai dengan pembuatannya, pengaksesan dan pengujiannya dengan menggunakan tool test client yang telah dibahas pada bab sebelumnya. API Matematika API ini adalah berisi kode sederhana yang berfungsi untuk melakukan beberapa hal berikut ini : 1. 2. 3. Menampilkan bilangan 1 sampai dengan 10. Menampilkan kata dari suatu angka yang dimasukkan antara 1 sampai 10. Melakukan operasi matematika sederhana pada dua bilangan yang dimasukkan. API ini hanya terdiri atas method Get. Berikut adalah kode dari API ini : MatematikaController.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; namespace ContohWebAPI.Controllers { public class MatematikaController : ApiController { /// <summary> /// Mengembalikan bilangan 1 sampai 10. /// </summary> /// <returns></returns> public IEnumerable<int> Get() { return new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; } /// <summary> /// Mengembalikan string dari angka yang dimasukkan /// </summary> /// <param name="id"></param> /// <returns></returns> public string Get(int id) { string result = String.Empty; if (id.Equals(1)) { result = "Satu"; } else if (id.Equals(2)) 1-29 { result = "Dua"; } else if (id.Equals(3)) { result = "Tiga"; } else if (id.Equals(4)) { result = "Empat"; } else if (id.Equals(5)) { result = "Lima"; } else if (id.Equals(6)) { result = "Enam"; } else if (id.Equals(7)) { result = "Tujuh"; } else if (id.Equals(8)) { result = "Delapan"; } else if (id.Equals(9)) { result = "Sembilan"; } else if (id.Equals(10)) { result = "Sepuluh"; } return result; } /// <summary> /// Operasi matematika sederhana. /// </summary> /// <param name="op">operator</param> /// <param name="bil1">bilangan pertama</param> /// <param name="bil2">bilangan kedua</param> /// <returns></returns> public double Get(string op, string bil1, string bil2) { double result = 0; int bilangan1 = Convert.ToInt32(bil1); int bilangan2 = Convert.ToInt32(bil2); if (op.Equals("tambah")) { result = bilangan1 + bilangan2; } else if (op.Equals("kurang")) { result = bilangan1 - bilangan2; } else if (op.Equals("kali")) 1-30 { result = bilangan1 * bilangan2; } else if (op.Equals("bagi")) { result = bilangan1 / bilangan2; } return result; } } } Untuk menguji API ini digunakan tool test client yang telah dibahas sebelumnya. Menampilkan Bilangan 1 sampai 10 Dengan menggunakan tool test client maka dapat dilihat form berikut ini. Gambar 3-1. Form akses GET api/Matematika. Dari form tersebut didapat beberapa informasi sebagai berikut : 1. 2. HTTP verb yang digunakan adalah GET. Cara akses API ini dengan menggunakan url http://[nama_domain]/api/Matematika. Hasil yang dapat dilihat setelah mengklik tombol Send adalah seperti pada gambar di bawah ini. Gambar 3-2. Output API GET api/Matematika. Informasi yang didapat dari respose yang diberikan adalah : 1. Status : 200/OK. 1-31 2. 3. Header yang berisikan informasi header dari output. Body yang berisikan output sesuai dengan output method dari class controller berikut. public IEnumerable<int> Get() { return new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; } Menampilkan Kata dari Angka yang Dimasukkan Gambar berikut ini menunjukkan form untuk mengakses API GET api/Matematika/{id}, dimana {id} adalah angka yang akan dimasukkan sebagai inputan. Gambar 3-3. Form akses GET api/Matematika/{id} Dari form tersebut didapat beberapa informasi sebagai berikut : 1. 2. HTTP verb yang digunakan adalah GET. Cara akses API ini dengan http://[nama_domain]/api/Matematika/{id}. menggunakan url Masukkan nilai angka 1 sampai dengan 10 pada kolom input pada bagian URI parameters kemudian klik tombol Send dan akan dapat dilihat hasil seperti berikut ini : Gambar 3-4. Output API GET api/Matematika{id} Informasi yang didapat dari respose yang diberikan adalah : 1. Status : 200/OK. 1-32 2. 3. Header yang berisikan informasi header dari output. Body yang berisikan output sesuai dengan output method dari class controller berikut public string Get(int id) { string result = String.Empty; if (id.Equals(1)) { result = "Satu"; } else if (id.Equals(2)) { result = "Dua"; } else if (id.Equals(3)) { result = "Tiga"; } else if (id.Equals(4)) { result = "Empat"; } else if (id.Equals(5)) { result = "Lima"; } else if (id.Equals(6)) { result = "Enam"; } else if (id.Equals(7)) { result = "Tujuh"; } else if (id.Equals(8)) { result = "Delapan"; } else if (id.Equals(9)) { result = "Sembilan"; } else if (id.Equals(10)) { result = "Sepuluh"; } return result; } Melakukan Operasi Matematika Sederhana pada Dua Bilangan Pada gambar di bawah ini merupakan form untuk akses API yang berfungsi untuk melakukan operasi matematika sederhana pada dua bilangan. 1-33 Gambar 3-5. Form akses API GET api/Matematika?op={op}&bil1={bil1}&bil2={bil2} Informasi yang dapat dilihat berdasarkan gambar tersebut adalah : 1. 2. 3. HTTP verb yang digunakan adalah GET. url akses API ini adalah http://[nama_domain]/api/Matematika?op=+&bil1=7&bil2=13 Pada bagian URI parameters tiga kolom inputan yang jumlahnya sesuai dengan jumlah parameter pada method ini yang terdapat pada class controller berikut. public double Get(string op, string bil1, string bil2) { double result = 0; int bilangan1 = Convert.ToInt32(bil1); int bilangan2 = Convert.ToInt32(bil2); if (op.Equals("tambah")) { result = bilangan1 + bilangan2; } else if (op.Equals("kurang")) { result = bilangan1 - bilangan2; } else if (op.Equals("kali")) { result = bilangan1 * bilangan2; } else if (op.Equals("bagi")) { result = bilangan1 / bilangan2; } return result; } Dari informasi tersebut akan dapat dilihat keterkaitan antara parameter yang terdapat pada method dalam class controller dengan parameter untuk akses API ini. Pada gambar berikut adalah response dari API ini. 1-34 Gambar 3-6. Response dari API GET api/Matematika? ?op={op}&bil1={bil1}&bil2={bil2} API CRUD – LINQ to SQL Contoh ini akan memberikan penjelasan penggunaan Web API untuk proses create, retrieve, update dan delete (CRUD) pada database. Sebelumnya perlu dilakukan beberapa persiapan sebelum dilakukan pembuatan API CRUD ini, yaitu : 1. 2. Pembuatan database dan tabel. Pembuatan class LINQ to SQL. Pembuatan database dan tabel. Pada contoh ini terlebih dahulu dibuat database, sebagai contoh nama database yang akan digunakan adalah AkademikDB yang didalamnya terdapat sebuah tabel dengan nama Mahasiswa. Pada contoh ini digunakan SQL Server Express sehingga untuk membuat database yang dibutuhkan cukup dengan langkah membuat folder App_Data pada project. Kemudian klik kanan pada folder App_Data dan pilih Add > SQL Server Database. Gambar 3-7. Menambahkan database pada project. 1-35 Kemudian dilanjutkan dengan menambahkan tabel Mahasiswa. Pada gambar berikut ini dapat dilihat atribut-atribut dari tabel Mahasiswa beserta contoh datanya. Langkah selanjutnya adalah membuat class LINQ to SQL dengan nama Akademik.dbml. Pada kasus ini, file Akademik.dbml ditambahkan ke dalam folder Models. Gambar 3-8. LINQ to SQL Classes – Akademik.dbml. Kemudian tambahkan data class Mahasiswa dengan cara drag tabel Mahasiswa ke area designer Akademik.dbml. 1-36 Gambar 3-9. Data class Mahasiswa. Setelah persiapan hal-hal di atas telah dilakukan, maka dapat dapat ditambahkan class Web API controller dengan nama MahasiswaController.cs ke dalam folder Controllers. Berikut ini adalah kode dari class ini. MahasiswaController.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; using ContohWebAPI.Models; namespace ContohWebAPI.Controllers { public class MahasiswaController : ApiController { // GET api/<controller> public IQueryable<Mahasiswa> GetMahasiswa() { AkademikDataContext db = new AkademikDataContext(); var data = db.Mahasiswas.Select(p => p); return data; } // GET api/<controller>/5 public Mahasiswa GetMahasiswa(int nim) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); return item; } 1-37 // POST api/<controller> public void Post(int nim, string nama, string alamat, int umur, string jurusan) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = new Mahasiswa(); item.NIM = nim; item.Nama = nama; item.Alamat = alamat; item.Umur = umur; item.Jurusan = jurusan; db.Mahasiswas.InsertOnSubmit(item); db.SubmitChanges(); } // PUT api/<controller>/5 public void Put(int nim, string nama, string alamat, int umur, string jurusan) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); item.Nama = nama; item.Alamat = alamat; item.Umur = umur; item.Jurusan = jurusan; db.SubmitChanges(); } // DELETE api/<controller>/5 public void Delete(int nim) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); db.Mahasiswas.DeleteOnSubmit(item); db.SubmitChanges(); } } } Create API yang berfungsi untuk create data baru adalah kode berikut ini : public void Post(int nim, string nama, string alamat, int umur, string jurusan) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = new Mahasiswa(); item.NIM = nim; item.Nama = nama; item.Alamat = alamat; item.Umur = umur; item.Jurusan = jurusan; db.Mahasiswas.InsertOnSubmit(item); 1-38 db.SubmitChanges(); } Pada gambar berikut diperlihatkan form POST api/Mahasiswa pada tool test client untuk menguji API dari method di atas. Gambar 3-10. Form POST api/Mahasiswa. Dari pada gambar di bawah ini adalah respose dari aksi di atas. Gambar 3-11. Response POST api/Mahasiswa. Pada gambar di bawah dapat dilihat data baru yang ditambahkan pada tabel Mahasiswa. 1-39 Gambar 3-12. Hasil proses create data. Retrieve Untuk mengambil data (retrieve) disediakan dua method dengan HTTP verb GET. Untuk mengambil seluruh data mahasiswa digunakan method dengan kode berikut ini. public IQueryable<Mahasiswa> GetMahasiswa() { AkademikDataContext db = new AkademikDataContext(); var data = db.Mahasiswas.Select(p => p); return data; } Pada gambar di bawah ini diperlihatkan form GET api/Mahasiswa. Gambar 3-13. Form GET api/Mahasiswa. Hasil dari API ini akan memberikan response berupa data berikut ini : [ {"NIM":1,"Nama":"Reza","Alamat":"Alamat 1","Umur":30,"Jurusan":"Ilkom"}, {"NIM":2,"Nama":"Faisal","Alamat":"Alamat 2","Umur":31,"Jurusan":"Ilkom"}, {"NIM":3,"Nama":"Fahlevi","Alamat":"Alamat 3","Umur":32,"Jurusan":"Ilkom"}, {"NIM":4,"Nama":"Adi","Alamat":"Banjarbaru","Umur":25,"Jurusan":"Ilkom"} ] 1-40 Dan gambar berikut memperlihatkan response dari GET api/Mahasiswa. Gambar 3-14. Response GET api/Mahasiswa. Sedangkan untuk mengambil data mahasiswa dengan nim tertentu dapat menggunakan method dengan kode di bawah ini : public Mahasiswa GetMahasiswa(int nim) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); return item; } Berikut ini adalah form GET api/Mahasiswa/nim. Gambar 3-15. Form GET api/Mahasiswa/nim. 1-41 Hasil dari API ini adalah sebagai berikut : { "NIM":4, "Nama":"Adi", "Alamat":"Banjarbaru", "Umur":25, "Jurusan":"Ilkom" } Dan gambar berikut ini adalah gambar response dari API ini. Gambar 3-16. Response api/Mahasiswa/nim. Update Untuk update data mahasiswa digunakan kode method berikut ini. public void Put(int nim, string nama, string alamat, int umur, string jurusan) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); item.Nama = nama; item.Alamat = alamat; item.Umur = umur; item.Jurusan = jurusan; db.SubmitChanges(); } Gambar di bawah ini adalah form yang dipergunakan untuk input data untuk menguji API ini. 1-42 Gambar 3-17. Form PUT api/Mahasiswa. Dan berikut adalah response dari API ini. Gambar 3-18. Response PUT api/Mahasiswa. Dari berikut adalah perubahan data yang dapat dilihat pada tambal Mahasiswa. Gambar 3-19. Data telah diupdate. 1-43 Delete Kode berikut di bawah ini adalah method yang digunakan untuk menghapus data berdasarkan nim yang dimasukkan. public void Delete(int nim) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); db.Mahasiswas.DeleteOnSubmit(item); db.SubmitChanges(); } Berikut ini adalah form untuk menguji API DELETE api/Mahasiswa. Gambar 3-20. Form DELETE api/Mahasiswa. Dan berikut adalah response dari API ini. Gambar 3-21. Response DELETE api/Mahasiswa. 1-44 Penggunaan Atribute [FromBody] Pada contoh kode untuk input (create) dan update data pada bagian API CRUD – LINQ to SQL dapat dilihat parameter-parameter dari method sesuai dengan atribute dari tabel Mahasiswa atau sesuai dengan class data LINQ to SQL. Dan berikut adalah kode untuk input (create) dan update data. public void Post(int nim, string nama, string alamat, int umur, string jurusan) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = new Mahasiswa(); item.NIM = nim; item.Nama = nama; item.Alamat = alamat; item.Umur = umur; item.Jurusan = jurusan; db.Mahasiswas.InsertOnSubmit(item); db.SubmitChanges(); } // PUT api/<controller>/5 public void Put(int nim, string nama, string alamat, int umur, string jurusan) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); item.Nama = nama; item.Alamat = alamat; item.Umur = umur; item.Jurusan = jurusan; db.SubmitChanges(); } Pada method Post dan Put terdapat parameter-parameter berikut ini : 1. 2. 3. 4. 5. nim. nama. alamat. umur. jurusan. Jika suatu saat perlu dilakukan penambahan atribute pada tabel dan pada class data LINQ to SQL maka method di atas harus dilakukan sedkit perubahan. Untuk meminimalisasi perubahan pada kode di dalam class controller maka untuk kasus ini dapat dengan memanfaatkan atribute [FromBody]. Sehingga kode di atas akan diubah menjadi kode di bawah ini. // POST api/<controller> public void Post([FromBody]Mahasiswa mhs) { AkademikDataContext db = new AkademikDataContext(); db.Mahasiswas.InsertOnSubmit(mhs); db.SubmitChanges(); 1-45 } // PUT api/<controller>/5 public void Put(int nim, [FromBody]Mahasiswa mhs) { AkademikDataContext db = new AkademikDataContext(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); item.Nama = mhs.Nama; item.Alamat = mhs.Alamat; item.Umur = mhs.Umur; item.Jurusan = mhs.Jurusan; db.SubmitChanges(); } Pada tahap pengujian, dapat dilihat form POST api/Mahasiswa seperti pada gambar di bawah ini. Gambar 3-22. Form POST api/Mahasiswa. Berbeda dengan form POST sebelumnya, pada form di atas tidak terdapat lagi kolom parameter yang berfungsi untuk mengisi nilai-nilai parameter untuk method POST. Pada method Post terdapat parameter [FromBody] Mahasiswa mhs, hal ini membuat cara input nilai data menjadi berbeda. Hal ini terlihat terdapat area Body pada form di atas. Isi dari input pada area Body ini adalah objek Mahasiswa yang ditulis dalam format JSON seperti berikut : { "NIM": 6, "Nama": "Nama 6", "Alamat": "Alamat 6", "Umur": 21, "Jurusan": "Ilkom" } Pada form PUT juga terdapat perbedaan dengan form PUT sebelumnya seperti yang terlihat pada gambar di bawah ini. 1-46 Gambar 3-23. Form PUT api/Mahasiswa. API CRUD – Entity Framework Pada contoh class controller MahasiswaController.cs di atas yaitu pada bagian API CRUD – LINQ to SQL terdapat perbedaan antara method-method kelompok HTTP verb GET dengan method-method kelompok lainnya (POST, PUT, DELETE). Perbedaan yang paling mendasar adalah method-method kelompok HTTP verb GET mengeluarkan output (return value) berupa string dengan format JSON sebagai data yang di-request. Sedangkan kelompok lainnya (POST, PUT, DELETE) adalah method tanpa mengeluarkan output (void). Perbedaan ini juga dapat dilihat dari response pada tool test client. Gambar 3-24. Respose GET dan POST. Pada kedua gambar di atas dapat dilihat perbedaan yang terlihat pada bagian : 1. 2. Status, response yang diberikan untuk API bertipe GET memiliki status 200/OK sedangkan untuk API bertipe POST memiliki nilai status 204/No Content. Body, pada bagian ini terdapat nilai berupa data mahasiswa dalam format JSON sebagai response GET, sedangkan pada bagian body di form response POST bernilai kosong. 1-47 Pada bagian ini akan dibuat class controller dengan cara yang sedikit berbeda dengan API pada bagian sebelumnya. Berikut ini adalah langkah-langkah yang akan dilakukan pada bagian ini. ADO.NET Entity Data Model Untuk implementasi Entity Framework pada API ini maka terlebih dahulu perlu ditambahakan ADO.NET Entity Data Model pada project. Pertama adalah dengan klik kanan pada project kemudian pilih Add > Add New Item. Gambar 3-25. Window Add New Item – ADO.NET Entity Data Model Akademik.edmx Pada kolom input Name berikan nilai Akademik.edmx kemudian klik tombol Add. Gambar 3-26. Entity Data Model Wizard – Generate from Database. 1-48 Gambar 3-27. Pembuatan connection string. Gambar 3-28. Pemilihan versi Entity Framework. 1-49 Gambar 3-29. Pemilihan tabel. Gambar 3-30. Antarmuka designer Akademik.edmx. Class OutputModel.cs Hal lain yang perlu disiapkan adalah membuat class yang akan menjadi model untuk output response dari API. Format output tersebut akan seperti berikut ini : { "status": "sample string 1", "data": {}, "message": "sample string 3" } 1-50 Keterangan : 1. 2. status, adalah atribut yang memberikan nilai success dan error dari API yang diakses. data, adalah atribut yang akan memberikan data dari API yang diakses dalam format JSON. Dalam kasus ini jika diminta data mahasiswa maka bagian tersebut akan memberikan data mahasiswa seperti contoh berikut ini. { "status":"success", "data":[ { "NIM":1, "Nama":"Reza", "Alamat":"Alamat 1", "Umur":30,"Jurusan":"Ilkom" }, { "NIM":2, "Nama":"Faisal", "Alamat":"Alamat 2", "Umur":31,"Jurusan":"Ilkom" } ], "message":"" } 3. message, atribut ini akan berisi string yang berisi pesan yang berhubungan dengan operasi yang dilakukan, sebagai contoh pesan untuk memberitahukan jika data telah berhasil disimpan atau pesan jika data telah berhasil dihapus. Untuk membuat format output response seperti itu maka dibuat class OutputModel.cs seperti berikut ini. OutputModel.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace API.CRUD.EF.Models { public class OutputModel { public string status { get; set; } public object data { get; set; } public string message { get; set; } } } Class MahasiswaController.cs Selanjutnya adalah membuat class Web API Controller dengan nama MahasiswaController.cs. Method-method pada class ini akan berbeda dari segi penamaan dan jenisnya jika dibandingkan pada contoh sebelumnya. Seluruh method pada class ini akan mengembalikan output (return value) berupa object dari class OutputModel.cs yang telah dibuat sebelumnya. Kemudian pada class ini juga digunakan penggunaan atribut [HttpGet], [HttpPost], [HttpPut] dan [HttpDelete] pada method yang bersesuaian. 1-51 Berikut ini adalah kode dari class MahasiswaController.cs. MahasiswaController.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; using API.CRUD.EF.Models; namespace API.CRUD.EF.Controllers { public class MahasiswaController : ApiController { [HttpGet] public OutputModel Select() { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); var data = db.Mahasiswas.Select(p => p); output.status = "success"; output.message = String.Empty; output.data = data; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; } [HttpGet] public OutputModel SelectById(int nim) { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); Mahasiswa item = db.Mahasiswas.Where(p p.NIM.Equals(nim)).Single<Mahasiswa>(); => output.status = "success"; output.message = String.Empty; output.data = item; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } 1-52 return output; } [HttpPost] public OutputModel Save([FromBody]Mahasiswa mhs) { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); db.Mahasiswas.Add(mhs); db.SaveChanges(); output.status = "success"; output.message = "Data mahasiswa berhasil disimpan."; output.data = String.Empty; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; } [HttpPut] public OutputModel Update(int nim, [FromBody]Mahasiswa mhs) { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); Mahasiswa item = db.Mahasiswas.Where(p p.NIM.Equals(nim)).Single<Mahasiswa>(); => item.Nama = mhs.Nama; item.Alamat = mhs.Alamat; item.Umur = mhs.Umur; item.Jurusan = mhs.Jurusan; db.SaveChanges(); output.status = "success"; output.message = "Data mahasiswa dengan NIM " + nim + " berhasil diupdate."; output.data = String.Empty; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; } 1-53 [HttpDelete] public OutputModel Remove(int nim) { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); Mahasiswa item = db.Mahasiswas.Where(p p.NIM.Equals(nim)).Single<Mahasiswa>(); db.Mahasiswas.Remove(item); db.SaveChanges(); => output.status = "success"; output.message = "Data mahasiswa dengan NIM " + nim + " berhasil dihapus."; output.data = String.Empty; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; } } } Dapat diperhatikan setiap method di atas adalah berupa function yang artinya akan mengembalikan nilai, dalam hal ini adalah berupa object dari class OutputModel. Create Berikut ini adalah method yang berfungsi untuk input data baru ke dalam database. Method ini merupakan function yang mengembalikan nilai dan method ini memiliki atribut [HttpPost]. [HttpPost] public OutputModel Save([FromBody]Mahasiswa mhs) { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); db.Mahasiswas.Add(mhs); db.SaveChanges(); output.status = "success"; output.message = "Data mahasiswa berhasil disimpan."; output.data = String.Empty; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; 1-54 } Gambar berikut adalah form akses POST api/Mahasiswa. Gambar 3-31. Form POST api/Mahasiswa Gambar 3-32. Response POST api/Mahasiswa Dari gambar di atas dapat dilihat response dari API POST api/Mahasiswa memberikan output seperti yang terlihat pada bagian body. Retrieve Untuk aksi retrieve terdapat dua method, yaitu untuk menampilkan seluruh dan untuk menampilkan sebuah data yang dipilih sesuai dengan nilai NIM mahasiswa yang dimasukkan. Berikut adalah kode dari kedua method tersebut. [HttpGet] public OutputModel Select() { OutputModel output = new OutputModel(); 1-55 try { AkademikEntities db = new AkademikEntities(); var data = db.Mahasiswas.Select(p => p); output.status = "success"; output.message = String.Empty; output.data = data; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; } [HttpGet] public OutputModel SelectById(int nim) { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); output.status = "success"; output.message = String.Empty; output.data = item; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; } Berikut adalah form dan response dari API api/Mahasiswa untuk menampilkan seluruh data. Gambar 3-33. Form API GET api/Mahasiswa. 1-56 Gambar 3-34. Response API GET api/Mahasiswa. Sedangkan berikut adalah form dan response dari API GET api/Mahasiswa?nim={nilai_nim}. Gambar 3-35. Form API GET api/Mahasiswa?nim={nilai} Gambar 3-36. Response api/Mahasiswa?nim={nilai} 1-57 Update Berikut adalah kode dari method yang akan berfungsi sebagai API untuk update data pada database. [HttpPut] public OutputModel Update(int nim, [FromBody]Mahasiswa mhs) { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); item.Nama = mhs.Nama; item.Alamat = mhs.Alamat; item.Umur = mhs.Umur; item.Jurusan = mhs.Jurusan; db.SaveChanges(); output.status = "success"; output.message = "Data mahasiswa dengan NIM " + nim + " berhasil diupdate."; output.data = String.Empty; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; } Berikut ini adalah gambar form akses API ini. Gambar 3-37. Form PUT api/Mahasiswa 1-58 Gambar 3-38. Response PUT api/Mahasiswa. Delete Di bawah ini adalah method yang berfungsi sebagai API untuk menghapus data yang dipilih. [HttpDelete] public OutputModel Remove(int nim) { OutputModel output = new OutputModel(); try { AkademikEntities db = new AkademikEntities(); Mahasiswa item = db.Mahasiswas.Where(p => p.NIM.Equals(nim)).Single<Mahasiswa>(); db.Mahasiswas.Remove(item); db.SaveChanges(); output.status = "success"; output.message = "Data mahasiswa dengan NIM " + nim + " berhasil dihapus."; output.data = String.Empty; } catch (Exception ex) { output.status = "error"; output.message = ex.Message; output.data = null; } return output; } Dan gambar berikut adalah gambar dari tool test client yang digunakan untuk menguji API ini. 1-59 Gambar 3-39. Form DELETE api/Mahasiswa. Gambar 3-40. Response DELETE api/Mahasiswa. Berikut ini adalah contoh response jika terjadi kesalahan, misal dimasukkan nilai NIM yang tidak terdapat dalam tabel Mahasiswa. Gambar 3-41. Response DELETE api/Mahasiswa yang menampilkan kesalahan. 1-60 4 Pemrograman Akses Web API Pada bagian ini akan dijelaskan bagaimana mengakses Web API yang telah dibuat secara pemrograman dengan beberapa teknologi yang telah tersedia pada .NET Platform seperti Windows Form, ASP.NET Web Form atau Windows Phone. Matematika.Console Pada bagian ini dijelaskan bagaimana mengakses Web API dari aplikasi console. Aplikasi console yang dibuat akan mengakses class Web API controller MatematikaController.cs yang telah dibuat sebelumnya. Berikut adalah langkah-langkah yang akan dilakukan untuk membuat aplikasi sederhana ini. Setelah project console dibuat, maka langkah selanjutnya adalah menambahkan Microsoft ASP.NET Web API 2.1 Client Library pada project tersebut. Cara mudah untuk melakukan ini adalah dengan menggunakan fitur Manage NuGet Packages kemudian gunakan kata kunci berikut Microsoft.AspNet.WebApi.Client maka akan didapat daftar berikut ini. Gambar 4-1. Manage NuGet Packages – Microsoft ASP.NET Web API 2.1 Client Library. Klik tombol Install untuk menginstall. 1-61 Gambar 4-2. Installasi Microsoft ASP.NET Web API 2.1 Client Library. Hasilnya dapat dilihat pada folder Reference, terdapat tambahan namespace baru seperti System.Net.Http dan System.Net.Http.Formating. Gambar 4-3. Folder Reference – System.Net.Http dan System.Net.Http.Formating. 1-62 Selanjutnya pada class Program.cs akan ditambah baris-baris kode seperti berikut ini. Program.cs using using using using using using using System; System.Collections.Generic; System.Linq; System.Net.Http; System.Net.Http.Headers; System.Text; System.Threading.Tasks; namespace Matematika.Console { class Program { static void Main(string[] args) { RunAsync().Wait(); System.Console.ReadKey(); } static async Task RunAsync() { using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:8492/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response client.GetAsync("api/Matematika/"); if (response.IsSuccessStatusCode) { = await System.Console.WriteLine(response.Content.ReadAsStringAsync().Result); } else { System.Console.WriteLine(response.StatusCode); } System.Console.WriteLine(); response = await client.GetAsync("api/Matematika/3"); if (response.IsSuccessStatusCode) { System.Console.WriteLine(response.Content.ReadAsStringAsync().Result); } else { System.Console.WriteLine(response.StatusCode); } System.Console.WriteLine(); response = client.GetAsync("api/Matematika?op=tambah&bil1=13&bil2=23"); if (response.IsSuccessStatusCode) { await 1-63 System.Console.WriteLine(response.Content.ReadAsStringAsync().Result); } else { System.Console.WriteLine(response.StatusCode); } } } } } Yang perlu diperhatikan pada kode di atas, terdapat penggunaan namespace agar bisa menggunakan library Web API Client seperti yang terlihat pada baris di bawah ini. using System.Net.Http; using System.Net.Http.Headers; Kemudian untuk mengakses salah satu API pada class controller MatematikaController.cs digunakan kode sebagai berikut. using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:8492/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response client.GetAsync("api/Matematika/"); if (response.IsSuccessStatusCode) { = await System.Console.WriteLine(response.Content.ReadAsStringAsync().Result); } else { System.Console.WriteLine(response.StatusCode); } ... } Hasilnya terlihat seperti pada gambar di bawah ini. Gambar 4-4. Hasil akses Web API dari aplikasi console. Pada baris kode di atas juga dapat dilihat baris berikut : client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); Baris di atas menentukan output yang akan didapat, jika ingin format output berupa XML maka baris di atas dapat diubah menjadi berikut ini. 1-64 client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); Maka hasilnya akan terlihat seperti pada gambar berikut ini. Gambar 4-5. Output Web API dalam formal XML. Dan selanjutnya untuk mengakses API yang diinginkan dapat menggunakan kode berikut. HttpResponseMessage response = await client.GetAsync("api/Matematika/"); Sedangkan untuk mendapatkan hasil dari response tersebut dapat menggunakan method ReadAsStringAsync().Result untuk kasus ini. Selain method itu masih terdapat beberapa method serupa untuk kebutuhan yang berbeda. Pada contoh ini aplikasi hanya mengakses API bertipe GET, karena API dari MatematikaController.cs hanya terdapat method-method kelompok HTTP verb GET saja. Mahasiswa.Console Contoh pada bagian ini akan mengakses API dari class controller MahasiswaController.cs yang telah dicontohkan pada bagian API CRUD – LINQ to SQL. Berikut ini adalah kode lengkap dari aplikasi Mahasiswa.Console. Program.cs using using using using using using using System; System.Collections.Generic; System.Linq; System.Net.Http; System.Net.Http.Headers; System.Text; System.Threading.Tasks; namespace Mahasiswa.Console { class Program { static void Main(string[] args) { RunAsync().Wait(); System.Console.ReadKey(); } 1-65 static async Task RunAsync() { string serviceUrl = "api/Mahasiswa/"; using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:8492/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // Input data mahasiswa baru Mahasiswa mahasiswa = new Mahasiswa(); mahasiswa.NIM = "23"; mahasiswa.Nama="Nama 23"; mahasiswa.Umur=23; mahasiswa.Alamat = "Alamat 23"; mahasiswa.Jurusan = "Ilkom"; HttpResponseMessage response client.PostAsJsonAsync(serviceUrl, mahasiswa).Result; if (response.IsSuccessStatusCode) { System.Console.WriteLine("Data mahasiswa disimpan."); } else { System.Console.WriteLine("{0} (int)response.StatusCode, response.ReasonPhrase); } = berhasil ({1})", System.Console.WriteLine(); // Menampilkan data mahasiswa response = await client.GetAsync(serviceUrl); if (response.IsSuccessStatusCode) { var mhs response.Content.ReadAsAsync<IEnumerable<Mahasiswa>>().Result; foreach (Mahasiswa m in mhs) { System.Console.WriteLine(m.Nama); } } else { System.Console.WriteLine("{0} (int)response.StatusCode, response.ReasonPhrase); } = ({1})", System.Console.WriteLine(); // Update data mahasiswa mahasiswa = new Mahasiswa(); mahasiswa.NIM = "24"; mahasiswa.Nama = "Nama 24"; mahasiswa.Umur = 24; mahasiswa.Alamat = "Alamat 24"; mahasiswa.Jurusan = "Ilkom"; 1-66 response = client.PutAsJsonAsync(serviceUrl+"?nim=23", mahasiswa).Result; if (response.IsSuccessStatusCode) { System.Console.WriteLine("Data mahasiswa berhasil diupdate."); } else { System.Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } System.Console.WriteLine(); // Menampilkan data mahasiswa response = await client.GetAsync(serviceUrl); if (response.IsSuccessStatusCode) { var mhs response.Content.ReadAsAsync<IEnumerable<Mahasiswa>>().Result; foreach (Mahasiswa m in mhs) { System.Console.WriteLine(m.Nama); } } else { System.Console.WriteLine("{0} (int)response.StatusCode, response.ReasonPhrase); } = ({1})", System.Console.WriteLine(); // Hapus data mahasiswa response = client.DeleteAsync(serviceUrl+"?nim=23").Result; if (response.IsSuccessStatusCode) { System.Console.WriteLine("Data mahasiswa berhasil dihapus."); } else { System.Console.WriteLine("{0} (int)response.StatusCode, response.ReasonPhrase); } ({1})", System.Console.WriteLine(); // Menampilkan data mahasiswa response = await client.GetAsync(serviceUrl); if (response.IsSuccessStatusCode) { var mhs response.Content.ReadAsAsync<IEnumerable<Mahasiswa>>().Result; foreach (Mahasiswa m in mhs) { System.Console.WriteLine(m.Nama); } } else = 1-67 { System.Console.WriteLine("{0} (int)response.StatusCode, response.ReasonPhrase); } } } } ({1})", public class Mahasiswa { public string NIM { set; get; } public string Nama { set; get; } public int Umur { set; get; } public string Alamat { set; get; } public string Jurusan { set; get; } } } Pada kode di atas terdapat class Mahasiswa yang berfungsi sebagai model untuk kebutuhan objek penampung untuk digunakan dan dikirimkan saat melakukan proses insert dan update data. Pada contoh kode di atas diperkenalan method-method berikut ini : 1. 2. 3. 4. ReadAsAsync, method ini berfungsi untuk mengakses API GET. PostAsJsonAsync, method ini berfungsi untuk mengakses API POST. PutAsJsonAsync, method ini berfungsi untuk mengakses API PUT. DeleteAsync, method ini berfungsi untuk mengakses API DELETE. Create Untuk menyimpan data baru ke dalam database dapat dilihat pada baris kode berikut ini. // Input data mahasiswa baru Mahasiswa mahasiswa = new Mahasiswa(); mahasiswa.NIM = "23"; mahasiswa.Nama="Nama 23"; mahasiswa.Umur=23; mahasiswa.Alamat = "Alamat 23"; mahasiswa.Jurusan = "Ilkom"; HttpResponseMessage mahasiswa).Result; response = client.PostAsJsonAsync(serviceUrl, Terlebih dahulu dapat dibuat objek mahasiswa yang akan disimpan dengan mempergunakan class Mahasiswa yang ada. Kemudian diakses API POST dengan menggunakan method PostAsJsonAsync. Retrieve Untuk mengambil data dan menampilkannya digunakan baris kode berikut ini. response = await client.GetAsync(serviceUrl); if (response.IsSuccessStatusCode) { var mhs = response.Content.ReadAsAsync<IEnumerable<Mahasiswa>>().Result; foreach (Mahasiswa m in mhs) { System.Console.WriteLine(m.Nama); } } else 1-68 { System.Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } Pada kode di atas untuk menampung response langung ke dalam collection objek mahasiswa digunakan method ReadAsAsync, sehingga dengan mudah nilainya ditampilkan dengan cara melakukan iterasi. Update Untuk melakukan update data digunakan method PutAsJsonAsync yang menggunaannya dapat dilihat pada baris kode di bawah ini. // Update data mahasiswa mahasiswa = new Mahasiswa(); mahasiswa.NIM = "24"; mahasiswa.Nama = "Nama 24"; mahasiswa.Umur = 24; mahasiswa.Alamat = "Alamat 24"; mahasiswa.Jurusan = "Ilkom"; response = client.PutAsJsonAsync(serviceUrl+"?nim=23", mahasiswa).Result; Delete Sedangkan untuk menghapus data dapat digunakan method DeleteAsync, yang penggunaannya dapat dilihat pada kode di bawah ini. response = client.DeleteAsync(serviceUrl+"?nim=23").Result; Mahasiswa.Website Untuk mengakses Web API dari aplikasi web dapat menggunakan cara yang sama dengan contoh-contoh di atas. Pada project Web Application atau Website yang dipergunakan juga perlu ditambahkan library Microsoft.AspNet.WebApi.Client seperti yang juga ditambahkan pada contoh di atas. Menampilkan Data Mahasiswa Berikut ini adalah contoh aplikasi web untuk menampilkan data mahasiswa pada GridView. AksesAPIMahasiswaHttpClient.aspx <%@ Page Language="C#" CodeFile="AksesAPIMahasiswaHttpClient.aspx.cs" Inherits="AksesAPIMahasiswaHttpClient" %> AutoEventWireup="true" <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label_Message" runat="server" Text=""></asp:Label> 1-69 <asp:GridView ID="GridView_Main" runat="server"></asp:GridView> </div> </form> </body> </html> Dan berikut adalah behind code dari file di atas. AksesAPIMahasiswaHttpClient.aspx.cs using using using using using using using using using System; System.Collections.Generic; System.Linq; System.Net.Http; System.Net.Http.Headers; System.Threading.Tasks; System.Web; System.Web.UI; System.Web.UI.WebControls; public partial class AksesAPIMahasiswaHttpClient : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { GetDataMahasiswa(); } protected void GetDataMahasiswa() { HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:8492/"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = client.GetAsync("api/Mahasiswa").Result; if (response.IsSuccessStatusCode) { var data = response.Content.ReadAsAsync<IEnumerable<Mahasiswa>>().Result; GridView_Main.DataSource = data; GridView_Main.DataBind(); } else { Label_Message.Text = "Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase; } } } public class Mahasiswa { public string NIM { set; get; } public string Nama { set; get; } public int Umur { set; get; } public string Alamat { set; get; } public string Jurusan { set; get; } } Pada contoh di atas terdapat class Mahasiswa, class ini dapat dipisahkan pada file tersendiri jika diinginkan. Misal saja dibuat class Mahasiswa.cs yang disimpan pada folder App_Code pada project Website. 1-70 Berikut adalah hasil yang dapat dilihat dari halaman di atas. Gambar 4-6. Gridview Data Mahasiswa. Tambah Data Mahasiswa Berikut ini adalah contoh aplikasi web untuk input data mahasiswa. Dengan memanfaatkan kode program di atas, yang perlu ditambahkan adalah form input data mahasiswa berikut ini. <asp:Label ID="Label_Message" runat="server" Text=""></asp:Label><br /> NIM : <asp:TextBox ID="TextBox_NIM" runat="server"></asp:TextBox><br /> Nama : <asp:TextBox ID="TextBox_Nama" runat="server"></asp:TextBox><br /> Umur : <asp:TextBox ID="TextBox_Umur" runat="server"></asp:TextBox><br /> Alamat : <asp:TextBox ID="TextBox_Alamat" runat="server"></asp:TextBox><br /> Jurusan : <asp:TextBox ID="TextBox_Jurusan" runat="server"></asp:TextBox><br /> <asp:Button ID="Button_Simpan" OnClick="Button_Simpan_Click" runat="server" Text="Simpan" /> <hr /> Dan ketika tombol Button_Simpan maka akan dipanggil method Button_Simpan_Click yang berisi kode berikut ini. protected void Button_Simpan_Click(object sender, EventArgs e) { HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:8492/"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); Mahasiswa mhs = new Mahasiswa(); mhs.NIM = TextBox_NIM.Text; mhs.Nama = TextBox_Nama.Text; mhs.Umur = Convert.ToInt32(TextBox_Umur.Text); mhs.Alamat = TextBox_Alamat.Text; mhs.Jurusan = TextBox_Jurusan.Text; HttpResponseMessage response = client.PostAsJsonAsync("api/Mahasiswa/", mhs).Result; if (response.IsSuccessStatusCode) { Label_Message.Text = "Data mahasiswa berhasil disimpan."; TextBox_NIM.Text = String.Empty; TextBox_Nama.Text = String.Empty; TextBox_Umur.Text = String.Empty; TextBox_Alamat.Text = String.Empty; TextBox_Jurusan.Text = String.Empty; 1-71 GetDataMahasiswa(); } else { Label_Message.Text = "Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase; } } Dari contoh baris kode di atas maka tidak ada perbedaan yang mencolok antara baris kode dari aplikasi console yang telah dibuat. Berikut adalah tampilan sederhana dari halaman web ini. Gambar 4-7. Form input data mahasiswa. Memilih Mahasiswa Pada bagian ini akan dicontohkan cara untuk memilih satu mahasiswa dari data mahasiswa yang ditampilkan pada GridView. Untuk kebutuhan ini maka perlu ada modifikasi pada kode yang sudah ada, yaitu dengan mengganti kode GridView menjadi seperti berikut ini. <asp:GridView ID="GridView_Main" OnSelectedIndexChanged="GridView_Main_SelectedIndexChanged" DataKeyNames="NIM" runat="server"> <Columns> <asp:CommandField ShowSelectButton="True" /> </Columns> </asp:GridView> Dan method GridView_Main_SelectedIndexChanged berisi seperti berikut. protected void GridView_Main_SelectedIndexChanged(object sender, EventArgs e) { string id = Convert.ToString(GridView_Main.SelectedValue); HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:8492/"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 1-72 HttpResponseMessage response = client.GetAsync("api/Mahasiswa?nim=" + id).Result; if (response.IsSuccessStatusCode) { Mahasiswa item = response.Content.ReadAsAsync<Mahasiswa>().Result; TextBox_NIM.Text = item.NIM; TextBox_Nama.Text = item.Nama; TextBox_Umur.Text = item.Umur.ToString(); TextBox_Alamat.Text = item.Alamat; TextBox_Jurusan.Text = item.Jurusan; } else { Label_Message.Text = "Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase; } } Dan berikut adalah tampilan dari halaman web ini setelah dilakukan modifikasi dengan baris kode di atas. Pada GridView terdapat kolom yang berisi link untuk memilih record mahasiswa yang diinginkan. Pada contoh di bawah ini adalah ketika link record mahasiswa dengan NIM=1 diklik. Gambar 4-8. GridView dengan link untuk memilih record. Update Data Mahasiswa Selanjutnya adalah menambahkan fitur untuk update data mahasiswa. Pada halaman sebelumnya akan ditambahkan tombol Button_Update yang akan memanggil method Button_Update_Click. <asp:Button ID="Button_Update" OnClick="Button_Update_Click" Visible="false" runat="server" Text="Update" /> Dan berikut adalah isi dari method Button_Update_Click. protected void Button_Update_Click(object sender, EventArgs e) { 1-73 string id = Convert.ToString(GridView_Main.SelectedValue); HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:8492/"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); Mahasiswa mhs = new Mahasiswa(); mhs.NIM = TextBox_NIM.Text; mhs.Nama = TextBox_Nama.Text; mhs.Umur = Convert.ToInt32(TextBox_Umur.Text); mhs.Alamat = TextBox_Alamat.Text; mhs.Jurusan = TextBox_Jurusan.Text; HttpResponseMessage response = client.PutAsJsonAsync("api/Mahasiswa?nim=" + id, mhs).Result; if (response.IsSuccessStatusCode) { Label_Message.Text = "Data mahasiswa berhasil diupdate."; TextBox_NIM.Text = String.Empty; TextBox_Nama.Text = String.Empty; TextBox_Umur.Text = String.Empty; TextBox_Alamat.Text = String.Empty; TextBox_Jurusan.Text = String.Empty; Button_Update.Visible = true; GetDataMahasiswa(); } else { Label_Message.Text = "Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase; } } Menghapus Data Mahasiswa Untuk menghapus data mahasiswa maka perlu ditambahkan link yang dapat dipilih untuk menghapus record mahasiswa yang diinginkan. Seperti yang dapat dilihat pada gambar di bawah ini. Gambar 4-9. Menghapus record mahasiswa. 1-74 Untuk membuat link Delete seperti di atas maka perlu modifikasi pada control GridView. <asp:GridView ID="GridView_Main" OnSelectedIndexChanged="GridView_Main_SelectedIndexChanged" OnRowDeleting="GridView_Main_RowDeleting" DataKeyNames="NIM" runat="server"> <Columns> <asp:CommandField ShowSelectButton="True" /> <asp:CommandField ShowDeleteButton="True" /> </Columns> </asp:GridView> Pada baris di atas juga terdapat tambahan event OnRowDeleting yang akan memanggil method GridView_Main_RowDeleting dengan baris kode di bawah ini. protected void GridView_Main_RowDeleting(object sender, GridViewDeleteEventArgs e) { string id = GridView_Main.DataKeys[e.RowIndex].Values["NIM"].ToString(); HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:8492/"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = client.DeleteAsync("api/Mahasiswa?nim=" + id).Result; if (response.IsSuccessStatusCode) { GetDataMahasiswa(); } else { Label_Message.Text = "Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase; } } Mahasiswa.WP Pada bagian ini akan diberikan contoh membuat aplikasi Windows Phone 8. Seperti contohcontoh sebelumnya, pada contoh program ini juga akan menggunakan library Microsoft.AspNet.WebApi.Client. Oleh karena pada project ini perlu ditambahkan library tersebut via Manage NuGet Packages. 1-75 Gambar 4-10. Manage NuGet Packages untuk project Windows Phone 8. Setelah proses download selesai maka akan dilakukan proses installasi seperti berikut. Gambar 4-11. Instalasi library Microsoft.AspNet.WebApi.Client pada project Windows Phone 8. Project Windows Phone App Pada contoh ini akan digunakan template project windows phone yang sederhana yaitu Windows Phone App seperti yang terlihat pada gambar. 1-76 Gambar 4-12. Project Windows Phone App. Setelah memberi nama project dengan nama Mahasiswa.WP kemudian klik OK. Pada contoh ini tidak akan digunakan file MainPage.xaml sebagai file utama, tetapi akan digunakan file MahasiswaPage.xaml. Oleh karena itu akan dilakukan beberapa hal agar file MahasiswaPage.xaml dapat diakses sebagai file default saat aplikasi Windows Phone dijalankan. Langkah pertama adalah membuat file MahasiswaPage.xaml dengan cara klik kanan pada project Mahasiswa.WP, kemudian piliha Add > New Item. Pada window Add New Item pilih Windows Phone Potrait Page kemudian beri nama MahasiswaPage.xaml. Gambar 4-13. MahasiswaPage.xaml 1-77 Langkah selanjutnya adalah mengedit file WPAppManifest.xml yang ada pada folder Propertis pada project. Caranya cukup dengan mengklik double file tersebut maka akan akan ditampilkan seperti gambar berikut ini. Gambar 4-14. WMAppManifest.xml. Pada kolom input Navigation Page ganti nama MainPage.xaml dengan MahasiswaPage.xaml. Menampilkan Data Mahasiswa Untuk menampilkan menampilkan data mahasiswa pada halaman MahasiswaPage.xaml maka digunakan kode untuk mengakses Web API yang tidak terlalu berbeda dengan contohcontoh sebelumnya. Berikut adalah isi dari kode MahasiswaPage.xaml dan MahasiswaPage.xaml.cs. MahasiswaPage.xaml <phone:PhoneApplicationPage x:Class="Mahasiswa.WP.MahasiswaPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clrnamespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clrnamespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" shell:SystemTray.IsVisible="True"> <phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar> 1-78 <shell:ApplicationBarIconButton x:Name="ApplicationBarIconButton_Add" Click="ApplicationBarIconButton_Add_Click" IconUri="/Assets/AppBar/add.png" Text="tambah"/> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title-> <StackPanel Grid.Row="0" Margin="12,17,0,28"> <TextBlock Text="CONTOH WEB API" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock Text="mahasiswa" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <phone:LongListSelector x:Name="LongListSelector_MainData" SelectionChanged="LongListSelector_MainData_SelectionChanged"> <phone:LongListSelector.ItemTemplate> <DataTemplate> <StackPanel Margin="0,0,0,17"> <TextBlock Text="{Binding Nama}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> <TextBlock Text="{Binding NIM}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/> <TextBlock Text="{Binding Alamat}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/> <TextBlock Text="{Binding Jurusan}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/> </StackPanel> </DataTemplate> </phone:LongListSelector.ItemTemplate> </phone:LongListSelector> </Grid> </Grid> </phone:PhoneApplicationPage> MahasiswaPage.xaml.cs using using using using using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Windows; System.Windows.Controls; System.Windows.Navigation; Microsoft.Phone.Controls; Microsoft.Phone.Shell; System.Net.Http; 1-79 using System.Net.Http.Headers; using System.Threading.Tasks; using Mahasiswa.WP.ViewModels; namespace Mahasiswa.WP { public partial class MahasiswaPage : PhoneApplicationPage { public MahasiswaPage() { InitializeComponent(); LongListSelector_MainData_DataBind(); } public async Task LongListSelector_MainData_DataBind() { try { HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = client.GetAsync("http://169.254.80.80/akademik/api/Mahasiswa"); response.EnsureSuccessStatusCode(); await if (response.IsSuccessStatusCode) { var mhs = response.Content.ReadAsAsync<IEnumerable<MahasiswaModel>>().Result.ToList(); LongListSelector_MainData.ItemsSource = mhs; } else { MessageBox.Show("Gagal"); } } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void ApplicationBarIconButton_Add_Click(object sender, EventArgs e) { NavigationService.Navigate(new Uri("/MahasiswaAddPage.xaml", UriKind.Relative)); } private void LongListSelector_MainData_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (LongListSelector_MainData.SelectedItem == null) { return; } PhoneApplicationService.Current.State["objMahasiswa"] = LongListSelector_MainData.SelectedItem; NavigationService.Navigate(new Uri("/MahasiswaDetailPage.xaml", UriKind.Relative)); 1-80 LongListSelector_MainData.SelectedItem = null; } } } Selain kedua kode di atas juga dibuat class MahasiswaModel.cs untuk objek yang akan digunakan pada collection yang nantinya akan digunakan untuk menampung data sebelum ditampilkan pada control di antarmuka XAML. Sebagai contoh di atas digunakan control LongListSelector untuk menampilkan data mahasiswa. Berikut ini adalah isi dari file MahasiswaModel.cs tersebut. MahasiswaModel.cs namespace Mahasiswa.WP.ViewModels { public class MahasiswaModel { public string NIM { set; get; } public string Nama { set; get; } public int Umur { set; get; } public string Alamat { set; get; } public string Jurusan { set; get; } } } Berikut adalah tampilan dari halaman ini. Gambar 4-15. MahasiswaPage.xaml 1-81 Memilih dan Update Data Mahasiswa Dari halaman MahasiswaPage.xaml yang telah dibuat diatas, jika salah satu item dipilih maka akan diarahkan ke halaman MahasiswaDetailPage.xaml seperti pada gambar berikut. Gambar 4-16. MahasiswaDetailPage.xaml. Pada halaman ini terdapat fitur untuk mengupdate data yang ditampilkan pada form dan juga fitur untuk menghapus data. Cara untuk melakukan hal tersebut dapat dilihat dari kode di bawah ini. MahasiswaDetailPage.xaml <phone:PhoneApplicationPage x:Class="Mahasiswa.WP.MahasiswaDetailPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clrnamespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clrnamespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" shell:SystemTray.IsVisible="True"> <phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar> 1-82 <shell:ApplicationBarIconButton x:Name="ApplicationBarIconButton_Delete" Click="ApplicationBarIconButton_Delete_Click" IconUri="/Assets/AppBar/delete.png" Text="hapus"/> <shell:ApplicationBarIconButton x:Name="ApplicationBarIconButton_Update" Click="ApplicationBarIconButton_Update_Click" IconUri="/Assets/AppBar/edit.png" Text="update"/> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title-> <StackPanel Grid.Row="0" Margin="12,17,0,28"> <TextBlock Text="CONTOH WEB API" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="TextBlock_Title" Text="page name" Margin="9,7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel> <TextBlock Text="nama" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_Nama" /> <TextBlock Text="umur" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_Umur" /> <TextBlock Text="alamat" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_Alamat" /> <TextBlock Text="jurusan" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_Jurusan" /> </StackPanel> </Grid> </Grid> </phone:PhoneApplicationPage> MahasiswaDetailPage.xaml.cs using using using using using using using using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Windows; System.Windows.Controls; System.Windows.Navigation; Microsoft.Phone.Controls; Microsoft.Phone.Shell; System.Threading.Tasks; System.Net.Http; System.Net.Http.Headers; Mahasiswa.WP.ViewModels; namespace Mahasiswa.WP { 1-83 public partial class MahasiswaDetailPage : PhoneApplicationPage { public MahasiswaDetailPage() { InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { try { MahasiswaModel item (MahasiswaModel)PhoneApplicationService.Current.State["objMahasiswa"]; = TextBlock_Title.Text = item.NIM + " - " + item.Nama; TextBox_Nama.Text = item.Nama; TextBox_Umur.Text = Convert.ToString(item.Umur); TextBox_Alamat.Text = item.Alamat; TextBox_Jurusan.Text = item.Jurusan; } catch (Exception ex) { MessageBox.Show(ex.Message); } } public async Task UpdateMahasiswa() { try { MahasiswaModel item (MahasiswaModel)PhoneApplicationService.Current.State["objMahasiswa"]; = MahasiswaModel mahasiswa = new MahasiswaModel(); mahasiswa.Nama = TextBox_Nama.Text; mahasiswa.Alamat = TextBox_Alamat.Text; mahasiswa.Jurusan = TextBox_Jurusan.Text; mahasiswa.Umur = Convert.ToInt32(TextBox_Umur.Text); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.PutAsJsonAsync("http://169.254.80.80/akademik/api/Mahasiswa?nim=" + item.NIM, mahasiswa); response.EnsureSuccessStatusCode(); if (response.IsSuccessStatusCode) { MessageBox.Show("Data berhasil diupdate."); } else { MessageBox.Show("Data gagal diupdate."); } } catch (Exception ex) { MessageBox.Show(ex.Message); } 1-84 } public async Task DeleteMahasiswa() { try { MahasiswaModel item (MahasiswaModel)PhoneApplicationService.Current.State["objMahasiswa"]; HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = client.DeleteAsync("http://169.254.80.80/akademik/api/Mahasiswa?nim=" item.NIM); response.EnsureSuccessStatusCode(); = await + if (response.IsSuccessStatusCode) { MessageBox.Show("Data berhasil dihapus."); } else { MessageBox.Show("Data gagal dihapus."); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void ApplicationBarIconButton_Delete_Click(object EventArgs e) { DeleteMahasiswa(); } sender, private void ApplicationBarIconButton_Update_Click(object EventArgs e) { UpdateMahasiswa(); } } } sender, Tambah Data Mahasiswa Pada halaman MahasiswaPage.xaml terdapat tombol untuk menambah data mahasiswa, yang akan mengantarkan ke halaman MahasiswaAddPage.xaml. Pada halaman tersebut akan ditampilkan form untuk tambah data baru. Berikut adalah isi dari file MahasiswaAddPage.xaml dan MahasiswaAddPage.xaml.cs. MahasiswaAddPage.xaml <phone:PhoneApplicationPage x:Class="Mahasiswa.WP.MahasiswaAddPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clrnamespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 1-85 xmlns:shell="clrnamespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" shell:SystemTray.IsVisible="True"> <phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar> <shell:ApplicationBarIconButton x:Name="ApplicationBarIconButton_Add" Click="ApplicationBarIconButton_Add_Click" IconUri="/Assets/AppBar/save.png" Text="simpan"/> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title-> <StackPanel Grid.Row="0" Margin="12,17,0,28"> <TextBlock Text="CONTOH WEB API" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock Text="tambah data" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel> <TextBlock Text="nim" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_NIM" /> <TextBlock Text="nama" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_Nama" /> <TextBlock Text="umur" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_Umur" /> <TextBlock Text="alamat" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_Alamat" /> <TextBlock Text="jurusan" FontSize="27" Margin="13,0,0,0" /> <TextBox x:Name="TextBox_Jurusan" /> </StackPanel> </Grid> </Grid> </phone:PhoneApplicationPage> MahasiswaAddPage.xaml.cs using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Windows; System.Windows.Controls; 1-86 using using using using using using using System.Windows.Navigation; Microsoft.Phone.Controls; Microsoft.Phone.Shell; Mahasiswa.WP.ViewModels; System.Threading.Tasks; System.Net.Http; System.Net.Http.Headers; namespace Mahasiswa.WP { public partial class MahasiswaAddPage : PhoneApplicationPage { public MahasiswaAddPage() { InitializeComponent(); } public async Task InsertMahasiswa() { try { MahasiswaModel mahasiswa = new MahasiswaModel(); mahasiswa.Nama = TextBox_Nama.Text; mahasiswa.Alamat = TextBox_Alamat.Text; mahasiswa.Jurusan = TextBox_Jurusan.Text; mahasiswa.Umur = Convert.ToInt32(TextBox_Umur.Text); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = client.PostAsJsonAsync("http://169.254.80.80/akademik/api/Mahasiswa", mahasiswa); response.EnsureSuccessStatusCode(); await if (response.IsSuccessStatusCode) { MessageBox.Show("Data berhasil disimpan."); } else { MessageBox.Show("Data gagal disimpan."); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void ApplicationBarIconButton_Add_Click(object EventArgs e) { InsertMahasiswa(); } } } sender, Dan berikut ini adalah tampilan dari halaman ini. 1-87 Gambar 4-17. MahasiswaAddPage.xaml. 1-88 5 Penutup Sebagai kalimat penutup, ebook ini dibuat untuk para developer sebagai pengenalan awal pada ASP.NET Web API. Pada ebook ini hanya membahas hal-hal dasar seperti : 1. 2. 3. 4. Template project Web API. Cara akses Web API. Tool yang dapat digunakan untuk test client sehingga dapat mempermudah untuk menguji API. Contoh-contoh program untuk mengakses Web API yang telah dibuat. Diharapkan dengan adanya ebook ini pada developer mempunyai pengetahuan awal akan Web API. Pada ebook selanjutnya akan lebih dibahas lebih mendalam tentang Web API seperti : 1. 2. 3. Authentifikasi. Keamanan (security). Dan lain-lain. Kritik dan saran dapat ditujukan langsung via email ke reza.faisal [at] gmail [dot] com. 1-89 1-90 1-91