Gyakorlat – CRUD műveletek implementálása

Befejeződött

Bővítsük tovább a webes API-vezérlőt, hogy hozzáadjuk a pizzák létrehozásának (), frissítésének (POSTPUT) és törlésének (DELETE) lehetőségét a készletből.

Pizza hozzáadása

Engedélyezzük egy pizza hozzáadását a webes API-val egy POST módszerrel.

Írja felül a // POST action megjegyzést a Controllers/PizzaController.cs fájlban a következő kóddal:

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

A fenti művelet a következőket végzi el:

  • Csak a HTTP-igére POST válaszol az attribútum által [HttpPost] meghatározott módon.
  • Beszúrja a kérelem törzsének objektumát Pizza a memóriabeli gyorsítótárba.

Feljegyzés

Abból, hogy a vezérlő az [ApiController] attribútummal van ellátva, következik, hogy a kérés törzsében megtalálható lesz a Pizza paraméter.

A CreatedAtAction metódushívás első paramétere egy művelet nevének felel meg. A nameof kulcsszó használatával elkerülhető a művelet nevének szerepeltetése a kódban. CreatedAtAction A műveletnév használatával létrehoz egy location HTTP-válaszfejlécet az újonnan létrehozott pizza URL-címével, ahogyan azt az előző leckében ismertette.

Pizza módosítása

Most engedélyezzük egy pizza frissítését a webes API-val egy PUT metódus használatával.

Írja felül a // PUT action megjegyzést a Controllers/PizzaController.cs fájlban a következő kóddal:

[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();
}

A fenti művelet a következőket végzi el:

  • Csak HTTP PUT utasításokra válaszol. Ezt a [HttpPut] attribútum jelzi.
  • Megköveteli, hogy a id paraméter értéke szerepel a következő pizza/URL-szegmensben.
  • Visszaadja IActionResult, mert a ActionResult visszatérési típus csak futtatókörnyezetben ismert. A BadRequest, NotFoundés NoContent a metódusok visszaadják BadRequestResulta , NotFoundResultés NoContentResult a típusokat.

Feljegyzés

Abból, hogy a vezérlő az [ApiController] attribútummal van ellátva, következik, hogy a kérés törzsében megtalálható lesz a Pizza paraméter.

Pizza eltávolítása

Végül engedélyezzük, hogy egy pizza el legyen távolítva a webes API-val egy DELETE módszerrel.

Írja felül a // DELETE action megjegyzést a Controllers/PizzaController.cs fájlban a következő kóddal:

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

A fenti művelet a következőket végzi el:

  • Csak a HTTP-igére DELETE válaszol az attribútum által [HttpDelete] meghatározott módon.
  • Megköveteli, hogy a id paraméter értéke szerepel a következő pizza/URL-szegmensben.
  • A(z) IActionResult értéket adja vissza, mert a(z) ActionResult visszaadott típus csak futásidőben derül ki. A(z) NotFound és a(z) NoContent metódusok NotFoundResult és NoContentResult típust adnak vissza.
  • Lekérdezi a memóriabeli gyorsítótárat a megadott id paraméternek megfelelő pizzához.

A folytatás előtt ne felejtse el menteni a Vezérlők/PizzaController.cs fájlt,

A kész webes API létrehozása és futtatása

Hozza létre és indítsa el a webes API-t az alábbi parancs futtatásával:

dotnet run

A kész webes API tesztelése HTTP-fájlokkal

  1. Nyissa meg újra a ContosoPizza.http fájlt.

  2. Kérjen egy POST új pizzát HttpRepl a következő paranccsal:

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

    Az előző parancs visszaadja az újonnan létrehozott pizzát:

    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. Frissítse az új Hawaii pizzát egy Hawaiian pizzára a PUT következő paranccsal:

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

    Az előző parancs a következő kimenetet adja vissza, amely a sikerességet jelzi:

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

    A pizza frissítésének ellenőrzéséhez futtassa újra a GET műveletet az alábbi paranccsal:

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

    Az előző parancs az újonnan frissített pizzát adja vissza:

    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. Az API az újonnan létrehozott pizzát is törölheti a DELETE műveleten keresztül, ha a következő parancsot futtatja:

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

    Az előző parancs sikeres eredményt ad 204 No Content vissza:

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

    A pizza eltávolításának ellenőrzéséhez futtassa újra a GET műveletet az alábbi paranccsal:

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

    Az előző parancs eredményként visszaadja az eredeti pizzákat:

    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
        }
    ]
    

Ezzel befejezte a ASP.NET Core használatával létrehozott, újonnan létrehozott webes API implementálását és tesztelését.

Nem kötelező: A kész webes API tesztelése a HTTPREPL parancssorral

  1. Nyissa meg újra a meglévő httprepl terminált, vagy nyisson meg egy új integrált terminált a Visual Studio Code-ból a főmenü Új terminál termináljának> kiválasztásával.

  2. Ha megnyitott egy új terminált, csatlakozzon a webes API-hoz az alábbi parancs futtatásával:

    httprepl https://localhost:{PORT}
    

    Másik lehetőségként futtassa a következő parancsot bármikor, miközben HttpRepl fut:

    connect https://localhost:{PORT}
    
  3. Lépjen a Pizza végpontra a következő parancs futtatásával:

    cd Pizza
    
  4. Futtassa a következő parancsot a Pizza API új műveleteinek megtekintéséhez:

    ls
    

    Az előző parancs a végponthoz elérhető API-k kimenetét jeleníti meg Pizza :

        https://localhost:{PORT}/Pizza> ls
        .      [GET|POST]
        ..     []
        {id}   [GET|PUT|DELETE]
    
  5. Kérjen egy POST új pizzát HttpRepl a következő paranccsal:

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

    Az előző parancs visszaadja az újonnan létrehozott pizzát:

    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. Frissítse az új Hawaii pizzát egy Hawaiian pizzára a PUT következő paranccsal:

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

    Az előző parancs a következő kimenetet adja vissza, amely a sikerességet jelzi:

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

    A pizza frissítésének ellenőrzéséhez futtassa újra a GET műveletet az alábbi paranccsal:

    get 3
    

    Az előző parancs az újonnan frissített pizzát adja vissza:

    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. Az API az újonnan létrehozott pizzát is törölheti a DELETE műveleten keresztül, ha a következő parancsot futtatja:

    delete 3
    

    Az előző parancs sikeres eredményt ad 204 No Content vissza:

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

    A pizza eltávolításának ellenőrzéséhez futtassa újra a GET műveletet az alábbi paranccsal:

    get
    

    Az előző parancs eredményként visszaadja az eredeti pizzákat:

    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
        }
    ]
    

Ezzel befejezte a ASP.NET Core használatával létrehozott, újonnan létrehozott webes API implementálását és tesztelését.