Latihan - Mengimplementasikan operasi CRUD

Selesai

Mari terus memperluas pengontrol API web kami untuk menambahkan kemampuan untuk membuat (POST), memperbarui (PUT), dan menghapus (DELETE) pizza dari inventaris.

Menambahkan pizza

Mari Izinkan pizza untuk ditambahkan melalui API web dengan menggunakan metode POST.

Ganti komentar // POST action di Controllers/PizzaController.cs dengan kode berikut:

[HttpPost]
public IActionResult Create(Pizza pizza)
{            
    PizzaService.Add(pizza);
    return CreatedAtAction(nameof(Get), new { id = pizza.Id }, pizza);
}

Tindakan sebelumnya:

  • Hanya merespons kata kerja HTTP POST, seperti yang dilambangkan dengan atribut [HttpPost].
  • Menyisipkan objek Pizza isi permintaan ke dalam cache dalam memori.

Catatan

Karena pengontrol dianotasikan dengan atribut [ApiController], bisa diartikan bahwa parameter Pizza akan ditemukan dalam isi permintaan.

Parameter pertama dalam panggilan metode CreatedAtAction mewakili nama tindakan. Kata kunci nameof digunakan untuk menghindari pengodean permanen nama tindakan. CreatedAtAction menggunakan nama tindakan untuk menghasilkan header respons HTTP location dengan URL ke pizza yang baru dibuat, seperti yang dijelaskan di unit sebelumnya.

Memodifikasi pizza

Sekarang, mari izinkan pizza untuk diperbarui melalui API web dengan menggunakan metode PUT.

Ganti komentar // PUT action di Controllers/PizzaController.cs dengan kode berikut:

[HttpPut("{id}")]
public IActionResult Update(int id, Pizza pizza)
{
    if (id != pizza.Id)
        return BadRequest();
           
    var existingPizza = PizzaService.Get(id);
    if(existingPizza is null)
        return NotFound();
   
    PizzaService.Update(pizza);           
   
    return NoContent();
}

Tindakan sebelumnya:

  • Hanya merespons kata kerja HTTP PUT, seperti yang ditunjukkan oleh atribut [HttpPut].
  • Mengharuskan nilai parameter id disertakan dalam segmen URL setelah pizza/.
  • Mengembalikan IActionResult, karena jenis pengembalian ActionResult tidak diketahui hingga waktu proses. Metode BadRequest, NotFound, dan NoContent masing-masing menampilkan jenis BadRequestResult, NotFoundResult, dan NoContentResult.

Catatan

Karena pengontrol dianotasikan dengan atribut [ApiController], bisa diartikan bahwa parameter Pizza akan ditemukan dalam isi permintaan.

Menghapus pizza

Terakhir, mari izinkan pizza untuk dihapus melalui API web dengan menggunakan metode DELETE.

Ganti komentar // DELETE action di Controllers/PizzaController.cs dengan kode berikut:

[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
    var pizza = PizzaService.Get(id);
   
    if (pizza is null)
        return NotFound();
       
    PizzaService.Delete(id);
   
    return NoContent();
}

Tindakan sebelumnya:

  • Hanya merespons kata kerja HTTP DELETE, seperti yang dilambangkan dengan atribut [HttpDelete].
  • Mengharuskan nilai parameter id disertakan dalam segmen URL setelah pizza/.
  • Menampilkan IActionResult karena jenis pengembalian ActionResult tidak diketahui hingga waktu proses. Metode NotFound dan NoContent masing-masing menampilkan jenis NotFoundResult dan NoContentResult.
  • Mengkueri cache dalam memori untuk pizza yang cocok dengan parameter id yang disediakan.

Ingatlah untuk menyimpan file Controllers/PizzaController.cs sebelum melanjutkan,

Membangun dan menjalankan API web yang sudah selesai

Bangun dan mulai API web dengan menjalankan perintah berikut:

dotnet run

