Bagikan melalui


Menggunakan layanan web berbasis REST

Browse sample. Telusuri sampel

Representational State Transfer (REST) adalah gaya arsitektur untuk membangun layanan web. Permintaan REST biasanya dibuat melalui HTTPS 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.
  • DELETE – operasi ini digunakan untuk menghapus item data di layanan web.

API layanan web yang mematuhi REST didefinisikan menggunakan:

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

Layanan web berbasis REST 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. Kesederhanaan REST telah membantu menjadikannya metode utama untuk mengakses layanan web di aplikasi seluler.

Catatan

Mengakses layanan web sering memerlukan pemrograman asinkron. Untuk informasi selengkapnya tentang pemrograman asinkron, lihat Pemrograman asinkron dengan asinkron dan menunggu.

Operasi layanan web

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

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

Aplikasi .NET MAUI dan layanan web menggunakan kelas untuk memodelkan TodoItem data yang ditampilkan dan dikirim ke layanan web untuk penyimpanan:

public class TodoItem
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string Notes { get; set; }
    public bool Done { get; set; }
}

Properti ID ini digunakan untuk mengidentifikasi setiap TodoItem objek secara unik, dan digunakan oleh layanan web untuk mengidentifikasi data yang akan diperbarui atau dihapus. Misalnya, untuk menghapus TodoItem ID-nya , 6bb8a868-dba1-4f1a-93b7-24ebce87e243aplikasi .NET MAUI mengirimkan permintaan DELETE ke https://hostname/api/todoitems/6bb8a868-dba1-4f1a-93b7-24ebce87e243.

Saat kerangka kerja API Web menerima permintaan, kerangka kerja tersebut merutekan permintaan ke tindakan. Tindakan ini adalah metode publik di TodoItemsController kelas . Kerangka kerja API Web menggunakan middleware perutean untuk mencocokkan URL permintaan masuk dan memetakannya ke tindakan. REST API harus menggunakan perutean atribut untuk memodelkan 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.

Membuat objek HTTPClient

Aplikasi .NET Multi-platform App UI (.NET MAUI) dapat menggunakan layanan web berbasis REST dengan mengirim permintaan ke layanan web dengan HttpClient kelas . Kelas ini menyediakan fungsionalitas untuk mengirim permintaan HTTP dan menerima respons HTTP dari sumber daya yang diidentifikasi URI. Setiap permintaan dikirim sebagai operasi asinkron.

Objek HttpClient harus dideklarasikan di tingkat kelas sehingga hidup selama aplikasi perlu membuat permintaan HTTP:

public class RestService
{
    HttpClient _client;
    JsonSerializerOptions _serializerOptions;

    public List<TodoItem> Items { get; private set; }

    public RestService()
    {
        _client = new HttpClient();
        _serializerOptions = new JsonSerializerOptions
        {
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
            WriteIndented = true
        };
    }
    ...
}

Objek JsonSerializerOptions digunakan untuk mengonfigurasi pemformatan payload JSON yang diterima dari dan dikirim ke layanan web. Untuk informasi selengkapnya, lihat Cara membuat instans JsonSerializerOptions dengan System.Text.Json.

Mengambil data

Metode HttpClient.GetAsync ini digunakan untuk mengirim permintaan GET ke layanan web yang ditentukan oleh URI, lalu menerima respons dari layanan web:

public async Task<List<TodoItem>> RefreshDataAsync()
{
    Items = new List<TodoItem>();

    Uri uri = new Uri(string.Format(Constants.RestUrl, string.Empty));
    try
    {
        HttpResponseMessage response = await _client.GetAsync(uri);
        if (response.IsSuccessStatusCode)
        {
            string content = await response.Content.ReadAsStringAsync();
            Items = JsonSerializer.Deserialize<List<TodoItem>>(content, _serializerOptions);
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(@"\tERROR {0}", ex.Message);
    }

    return Items;
}

Data diterima dari layanan web sebagai HttpResponseMessage objek. Ini berisi informasi tentang respons, termasuk kode status, header, dan isi apa pun. Layanan REST mengirimkan kode status HTTP dalam responsnya, yang dapat diperoleh dari 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. Properti HttpResponseMessage.Content mewakili konten respons, dan berjenis HttpContent. Kelas HttpContent mewakili isi HTTP dan header konten, seperti Content-Type dan Content-Encoding. Konten kemudian dibaca ke dalam string menggunakan HttpContent.ReadAsStringAsync metode . string kemudian dideserialisasi dari JSON ke objek ListTodoItem.

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:

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

    try
    {
        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);
        else
            response = await _client.PutAsync(uri, content);

        if (response.IsSuccessStatusCode)
            Debug.WriteLine(@"\tTodoItem successfully saved.");
    }
    catch (Exception ex)
    {
        Debug.WriteLine(@"\tERROR {0}", ex.Message);
    }
}

Dalam contoh ini, instans diserialisasikan TodoItem 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 dalam responsnya, yang dapat diperoleh dari 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:

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 dalam responsnya, yang dapat diperoleh dari 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:

public async Task DeleteTodoItemAsync(string id)
{
    Uri uri = new Uri(string.Format(Constants.RestUrl, id));

    try
    {
        HttpResponseMessage response = await _client.DeleteAsync(uri);
        if (response.IsSuccessStatusCode)
            Debug.WriteLine(@"\tTodoItem successfully deleted.");
    }
    catch (Exception ex)
    {
        Debug.WriteLine(@"\tERROR {0}", ex.Message);
    }
}

Layanan REST mengirimkan kode status HTTP dalam responsnya, yang dapat diperoleh dari 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 MAUI .NET secara bersamaan. Dalam skenario ini, untuk menggunakan layanan web Anda melalui HTTP dari emulator Android dan simulator iOS, Anda harus mengaktifkan lalu lintas HTTP teks-jelas di aplikasi MAUI .NET Anda. Untuk informasi selengkapnya, lihat Koneksi ke layanan web lokal dari emulator Android dan simulator iOS.