Ć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 możliwość dodawania pizzy za pośrednictwem internetowego interfejsu API, używając metody POST.

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

Poprzednia akcja:

  • 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 uniknąć bezpośredniego kodowania nazwy akcji. CreatedAtAction Używa nazwy akcji, aby wygenerować location nagłówek odpowiedzi HTTP z adresem URL nowo utworzonej pizzy, jak wyjaśniono w poprzedniej jednostce.

Modyfikowanie pizzy

Teraz umożliwmy aktualizację pizzy za pomocą interfejsu API przy użyciu metody PUT.

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

Poprzednia akcja:

  • Odpowiada tylko na czasownik HTTP PUT, co wskazuje atrybut [HttpPut].
  • Wymaga, aby wartość parametru id była uwzględniona w segmencie adresu URL po pizza/.
  • Zwraca IActionResult, ponieważ typ zwrotny ActionResult nie jest znany do momentu wykonania. Metody BadRequest, NotFound i NoContent zwracają odpowiednio typy BadRequestResult, NotFoundResult i NoContentResult.

Uwaga

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

Usuń pizzę

Na koniec włączmy usunięcie pizzy przez web API przy użyciu metody DELETE.

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

Poprzednia akcja:

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

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. Zrób żądanie dodania nowej pizzy do HttpRepl używając 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ą pizzę Hawaii na pizzę Hawaiian za pomocą żądania PUT, 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, ponownie uruchom akcję GET, 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ę za pomocą akcji DELETE, 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 endpointu Pizza uruchamiając następujące polecenie:

    cd Pizza
    
  4. Uruchom następujące polecenie, aby wyświetlić nowe operacje w API do obsługi 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. Złóż żądanie o dodanie nowej pizzy w HttpRepl używając 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ą pizzę Hawaii do pizzy Hawaiian za pomocą żądania PUT, 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, ponownie uruchom akcję GET 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ę za pomocą akcji DELETE, 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.