Menguji API web yang sudah selesai dengan file HTTP

  1. Buka kembali file ContosoPizza.http .

  2. Buat permintaan POST untuk menambahkan pizza baru di HttpRepl dengan menggunakan perintah berikut:

    POST {{ContosoPizza_HostAddress}}/pizza/
    Content-Type: application/json
    
    {
        "name": "Hawaii",
        "isGlutenFree": false
    }
    
    ###
    

    Perintah sebelumnya mengembalikan pizza yang baru dibuat:

    HTTP/1.1 201 Created
    Connection: close
    Content-Type: application/json; charset=utf-8
    Date: Wed, 17 Jan 2024 17:03:02 GMT
    Server: Kestrel
    Location: http://localhost:5192/Pizza/3
    Transfer-Encoding: chunked
    
    {
        "id": 3,
        "name": "Hawaii",
        "isGlutenFree": false
    }
    
  3. Perbarui pizza Hawaii baru ke pizza Hawaiian dengan permintaan PUT dengan menggunakan perintah berikut:

    PUT {{ContosoPizza_HostAddress}}/pizza/3
    Content-Type: application/json
    
    {
        "id": 3,
        "name": "Hawaiian",
        "isGlutenFree": false
    }
    
    ###
    

    Perintah sebelumnya menampilkan output berikut yang menunjukkan keberhasilan:

    HTTP/1.1 204 No Content
    Connection: close
    Date: Wed, 17 Jan 2024 17:07:30 GMT
    Server: Kestrel
    

    Untuk memastikan bahwa pizza telah diperbarui, jalankan ulang tindakan GET dengan menggunakan perintah berikut:

    GET {{ContosoPizza_HostAddress}}/pizza/3
    Accept: application/json
    
    ###
    

    Perintah sebelumnya menampilkan pizza yang baru diperbarui:

    HTTP/1.1 200 OK
    Connection: close
    Content-Type: application/json; charset=utf-8
    Date: Wed, 17 Jan 2024 17:09:01 GMT
    Server: Kestrel
    Transfer-Encoding: chunked
    
    {
        "id": 3,
        "name": "Hawaiian",
        "isGlutenFree": false
    }
    
  4. API kami juga dapat menghapus pizza yang baru dibuat melalui tindakan DELETE jika Anda menjalankan perintah berikut:

    DELETE {{ContosoPizza_HostAddress}}/pizza/3
    
    ###
    

    Perintah sebelumnya menampilkan hasil 204 No Content untuk keberhasilan:

    HTTP/1.1 204 No Content
    Date: Fri, 02 Apr 2021 23:30:04 GMT
    Server: Kestrel
    

    Untuk memastikan bahwa pizza telah dihapus, jalankan ulang tindakan GET dengan menggunakan perintah berikut:

    GET {{ContosoPizza_HostAddress}}/pizza/
    Accept: application/json
    
    ###
    

    Perintah sebelumnya menampilkan pizza asli sebagai hasil:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    Date: Fri, 02 Apr 2021 23:31:15 GMT
    Server: Kestrel
    Transfer-Encoding: chunked
    
    [
        {
            "id": 1,
            "name": "Classic Italian",
            "isGlutenFree": false
        },
        {
            "id": 2,
            "name": "Veggie",
            "isGlutenFree": true
        }
    ]
    

Anda sekarang selesai menerapkan dan menguji API web yang baru dibuat yang dibangun dengan ASP.NET Core.

Opsional: Uji API web yang sudah selesai dengan HTTPREPL Baris Perintah

  1. Buka kembali terminal httprepl yang ada, atau buka terminal terintegrasi baru dari Visual Studio Code dengan memilih Terminal>Terminal Baru dari menu utama.

  2. Jika Anda membuka terminal baru, sambungkan ke API web dengan menjalankan perintah berikut:

    httprepl https://localhost:{PORT}
    

    Sebagai alternatif, jalankan perintah berikut kapan saja saat HttpRepl berjalan:

    connect https://localhost:{PORT}
    
  3. Buka titik akhir Pizza dengan menjalankan perintah berikut:

    cd Pizza
    
  4. Jalankan perintah berikut untuk melihat tindakan baru di API Pizza:

    ls
    

    Perintah sebelumnya menunjukkan output API yang tersedia untuk titik akhir Pizza:

        https://localhost:{PORT}/Pizza> ls
        .      [GET|POST]
        ..     []
        {id}   [GET|PUT|DELETE]
    
  5. Buat permintaan POST untuk menambahkan pizza baru di HttpRepl dengan menggunakan perintah berikut:

    post -c "{"name":"Hawaii", "isGlutenFree":false}"
    

    Perintah sebelumnya mengembalikan pizza yang baru dibuat:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    Date: Fri, 02 Apr 2021 23:23:09 GMT
    Location: https://localhost:{PORT}/Pizza?id=3
    Server: Kestrel
    Transfer-Encoding: chunked
    
    {
        "id": 3,
        "name": "Hawaii",
        "isGlutenFree": false
    }
    
  6. Perbarui pizza Hawaii baru ke pizza Hawaiian dengan permintaan PUT dengan menggunakan perintah berikut:

    put 3 -c  "{"id": 3, "name":"Hawaiian", "isGlutenFree":false}"
    

    Perintah sebelumnya menampilkan output berikut yang menunjukkan keberhasilan:

    HTTP/1.1 204 No Content
    Date: Fri, 02 Apr 2021 23:23:55 GMT
    Server: Kestrel
    

    Untuk memastikan bahwa pizza telah diperbarui, jalankan ulang tindakan GET dengan menggunakan perintah berikut:

    get 3
    

    Perintah sebelumnya menampilkan pizza yang baru diperbarui:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    Date: Fri, 02 Apr 2021 23:27:37 GMT
    Server: Kestrel
    Transfer-Encoding: chunked
    
    {
        "id": 3,
        "name": "Hawaiian",
        "isGlutenFree": false
    }
    
  7. API kami juga dapat menghapus pizza yang baru dibuat melalui tindakan DELETE jika Anda menjalankan perintah berikut:

    delete 3
    

    Perintah sebelumnya menampilkan hasil 204 No Content untuk keberhasilan:

    HTTP/1.1 204 No Content
    Date: Fri, 02 Apr 2021 23:30:04 GMT
    Server: Kestrel
    

    Untuk memastikan bahwa pizza telah dihapus, jalankan ulang tindakan GET dengan menggunakan perintah berikut:

    get
    

    Perintah sebelumnya menampilkan pizza asli sebagai hasil:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    Date: Fri, 02 Apr 2021 23:31:15 GMT
    Server: Kestrel
    Transfer-Encoding: chunked
    
    [
        {
            "id": 1,
            "name": "Classic Italian",
            "isGlutenFree": false
        },
        {
            "id": 2,
            "name": "Veggie",
            "isGlutenFree": true
        }
    ]
    

Anda sekarang selesai menerapkan dan menguji API web yang baru dibuat yang dibangun dengan ASP.NET Core.