Oefening - CRUD-bewerkingen implementeren

Voltooid

Laten we doorgaan met het uitbreiden van onze web-API-controller om de mogelijkheid toe te voegen om pizza's te maken (POST), bij te werken (PUT) en (DELETE) pizza uit onze voorraad te verwijderen.

Een pizza toevoegen

Laten we een pizza toevoegen via de web-API met behulp van een POST methode.

Vervang de opmerking // POST action in Controllers/PizzaController.cs door de volgende code:

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

De bovenstaande actie:

  • Reageert alleen op het HTTP-woord POST , zoals aangegeven door het [HttpPost] kenmerk.
  • Hiermee voegt u het object van Pizza de aanvraagtekst in de cache in het geheugen in.

Notitie

Omdat er aan de controller een opmerking is toegevoegd met het [ApiController]-kenmerk, wordt geïmpliceerd dat de Pizza-parameter worden gevonden in de aanvraagbody.

De eerste parameter in de CreatedAtAction-methodeaanroep vertegenwoordigt een actienaam. Het nameof-trefwoord wordt gebruikt om hard-coding van de actienaam te voorkomen. CreatedAtAction gebruikt de actienaam om een location HTTP-antwoordheader te genereren met een URL naar de zojuist gemaakte pizza, zoals uitgelegd in de vorige les.

Een pizza wijzigen

Nu gaan we inschakelen dat een pizza kan worden bijgewerkt via de web-API met behulp van een PUT methode.

Vervang de opmerking // PUT action in Controllers/PizzaController.cs door de volgende code:

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

De bovenstaande actie:

  • Reageert alleen op de HTTP PUT-opdracht, zoals wordt aangegeven met het [HttpPut]-kenmerk.
  • Vereist dat de waarde van de id parameter wordt opgenomen in het URL-segment na pizza/.
  • Retourneert IActionResult, omdat het ActionResult retourtype pas bekend is als runtime. De BadRequest, NotFounden NoContent methoden retourneren BadRequestResultrespectievelijk , NotFoundResulten NoContentResult typen.

Notitie

Omdat er aan de controller een opmerking is toegevoegd met het [ApiController]-kenmerk, wordt geïmpliceerd dat de Pizza-parameter worden gevonden in de aanvraagbody.

Een pizza verwijderen

Laten we ten slotte een pizza via de web-API verwijderen met behulp van een DELETE methode.

Vervang de opmerking // DELETE action in Controllers/PizzaController.cs door de volgende code:

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

De bovenstaande actie:

  • Reageert alleen op het HTTP-woord DELETE , zoals aangegeven door het [HttpDelete] kenmerk.
  • Vereist dat de waarde van de id parameter wordt opgenomen in het URL-segment na pizza/.
  • Retourneert IActionResult omdat het geretourneerde type ActionResult niet bekend is tot runtime. De methoden NotFound en NoContent retourneren respectievelijk de typen NotFoundResult en NoContentResult.
  • Query's uitvoeren op de cache in het geheugen voor een pizza die overeenkomt met de opgegeven id parameter.

Vergeet niet om het bestand Controllers/PizzaController.cs op te slaan voordat u doorgaat.

De voltooide web-API bouwen en uitvoeren

Bouw en start de web-API door de volgende opdracht uit te voeren:

dotnet run

De voltooide web-API testen met HTTP-bestanden

  1. Open het bestand ContosoPizza.http opnieuw.

  2. Maak een POST aanvraag om een nieuwe pizza toe HttpRepl te voegen met behulp van de volgende opdracht:

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

    Met de voorgaande opdracht wordt de zojuist gemaakte pizza geretourneerd:

    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. Werk de nieuwe Hawaii pizza bij naar een Hawaiian pizza met een PUT aanvraag met behulp van de volgende opdracht:

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

    De voorgaande opdracht retourneert de volgende uitvoer die aangeeft dat het is gelukt:

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

    Voer de GET actie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is bijgewerkt:

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

    Met de voorgaande opdracht wordt de zojuist bijgewerkte pizza geretourneerd:

    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. Onze API kan de zojuist gemaakte pizza ook verwijderen via de DELETE actie als u de volgende opdracht uitvoert:

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

    De voorgaande opdracht retourneert een 204 No Content resultaat voor succes:

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

    Voer de GET actie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is verwijderd:

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

    De voorgaande opdracht retourneert de oorspronkelijke pizza's als resultaat:

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

U bent nu klaar met het implementeren en testen van een zojuist gemaakte web-API die is gebouwd met ASP.NET Core.

Optioneel: de voltooide web-API testen met OPDRACHTREGEL-HTTPREPL

  1. Open de bestaande httprepl terminal opnieuw of open een nieuwe geïntegreerde terminal vanuit Visual Studio Code door Terminal>New Terminal te selecteren in het hoofdmenu.

  2. Als u een nieuwe terminal hebt geopend, maakt u verbinding met de web-API door de volgende opdracht uit te voeren:

    httprepl https://localhost:{PORT}
    

    U kunt ook de volgende opdracht op elk gewenst moment uitvoeren terwijl HttpRepl deze wordt uitgevoerd:

    connect https://localhost:{PORT}
    
  3. Ga naar het Pizza eindpunt door de volgende opdracht uit te voeren:

    cd Pizza
    
  4. Voer de volgende opdracht uit om de nieuwe acties op de Pizza-API te bekijken:

    ls
    

    De voorgaande opdracht toont een uitvoer van beschikbare API's voor het Pizza eindpunt:

        https://localhost:{PORT}/Pizza> ls
        .      [GET|POST]
        ..     []
        {id}   [GET|PUT|DELETE]
    
  5. Maak een POST aanvraag om een nieuwe pizza toe HttpRepl te voegen met behulp van de volgende opdracht:

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

    Met de voorgaande opdracht wordt de zojuist gemaakte pizza geretourneerd:

    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. Werk de nieuwe Hawaii pizza bij naar een Hawaiian pizza met een PUT aanvraag met behulp van de volgende opdracht:

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

    De voorgaande opdracht retourneert de volgende uitvoer die aangeeft dat het is gelukt:

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

    Voer de GET actie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is bijgewerkt:

    get 3
    

    Met de voorgaande opdracht wordt de zojuist bijgewerkte pizza geretourneerd:

    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. Onze API kan de zojuist gemaakte pizza ook verwijderen via de DELETE actie als u de volgende opdracht uitvoert:

    delete 3
    

    De voorgaande opdracht retourneert een 204 No Content resultaat voor succes:

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

    Voer de GET actie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is verwijderd:

    get
    

    De voorgaande opdracht retourneert de oorspronkelijke pizza's als resultaat:

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

U bent nu klaar met het implementeren en testen van een zojuist gemaakte web-API die is gebouwd met ASP.NET Core.