Pelajari cara menambahkan rute dan menggunakan perintah lanjutan lainnya

Selesai

Kini Anda mengetahui lebih banyak tentang apa itu API minimal dan mengapa menggunakannya. Tapi bagaimana Anda membangun aplikasi Anda dan menangani hal-hal seperti parameter rute, badan yang diposting, dan mengembalikan data yang lebih canggih daripada string literal?

Untuk mendukung RESTful API, Anda perlu mendukung penggunaan kata kerja HTTP dan melampirkan kata kerja tersebut ke rute yang berbeda. Kata kerja yang berbeda memiliki arti yang berbeda. Perhatikan arti kata kerja HTTP.

Kata kerja HTTP Deskripsi
GET Menampilkan data
POST Mengirim data yang membuat sumber daya
TARUH Mengirim data yang memperbarui sumber daya
DELETE Menghapus sumber daya

Catatan

Sumber daya adalah bagian dari data. Misalnya, ini bisa berupa produk, pengguna, atau pesanan. Ini adalah sesuatu yang mungkin Anda operasikan dan yang siklus hidupnya ingin Anda kelola.

Kata kerja HTTP dalam API minimal

Saat memulai permintaan, klien melakukannya ke titik akhir server. Bayangkan permintaan dibuat ke GET http://localhost:3000/products. Server memverifikasi permintaan untuk melihat kata kerja HTTP apa yang digunakan. Arah permintaan juga perlu diketahui, yang ditunjukkan oleh "/products." Kemudian, server mencoba mengatasi permintaan dengan menghasilkan respons.

Catatan

Sebagai bagian dari permintaan, server mungkin juga mencoba memverifikasi info masuk autentikasi apa pun yang dikirim oleh klien. Ini di luar lingkup modul ini.

API minimal menangani rute dan kata kerja HTTP dengan menawarkan metode kemudahan. Anda dapat memetakan permintaan dengan rute dan kata kerja HTTP, dengan rute berupa "/products," dalam permintaan ke localhost:3000/products. Berikut contoh metode kemudahan tersebut:

app.MapGet("/products", () => data);

Kode ini harus dibaca dengan cara berikut: Jika klien menggunakan kata kerja GET HTTP menuju rute "/products", maka tanggapi dengan data.

GET: Mengambil sumber daya

Dua kasus utama sebaiknya diketahui tentang kapan harus merutekan dengan permintaan GET:

  • Hanya rute: Anda sudah melihat rute ini. Contohnya:

    app.MapGet("/products", () => data);
    
  • Gunakan parameter rute: Parameter rute digunakan untuk menemukan sumber daya tertentu. Jika "/produk" berarti daftar semua produk, /products/1 berarti catatan tertentu. Pengidentifikasi unik memiliki nilai 1. Untuk menangani permintaan seperti itu, Anda menggunakan wildcard untuk mencocokkannya. Anda menggunakan "{ID}" untuk mengambil "1" dalam contoh sebelumnya. Anda juga dapat memetakan nilai yang diambil ke parameter:

    app.MapGet("/products/{id}", (int id) => data.SingleOrDefault(product => product.Id == id));
    

    Dalam kode ini, parameter id telah menangkap parameter rute yang dikirim klien, yaitu 1 di /products/1.

POST: Membuat sumber daya

Anda juga sering ingin membuat sumber daya. Untuk pembuatan, Anda menggunakan kata kerja HTTP POST. Metode yang digunakan disebut MapPost():

app.MapPost("/products", (Product product) => /**/);

Perhatikan bagaimana product dikirim ke lambda yang menangani permintaan. Bayangkan JSON berikut yang berupa isi yang dikirim oleh klien dan yang telah diserialisasikan oleh kerangka kerja. Bayangkan klien telah mengirim JSON berikut sebagai tubuhnya:

{
  "Name" : "New product",
  "Description": "a description"
}

Kemudian, JSON ini dapat memetakan bidang ini ke instans objek dengan bentuk yang sama. Berikut adalah kelasnya, Product, yang cocok dengan isi yang diposting yang dijelaskan:

public record Product(int Id, string Name); 

PUT: Memperbarui sumber daya

Kata kerja PUT digunakan untuk memperbarui sumber daya. Kerangka kerja memiliki metode MapPut() karena alasan ini. Secara semantik, metode MapPut() mirip dengan MapPost(). Idenya adalah bahwa Anda, sebagai klien, harus mengirim isi yang diposting dengan sumber daya yang berisi perubahan. Anda ingin perubahan ini diterapkan ke sumber daya yang ada di server. Berikut cara Anda menggunakan MapPut():

app.MapPut("/products", (Product product) => /* Update the data store using the `product` instance */);

DELETE: Menghapus sumber daya

Untuk mendukung kata kerja HTTP DELETE, gunakan MapDelete(). Idenya adalah agar klien mengirim melalui pengidentifikasi unik yang membantu server mengidentifikasi data yang akan dihapus. Berikut penggunaan umum metode ini:

app.MapDelete("/products/{id}", (int id) => /* Remove the record whose unique identifier matches `id` */);

Mengembalikan respons

Secara default, saat Anda merespons dengan jenis tertentu, kerangka kerja akan mengenali bahwa jenis ini akan diserialisasikan sebagai JSON. Berikut beberapa tipsnya:

app.MapGet("/products", () => products);
app.MapGet("/products/{id}", (int id) => products.SingleOrDefault(product => product.Id == id));
app.MapGet("/product", () => new { id = 1 });

Untuk kasus ini, Anda mendapatkan respons JSON yang terlihat seperti contoh ini:

// app.MapGet("/products", () => products);
[{
  "id": 1,
  "name": "a product"
}, {
  "id": 2,
  "name": "another product"
}]

// app.MapGet("/products/{id}", (int id) => products.SingleOrDefault(product => product.Id == id));
[{
  "id": 1,
  "name": "a product"
}]

// app.MapGet("/product", () => new { id = 1 });
{
  "id": 1
}

Di unit berikutnya, Anda akan menambahkan rute ke API minimal Anda.