Menggunakan layanan web RESTful

Download Sample Mengunduh sampel

Mengintegrasikan layanan web ke dalam aplikasi adalah skenario umum. Artikel ini menunjukkan cara menggunakan layanan web RESTful dari aplikasi Xamarin.Forms .

Representational State Transfer (REST) adalah gaya arsitektur untuk membangun layanan web. Permintaan REST dibuat melalui HTTP menggunakan kata kerja HTTP yang sama dengan yang digunakan browser web untuk mengambil halaman web dan mengirim data ke server. Kata kerjanya adalah:

  • GET – operasi ini digunakan untuk mengambil data dari layanan web.
  • POST – operasi ini digunakan untuk membuat item data baru di layanan web.
  • PUT – operasi ini digunakan untuk memperbarui item data di layanan web.
  • PATCH – operasi ini digunakan untuk memperbarui item data pada layanan web dengan menjelaskan serangkaian instruksi tentang bagaimana item harus dimodifikasi. Kata kerja ini tidak digunakan dalam aplikasi sampel.
  • DELETE – operasi ini digunakan untuk menghapus item data di layanan web.

API layanan web yang mematuhi REST disebut API RESTful, dan didefinisikan menggunakan:

  • URI dasar.
  • Metode HTTP, seperti GET, POST, PUT, PATCH, atau DELETE.
  • Jenis media untuk data, seperti JavaScript Object Notation (JSON).

Layanan web RESTful biasanya menggunakan pesan JSON untuk mengembalikan data ke klien. JSON adalah format pertukaran data berbasis teks yang menghasilkan payload ringkas, yang menghasilkan pengurangan persyaratan bandwidth saat mengirim data. Aplikasi sampel menggunakan pustaka sumber terbuka NewtonSoft JSON.NET untuk menserialisasikan dan mendeserialisasi pesan.

Kesederhanaan REST telah membantu menjadikannya metode utama untuk mengakses layanan web dalam aplikasi seluler.

Saat aplikasi sampel dijalankan, aplikasi akan terhubung ke layanan REST yang dihosting secara lokal, seperti yang ditunjukkan pada cuplikan layar berikut:

Sample Application

Catatan

Di iOS 9 dan yang lebih besar, App Transport Security (ATS) memberlakukan koneksi aman antara sumber daya internet (seperti server ujung belakang aplikasi) dan aplikasi, sehingga mencegah pengungkapan informasi sensitif yang tidak disengaja. Karena ATS diaktifkan secara default di aplikasi yang dibangun untuk iOS 9, semua koneksi akan tunduk pada persyaratan keamanan ATS. Jika koneksi tidak memenuhi persyaratan ini, koneksi akan gagal dengan pengecualian.

ATS dapat ditolak jika tidak dimungkinkan untuk menggunakan protokol HTTPS dan komunikasi yang aman untuk sumber daya internet. Ini dapat dicapai dengan memperbarui file Info.plist aplikasi. Untuk informasi selengkapnya, lihat Keamanan Transportasi Aplikasi.

Menggunakan layanan web

Layanan REST ditulis menggunakan ASP.NET Core dan menyediakan operasi berikut:

Operasi Metode HTTP URI Relatif Parameter
Mendapatkan daftar item yang harus dilakukan GET /api/todoitems/
Membuat item tugas baru POST /api/todoitems/ TodoItem berformat JSON
Memperbarui item yang harus dilakukan TARUH /api/todoitems/ TodoItem berformat JSON
Menghapus item yang harus dilakukan DELETE /api/todoitems/{id}

Sebagian besar URI menyertakan TodoItem ID di jalur. Misalnya, untuk menghapus TodoItem ID siapa , 6bb8a868-dba1-4f1a-93b7-24ebce87e243klien mengirim permintaan DELETE ke http://hostname/api/todoitems/6bb8a868-dba1-4f1a-93b7-24ebce87e243. Untuk informasi selengkapnya tentang model data yang digunakan dalam aplikasi sampel, lihat Memodelkan data.

