Latihan - Mengimplementasikan operasi CRUD
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
Pizzaisi 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
iddisertakan dalam segmen URL setelahpizza/. - Mengembalikan
IActionResult, karena jenis pengembalianActionResulttidak diketahui hingga waktu proses. MetodeBadRequest,NotFound, danNoContentmasing-masing menampilkan jenisBadRequestResult,NotFoundResult, danNoContentResult.
Catatan
Karena pengontrol dianotasikan dengan atribut [ApiController], bisa diartikan bahwa parameter Pizza akan ditemukan dalam isi permintaan.
Hapus 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
iddisertakan dalam segmen URL setelahpizza/. - Menampilkan
IActionResultkarena jenis pengembalianActionResulttidak diketahui hingga waktu proses. MetodeNotFounddanNoContentmasing-masing menampilkan jenisNotFoundResultdanNoContentResult. - Mencari cache yang ada dalam memori untuk pizza yang cocok dengan parameter
idyang 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
Buka kembali file ContosoPizza.http .
Buat permintaan
POSTuntuk menambahkan pizza baru diHttpRepldengan 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 }Perbarui pizza
Hawaiibaru ke pizzaHawaiiandengan permintaanPUTdengan 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: KestrelUntuk memastikan bahwa pizza telah diperbarui, jalankan ulang tindakan
GETdengan menggunakan perintah berikut:GET {{ContosoPizza_HostAddress}}/pizza/3 Accept: application/json ###Perintah sebelumnya mengembalikan 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 }API kami juga dapat menghapus pizza yang baru dibuat melalui tindakan
DELETEjika Anda menjalankan perintah berikut:DELETE {{ContosoPizza_HostAddress}}/pizza/3 ###Perintah sebelumnya menghasilkan hasil
204 No Contentuntuk berhasil:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelUntuk memastikan bahwa pizza telah dihapus, jalankan ulang tindakan
GETdengan 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 Baris Perintah HTTPREPL
Buka kembali terminal
httpreplyang ada, atau buka terminal terintegrasi baru dari Visual Studio Code dengan memilih Terminal>Terminal Baru dari menu utama.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
HttpReplberjalan:connect https://localhost:{PORT}Akses titik akhir
Pizzadengan menjalankan perintah berikut:cd PizzaJalankan perintah berikut untuk melihat tindakan baru di API Pizza:
lsPerintah sebelumnya menunjukkan output API yang tersedia untuk titik akhir
Pizza:https://localhost:{PORT}/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]Buat permintaan
POSTuntuk menambahkan pizza baru diHttpRepldengan 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 }Perbarui pizza
Hawaiibaru ke pizzaHawaiiandengan permintaanPUTdengan 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: KestrelUntuk memastikan bahwa pizza telah diperbarui, jalankan ulang tindakan
GETdengan menggunakan perintah berikut:get 3Perintah sebelumnya mengembalikan 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 }API kami juga dapat menghapus pizza yang baru dibuat melalui tindakan
DELETEjika Anda menjalankan perintah berikut:delete 3Perintah sebelumnya menghasilkan hasil
204 No Contentuntuk berhasil:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelUntuk memastikan bahwa pizza telah dihapus, jalankan ulang tindakan
GETdengan menggunakan perintah berikut:getPerintah 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.