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
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 setelahpizza/
. - Mengembalikan
IActionResult
, karena jenis pengembalianActionResult
tidak diketahui hingga waktu proses. MetodeBadRequest
,NotFound
, danNoContent
masing-masing menampilkan jenisBadRequestResult
,NotFoundResult
, danNoContentResult
.
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 setelahpizza/
. - Menampilkan
IActionResult
karena jenis pengembalianActionResult
tidak diketahui hingga waktu proses. MetodeNotFound
danNoContent
masing-masing menampilkan jenisNotFoundResult
danNoContentResult
. - 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
Buka kembali file ContosoPizza.http .
Buat permintaan
POST
untuk menambahkan pizza baru diHttpRepl
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 }
Perbarui pizza
Hawaii
baru ke pizzaHawaiian
dengan permintaanPUT
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 }
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
Buka kembali terminal
httprepl
yang 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
HttpRepl
berjalan:connect https://localhost:{PORT}
Buka titik akhir
Pizza
dengan menjalankan perintah berikut:cd Pizza
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]
Buat permintaan
POST
untuk menambahkan pizza baru diHttpRepl
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 }
Perbarui pizza
Hawaii
baru ke pizzaHawaiian
dengan permintaanPUT
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 }
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.