Ketika kerangka kerja API Web menerima permintaan, kerangka kerja tersebut merutekan permintaan ke tindakan. Tindakan ini hanyalah metode publik di TodoItemsController kelas . Kerangka kerja menggunakan middleware perutean untuk mencocokkan URL permintaan masuk dan memetakannya ke tindakan. REST API harus menggunakan perutean atribut model fungsionalitas aplikasi sebagai sekumpulan sumber daya yang operasinya diwakili oleh kata kerja HTTP. Perutean atribut menggunakan sekumpulan atribut untuk memetakan tindakan langsung ke templat rute. Untuk informasi selengkapnya tentang perutean atribut, lihat Perutean atribut untuk REST API. Untuk informasi selengkapnya tentang membangun layanan REST menggunakan ASP.NET Core, lihat Membuat Layanan Backend untuk Aplikasi Seluler Asli.

Kelas HttpClient ini digunakan untuk mengirim dan menerima permintaan melalui HTTP. Ini menyediakan fungsionalitas untuk mengirim permintaan HTTP dan menerima respons HTTP dari sumber daya yang diidentifikasi URI. Setiap permintaan dikirim sebagai operasi asinkron. Untuk informasi selengkapnya tentang operasi asinkron, lihat Gambaran Umum Dukungan Asinkron.

Kelas mewakili HttpResponseMessage pesan respons HTTP yang diterima dari layanan web setelah permintaan HTTP dibuat. Ini berisi informasi tentang respons, termasuk kode status, header, dan isi apa pun. Kelas HttpContent mewakili isi HTTP dan header konten, seperti Content-Type dan Content-Encoding. Konten dapat dibaca menggunakan salah ReadAs satu metode, seperti ReadAsStringAsync dan ReadAsByteArrayAsync, tergantung pada format data.

Membuat objek HTTPClient

HttpClient Instans dideklarasikan pada tingkat kelas sehingga objek hidup selama aplikasi perlu membuat permintaan HTTP, seperti yang ditunjukkan dalam contoh kode berikut:

public class RestService : IRestService
{
  HttpClient client;
  ...

  public RestService ()
  {
    client = new HttpClient ();
    ...
  }
  ...
}

Mengambil data

Metode HttpClient.GetAsync ini digunakan untuk mengirim permintaan GET ke layanan web yang ditentukan oleh URI, lalu menerima respons dari layanan web, seperti yang ditunjukkan dalam contoh kode berikut:

public async Task<List<TodoItem>> RefreshDataAsync ()
{
  ...
  Uri uri = new Uri (string.Format (Constants.TodoItemsUrl, string.Empty));
  ...
  HttpResponseMessage response = await client.GetAsync (uri);
  if (response.IsSuccessStatusCode)
  {
      string content = await response.Content.ReadAsStringAsync ();
      Items = JsonSerializer.Deserialize<List<TodoItem>>(content, serializerOptions);
  }
  ...
}

Layanan REST mengirimkan kode status HTTP di HttpResponseMessage.IsSuccessStatusCode properti , untuk menunjukkan apakah permintaan HTTP berhasil atau gagal. Untuk operasi ini, layanan REST mengirimkan kode status HTTP 200 (OK) dalam respons, yang menunjukkan bahwa permintaan berhasil dan bahwa informasi yang diminta berada dalam respons.

Jika operasi HTTP berhasil, konten respons dibaca, untuk ditampilkan. Properti HttpResponseMessage.Content mewakili konten respons HTTP, dan HttpContent.ReadAsStringAsync metode secara asinkron menulis konten HTTP ke string. Konten ini kemudian dideserialisasi dari JSON ke List instans TodoItem .

Peringatan

ReadAsStringAsync Menggunakan metode untuk mengambil respons besar dapat berdampak negatif pada performa. Dalam keadaan seperti itu, respons harus langsung dideserialisasi untuk menghindari harus sepenuhnya buffer.

Buat data

Metode HttpClient.PostAsync ini digunakan untuk mengirim permintaan POST ke layanan web yang ditentukan oleh URI, lalu untuk menerima respons dari layanan web, seperti yang ditunjukkan dalam contoh kode berikut:

