Ćwiczenie — implementowanie operacji CRUD

Ukończone

Kontynuujmy rozszerzanie kontrolera internetowego interfejsu API, aby dodać możliwość tworzenia (POST), aktualizowania (PUT) i usuwania pizzy (DELETE) z naszego spisu.

Dodawanie pizzy

Włączmy dodawanie pizzy za pośrednictwem internetowego interfejsu API przy użyciu POST metody .

Zastąp komentarz // POST action w pliku Controllers/PizzaController.cs następującym kodem:

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

Powyższa akcja ma następujące działanie:

  • Odpowiada tylko na czasownik HTTP POST , co oznacza atrybut [HttpPost] .
  • Wstawia obiekt treści żądania Pizza do pamięci podręcznej w pamięci.

Uwaga

Ponieważ kontroler ma adnotację w postaci atrybutu [ApiController], zakłada się, że parametr Pizza zostanie znaleziony w treści żądania.

Pierwszy parametr wywołania metody CreatedAtAction reprezentuje nazwę akcji. Słowo kluczowe nameof jest używane, aby nie kodować nazwy akcji trwale. CreatedAtAction Używa nazwy akcji, aby wygenerować location nagłówek odpowiedzi HTTP z adresem URL nowo utworzonej pizzy, jak wyjaśniono w poprzedniej lekcji.

Modyfikowanie pizzy

Teraz włączmy aktualizację pizzy za pośrednictwem internetowego interfejsu API przy użyciu PUT metody .

Zastąp komentarz // PUT action w pliku Controllers/PizzaController.cs następującym kodem:

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

Powyższa akcja ma następujące działanie:

  • Odpowiada tylko na czasownik HTTP PUT, co wskazuje atrybut [HttpPut].
  • Wymaga, aby id wartość parametru została uwzględniona w segmencie adresu URL po pizza/.
  • Zwraca wartość IActionResult, ponieważ zwracany ActionResult typ nie jest znany do czasu wykonania. Metody BadRequest, NotFoundi NoContent zwracają BadRequestResultodpowiednio typy , NotFoundResulti NoContentResult .

Uwaga

Ponieważ kontroler ma adnotację w postaci atrybutu [ApiController], zakłada się, że parametr Pizza zostanie znaleziony w treści żądania.

Usuwanie pizzy

Na koniec włączmy usunięcie pizzy za pośrednictwem internetowego interfejsu API przy użyciu DELETE metody .

Zastąp komentarz // DELETE action w pliku Controllers/PizzaController.cs następującym kodem:

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

Powyższa akcja ma następujące działanie:

  • Odpowiada tylko na czasownik HTTP DELETE , co oznacza atrybut [HttpDelete] .
  • Wymaga, aby id wartość parametru została uwzględniona w segmencie adresu URL po pizza/.
  • Zwraca element IActionResult, ponieważ zwracany typ ActionResult nie jest znany do czasu wykonania. Metody NotFound i NoContent zwracają odpowiednio typy NotFoundResult i NoContentResult.
  • Wysyła zapytanie do pamięci podręcznej pizzy zgodnej z podanym id parametrem.

Pamiętaj, aby zapisać plik Controllers/PizzaController.cs przed kontynuowaniem,

Kompilowanie i uruchamianie gotowego internetowego interfejsu API

Skompiluj i uruchom internetowy interfejs API, uruchamiając następujące polecenie:

dotnet run

Testowanie gotowego internetowego interfejsu API przy użyciu plików HTTP

  1. Otwórz ponownie plik ContosoPizza.http.

  2. POST Utwórz żądanie dodania nowej pizzy przy HttpRepl użyciu następującego polecenia:

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

    Poprzednie polecenie zwraca nowo utworzoną pizzę:

    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. Zaktualizuj nową Hawaii pizzę Hawaiian do pizzy za PUT pomocą żądania, używając następującego polecenia:

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

    Powyższe polecenie zwraca następujące dane wyjściowe, które wskazują powodzenie:

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

    Aby sprawdzić, czy pizza została zaktualizowana, uruchom GET ponownie akcję, używając następującego polecenia:

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

    Poprzednie polecenie zwraca nowo zaktualizowaną pizzę:

    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. Nasz interfejs API może również usunąć nowo utworzoną pizzę DELETE za pomocą akcji, jeśli uruchomisz następujące polecenie:

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

    Poprzednie polecenie zwraca wynik powodzenia 204 No Content :

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

    Aby sprawdzić, czy pizza została usunięta, uruchom GET ponownie akcję, używając następującego polecenia:

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

    Poprzednie polecenie zwraca oryginalne pizze jako wyniki:

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

Teraz zakończono implementowanie i testowanie nowo utworzonego internetowego interfejsu API utworzonego przy użyciu platformy ASP.NET Core.

Opcjonalnie: Testowanie gotowego internetowego interfejsu API przy użyciu wiersza polecenia HTTPREPL

  1. Otwórz ponownie istniejący httprepl terminal lub otwórz nowy zintegrowany terminal z programu Visual Studio Code, wybierając pozycję Terminal>Nowy terminal z menu głównego.

  2. Jeśli otwarto nowy terminal, połącz się z internetowym interfejsem API, uruchamiając następujące polecenie:

    httprepl https://localhost:{PORT}
    

    Alternatywnie uruchom następujące polecenie w dowolnym momencie, gdy HttpRepl jest uruchomione:

    connect https://localhost:{PORT}
    
  3. Przejdź do punktu końcowego Pizza , uruchamiając następujące polecenie:

    cd Pizza
    
  4. Uruchom następujące polecenie, aby wyświetlić nowe akcje w interfejsie API pizzy:

    ls
    

    Poprzednie polecenie przedstawia dane wyjściowe dostępnych interfejsów API dla punktu końcowego Pizza :

        https://localhost:{PORT}/Pizza> ls
        .      [GET|POST]
        ..     []
        {id}   [GET|PUT|DELETE]
    
  5. POST Utwórz żądanie dodania nowej pizzy przy HttpRepl użyciu następującego polecenia:

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

    Poprzednie polecenie zwraca nowo utworzoną pizzę:

    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. Zaktualizuj nową Hawaii pizzę Hawaiian do pizzy za PUT pomocą żądania, używając następującego polecenia:

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

    Powyższe polecenie zwraca następujące dane wyjściowe, które wskazują powodzenie:

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

    Aby sprawdzić, czy pizza została zaktualizowana, uruchom GET ponownie akcję, używając następującego polecenia:

    get 3
    

    Poprzednie polecenie zwraca nowo zaktualizowaną pizzę:

    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. Nasz interfejs API może również usunąć nowo utworzoną pizzę DELETE za pomocą akcji, jeśli uruchomisz następujące polecenie:

    delete 3
    

    Poprzednie polecenie zwraca wynik powodzenia 204 No Content :

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

    Aby sprawdzić, czy pizza została usunięta, uruchom GET ponownie akcję, używając następującego polecenia:

    get
    

    Poprzednie polecenie zwraca oryginalne pizze jako wyniki:

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

Teraz zakończono implementowanie i testowanie nowo utworzonego internetowego interfejsu API utworzonego przy użyciu platformy ASP.NET Core.