Harjoitus – CRUD-toimintojen toteuttaminen

Valmis

Jatketaan WWW-ohjelmointirajapinnan ohjauskoneen laajentamista, jotta voimme luoda (POST), päivittää (PUT) ja poistaa (DELETE) pizzan luettelostamme.

Lisää pizza

Otetaanpa käyttöön pizzan lisääminen verkon ohjelmointirajapinnan kautta käyttämällä POST-menetelmää.

Korvaa // POST actionControllers/PizzaController.cs kommentti seuraavalla koodilla:

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

Edellinen toiminto:

  • Vastaa vain HTTP POST verbiin, joka on merkitty [HttpPost] määritteellä.
  • Lisää pyynnön rungon Pizza-objektin välimuistiin.

Muistiinpano

Koska rekisterinpitäjälle on lisätty merkintä [ApiController]-määrite, Pizza-parametri löytyy pyynnön leipätekstistä.

CreatedAtAction -menetelmäkutsun ensimmäinen parametri edustaa toiminnon nimeä. nameof-avainsanaa käytetään, jotta toiminnon nimen koostaminen ei ole kiinteää. CreatedAtAction luo toimintonimen avulla location HTTP-vastausotsikon, jossa on URL-osoite juuri luotuun pizzaan, kuten edellisessä yksikössä selitettiin.

Pizzan muokkaaminen

Otetaanpa sitten käyttöön pizzan päivittäminen verkon ohjelmointirajapinnan kautta käyttämällä PUT menetelmää.

Korvaa // PUT actionControllers/PizzaController.cs kommentti seuraavalla koodilla:

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

Edellinen toiminto:

  • Vastaa vain HTTP PUT -verbiin, joka on merkitty [HttpPut] määritteellä.
  • Edellyttää, että id-parametrin arvo sisältyy URL-segmenttiin pizza/jälkeen.
  • Palauttaa IActionResult, koska ActionResult palautustyyppiä ei tiedetä ennen suorituspalvelua. BadRequest-, NotFound- ja NoContent-menetelmät palauttavat vastaavasti BadRequestResult-, NotFoundResult- ja NoContentResult -tyypit.

Muistiinpano

Koska rekisterinpitäjälle on lisätty merkintä [ApiController]-määrite, Pizza-parametri löytyy pyynnön leipätekstistä.

Poista pizza

Otetaan lopuksi käyttöön pizzan poistaminen verkon ohjelmointirajapinnan kautta käyttämällä DELETE menetelmää.

Korvaa // DELETE actionControllers/PizzaController.cs kommentti seuraavalla koodilla:

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

Edellinen toiminto:

  • Vastaa vain HTTP DELETE verbiin, joka on merkitty [HttpDelete] määritteellä.
  • Edellyttää, että id-parametrin arvo sisältyy URL-segmenttiin pizza/jälkeen.
  • Palauttaa IActionResult, koska ActionResult palautustyyppiä ei tiedetä ennen suorituspalvelua. NotFound- ja NoContent-menetelmät palauttavat NotFoundResult- ja NoContentResult-tyyppejä.
  • Tekee kyselyn välimuistiin pizzalle, joka vastaa annettua id-parametria.

Muista tallentaa Controllers/PizzaController.cs -tiedosto ennen jatkamista.

Valmiin WWW-ohjelmointirajapinnan luominen ja suorittaminen

Luo ja käynnistä www-ohjelmointirajapinta suorittamalla seuraava komento:

dotnet run

Valmiin www-ohjelmointirajapinnan testaaminen HTTP-tiedostoilla

  1. Avaa uudelleen ContosoPizza.http- tiedosto.

  2. Tee POST pyyntö lisätä uusi pizza HttpRepl käyttämällä seuraavaa komentoa:

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

    Edellinen komento palauttaa juuri luodun pizzan:

    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. Päivitä uusi Hawaii pizza Hawaiian pizzaan PUT-pyynnöllä seuraavalla komennolla:

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

    Edellinen komento palauttaa seuraavan onnistumisen osoittavan tulosteen:

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

    Voit varmistaa, että pizza on päivitetty, suorittamalla GET toiminnon uudelleen käyttämällä seuraavaa komentoa:

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

    Edellinen komento palauttaa äskettäin päivitetyn pizzan:

    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. Ohjelmointirajapintamme voi myös poistaa juuri luodun pizzan DELETE toiminnon avulla, jos suoritat seuraavan komennon:

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

    Edellinen komento palauttaa onnistumisen 204 No Content tuloksen:

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

    Voit varmistaa, että pizza on poistettu, suorittamalla GET toiminnon uudelleen käyttämällä seuraavaa komentoa:

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

    Edellinen komento palauttaa alkuperäiset pizzat tuloksina:

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

Olet nyt toteuttanut ja testannut juuri luomasi verkko-ohjelmointirajapinnan, joka on luotu ASP.NET Coren avulla.

Valinnainen: Testaa valmis WWW-ohjelmointirajapinta komentorivillä HTTPREPL

  1. Avaa olemassa oleva httprepl pääte uudelleen tai avaa uusi integroitu pääteVisual Studio Codesta valitsemalla päävalikosta Terminal>New Terminal.

  2. Jos olet avannut uuden päätteen, muodosta yhteys www-ohjelmointirajapintaan suorittamalla seuraava komento:

    httprepl https://localhost:{PORT}
    

    Vaihtoehtoisesti voit suorittaa seuraavan komennon milloin tahansa HttpRepl suoritettaessa:

    connect https://localhost:{PORT}
    
  3. Siirry Pizza päätepisteeseen suorittamalla seuraava komento:

    cd Pizza
    
  4. Suorita seuraava komento, jotta näet uudet toiminnot pizzan ohjelmointirajapinnassa:

    ls
    

    Edellä oleva komento näyttää käytettävissä olevien ohjelmointirajapintojen tuloksen Pizza päätepisteelle:

        https://localhost:{PORT}/Pizza> ls
        .      [GET|POST]
        ..     []
        {id}   [GET|PUT|DELETE]
    
  5. Tee POST pyyntö lisätä uusi pizza HttpRepl käyttämällä seuraavaa komentoa:

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

    Edellinen komento palauttaa juuri luodun pizzan:

    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. Päivitä uusi Hawaii pizza Hawaiian pizzaan PUT-pyynnöllä seuraavalla komennolla:

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

    Edellinen komento palauttaa seuraavan onnistumisen osoittavan tulosteen:

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

    Voit varmistaa, että pizza on päivitetty, suorittamalla GET toiminnon uudelleen käyttämällä seuraavaa komentoa:

    get 3
    

    Edellinen komento palauttaa äskettäin päivitetyn pizzan:

    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. Ohjelmointirajapintamme voi myös poistaa juuri luodun pizzan DELETE toiminnon avulla, jos suoritat seuraavan komennon:

    delete 3
    

    Edellinen komento palauttaa onnistumisen 204 No Content tuloksen:

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

    Voit varmistaa, että pizza on poistettu, suorittamalla GET toiminnon uudelleen käyttämällä seuraavaa komentoa:

    get
    

    Edellinen komento palauttaa alkuperäiset pizzat tuloksina:

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

Olet nyt toteuttanut ja testannut juuri luomasi verkko-ohjelmointirajapinnan, joka on luotu ASP.NET Coren avulla.