public async Task SaveTodoItemAsync (TodoItem item, bool isNewItem = false)
{
  Uri uri = new Uri (string.Format (Constants.TodoItemsUrl, string.Empty));

  ...
  string json = JsonSerializer.Serialize<TodoItem>(item, serializerOptions);
  StringContent content = new StringContent (json, Encoding.UTF8, "application/json");

  HttpResponseMessage response = null;
  if (isNewItem)
  {
    response = await client.PostAsync (uri, content);
  }
  ...

  if (response.IsSuccessStatusCode)
  {
    Debug.WriteLine (@"\tTodoItem successfully saved.");
  }
  ...
}

TodoItem Instans diserialisasikan ke payload JSON untuk dikirim ke layanan web. Payload ini kemudian disematkan dalam isi konten HTTP yang akan dikirim ke layanan web sebelum permintaan dibuat dengan PostAsync metode .

Layanan REST mengirimkan kode status HTTP di HttpResponseMessage.IsSuccessStatusCode properti , untuk menunjukkan apakah permintaan HTTP berhasil atau gagal. Respons umum untuk operasi ini adalah:

  • 201 (DIBUAT) – permintaan mengakibatkan sumber daya baru dibuat sebelum respons dikirim.
  • 400 (PERMINTAAN BURUK) – permintaan tidak dipahami oleh server.
  • 409 (KONFLIK) – permintaan tidak dapat dilakukan karena konflik pada server.

Memperbarui data

Metode HttpClient.PutAsync ini digunakan untuk mengirim permintaan PUT ke layanan web yang ditentukan oleh URI, lalu menerima respons dari layanan web, seperti yang ditunjukkan dalam contoh kode berikut:

public async Task SaveTodoItemAsync (TodoItem item, bool isNewItem = false)
{
  ...
  response = await client.PutAsync (uri, content);
  ...
}

Pengoperasian PutAsync metode ini identik dengan PostAsync metode yang digunakan untuk membuat data di layanan web. Namun, kemungkinan respons yang dikirim dari layanan web berbeda.

Layanan REST mengirimkan kode status HTTP di HttpResponseMessage.IsSuccessStatusCode properti , untuk menunjukkan apakah permintaan HTTP berhasil atau gagal. Respons umum untuk operasi ini adalah:

  • 204 (TIDAK ADA KONTEN) – permintaan telah berhasil diproses dan respons sengaja kosong.
  • 400 (PERMINTAAN BURUK) – permintaan tidak dipahami oleh server.
  • 404 (NOT FOUND) – sumber daya yang diminta tidak ada di server.

Menghapus data

Metode HttpClient.DeleteAsync ini digunakan untuk mengirim permintaan DELETE ke layanan web yang ditentukan oleh URI, lalu menerima respons dari layanan web, seperti yang ditunjukkan dalam contoh kode berikut:

public async Task DeleteTodoItemAsync (string id)
{
  Uri uri = new Uri (string.Format (Constants.TodoItemsUrl, id));
  ...
  HttpResponseMessage response = await client.DeleteAsync (uri);
  if (response.IsSuccessStatusCode)
  {
    Debug.WriteLine (@"\tTodoItem successfully deleted.");
  }
  ...
}

Layanan REST mengirimkan kode status HTTP di HttpResponseMessage.IsSuccessStatusCode properti , untuk menunjukkan apakah permintaan HTTP berhasil atau gagal. Respons umum untuk operasi ini adalah:

  • 204 (TIDAK ADA KONTEN) – permintaan telah berhasil diproses dan respons sengaja kosong.
  • 400 (PERMINTAAN BURUK) – permintaan tidak dipahami oleh server.
  • 404 (NOT FOUND) – sumber daya yang diminta tidak ada di server.

Pengembangan lokal

Jika Anda mengembangkan layanan web REST secara lokal dengan kerangka kerja seperti ASP.NET Core Web API, Anda dapat men-debug layanan web dan aplikasi seluler Anda secara bersamaan. Dalam skenario ini Anda harus mengaktifkan lalu lintas HTTP teks-jelas untuk simulator iOS dan emulator Android. Untuk informasi tentang konfigurasi proyek Anda untuk mengizinkan komunikasi, lihat Koneksi ke layanan web lokal.