Cvičení – implementace operací CRUD

Dokončeno

Pokračujme rozšířením našeho kontroleru webového rozhraní API, abychom přidali možnost vytvořit (POST), aktualizovat (PUT) a odstranit (DELETE) pizzu z inventáře.

Přidání pizzy

Pojďme povolit přidání pizzy prostřednictvím webového rozhraní API pomocí POST metody.

V souboru Controllers/PizzaController.cs nahraďte komentář // POST action následujícím kódem:

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

Předcházející akce:

  • Reaguje pouze na příkaz HTTP POST , jak je označen atributem [HttpPost] .
  • Vloží objekt těla Pizza požadavku do mezipaměti v paměti.

Poznámka:

Kontroler je anotován atributem [ApiController], který označuje, že se parametr Pizza nachází v textu požadavku.

První parametr ve volání metody CreatedAtAction představuje název akce. Klíčové slovo nameof slouží k tomu, aby se předešlo pevnému zakódování názvu akce. CreatedAtAction pomocí názvu akce vygeneruje hlavičku location odpovědi HTTP s adresou URL nově vytvořené pizzy, jak je vysvětleno v předchozí lekci.

Úprava pizzy

Teď pomocí metody povolíme aktualizaci pizzy prostřednictvím webového PUT rozhraní API.

V souboru Controllers/PizzaController.cs nahraďte komentář // PUT action následujícím kódem:

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

Předcházející akce:

  • Reaguje pouze na příkaz HTTP PUT, jak označuje atribut [HttpPut].
  • Vyžaduje, aby id hodnota parametru byla zahrnuta do segmentu adresy URL za pizza/.
  • Vrátí IActionResulthodnotu , protože návratový ActionResult typ není známý, dokud modul runtime. , BadRequestNotFounda NoContent metody vrací BadRequestResult, NotFoundResulta NoContentResult typy, v uvedeném pořadí.

Poznámka:

Kontroler je anotován atributem [ApiController], který označuje, že se parametr Pizza nachází v textu požadavku.

Odebrání pizzy

Nakonec povolíme odebrání pizzy prostřednictvím webového rozhraní API pomocí DELETE metody.

V souboru Controllers/PizzaController.cs nahraďte komentář // DELETE action následujícím kódem:

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

Předcházející akce:

  • Reaguje pouze na příkaz HTTP DELETE , jak je označen atributem [HttpDelete] .
  • Vyžaduje, aby id hodnota parametru byla zahrnuta do segmentu adresy URL za pizza/.
  • Vrátí IActionResult, protože návratový typ ActionResult není znám až do doby běhu. Metody NotFound a NoContent vracejí typy NotFoundResult a NoContentResult (v uvedeném pořadí).
  • Dotazuje mezipaměť v paměti na pizzu, která odpovídá zadanému id parametru.

Než budete pokračovat, nezapomeňte soubor Controllers/PizzaController.cs uložit.

Sestavení a spuštění dokončeného webového rozhraní API

Spuštěním následujícího příkazu sestavte a spusťte webové rozhraní API:

dotnet run

Testování dokončeného webového rozhraní API pomocí souborů HTTP

  1. Znovu otevřete soubor ContosoPizza.http.

  2. Pomocí POST následujícího příkazu vytvořte žádost o přidání nové pizzy HttpRepl :

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

    Předchozí příkaz vrátí nově vytvořenou pizzu:

    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. Aktualizujte novou Hawaii pizzu na pizzu Hawaiian PUT pomocí požadavku pomocí následujícího příkazu:

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

    Předchozí příkaz vrátí následující výstup, který označuje úspěch:

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

    Pokud chcete ověřit, že se pizza aktualizovala, spusťte GET akci znovu pomocí následujícího příkazu:

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

    Předchozí příkaz vrátí nově aktualizovanou pizzu:

    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. Pokud spustíte následující příkaz, může naše rozhraní API také odstranit nově vytvořenou pizzu DELETE prostřednictvím akce:

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

    Předchozí příkaz vrátí 204 No Content výsledek pro úspěch:

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

    Pokud chcete ověřit, že se pizza odebrala, spusťte GET akci znovu pomocí následujícího příkazu:

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

    Předchozí příkaz vrátí původní pizzy jako výsledky:

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

Dokončili jste implementaci a testování nově vytvořeného webového rozhraní API vytvořeného pomocí ASP.NET Core.

Volitelné: Otestování dokončeného webového rozhraní API pomocí httpREPL příkazového řádku

  1. Znovu otevřete existující httprepl terminál nebo otevřete nový integrovaný terminál v editoru Visual Studio Code tak, že v hlavní nabídce vyberete Terminál>nový terminál.

  2. Pokud jste otevřeli nový terminál, připojte se k webovému rozhraní API spuštěním následujícího příkazu:

    httprepl https://localhost:{PORT}
    

    Případně můžete při spuštění kdykoli HttpRepl spustit následující příkaz:

    connect https://localhost:{PORT}
    
  3. Spuštěním následujícího příkazu přejděte ke koncovému Pizza bodu:

    cd Pizza
    
  4. Spuštěním následujícího příkazu zobrazte nové akce v rozhraní Pizza API:

    ls
    

    Předchozí příkaz zobrazí výstup dostupných rozhraní API pro Pizza koncový bod:

        https://localhost:{PORT}/Pizza> ls
        .      [GET|POST]
        ..     []
        {id}   [GET|PUT|DELETE]
    
  5. Pomocí POST následujícího příkazu vytvořte žádost o přidání nové pizzy HttpRepl :

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

    Předchozí příkaz vrátí nově vytvořenou pizzu:

    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. Aktualizujte novou Hawaii pizzu na pizzu Hawaiian PUT pomocí požadavku pomocí následujícího příkazu:

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

    Předchozí příkaz vrátí následující výstup, který označuje úspěch:

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

    Pokud chcete ověřit, že se pizza aktualizovala, spusťte GET akci znovu pomocí následujícího příkazu:

    get 3
    

    Předchozí příkaz vrátí nově aktualizovanou pizzu:

    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. Pokud spustíte následující příkaz, může naše rozhraní API také odstranit nově vytvořenou pizzu DELETE prostřednictvím akce:

    delete 3
    

    Předchozí příkaz vrátí 204 No Content výsledek pro úspěch:

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

    Pokud chcete ověřit, že se pizza odebrala, spusťte GET akci znovu pomocí následujícího příkazu:

    get
    

    Předchozí příkaz vrátí původní pizzy jako výsledky:

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

Dokončili jste implementaci a testování nově vytvořeného webového rozhraní API vytvořeného pomocí ASP.NET Core.