Übung: Testen von Web-API-Aktionen

Da die CRUD-Aktionen der Web-API hinzugefügt wurden, ist es an der Zeit, diese zu testen.

  1. Senden Sie eine ungültige HTTP-POST-Anforderung an die Web-API:

    curl -i -k \
        -H "Content-Type: application/json" \
        -d "{\"name\":\"Plush Squirrel\",\"price\":0.00}" \
        https://localhost:5001/products
    

    Für den obigen Befehl gilt Folgendes:

    • -i zeigt die HTTP-Antwortheader an.
    • -d impliziert einen HTTP-POST-Vorgang und definiert den Anforderungstext.
    • -H gibt an, dass der Anforderungstext das JSON-Format aufweist. Der Headerwert überschreibt den Standardinhaltstyp von application/x-www-form-urlencoded.

    Der Befehl gibt den HTTP-Statuscode „400“ zurück, da das [ApiController]-Attribut des Controllers die Modellvalidierung für den Anforderungstext auslöst. Die MVC-Modellbindung versucht, die -d-JSON der Anforderung in ein Product-Objekt zu konvertieren. Die Modellvalidierung schlägt fehl, weil der Price-Wert der Anforderung unter dem Mindestwert von 0,01 liegt.

    Der folgende Text stellt die Antwort dar:

    HTTP/1.1 400 Bad Request
    Date: Mon, 18 May 2020 21:04:05 GMT
    Content-Type: application/problem+json; charset=utf-8
    Server: Kestrel
    Transfer-Encoding: chunked
    
    {
      "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
      "title": "One or more validation errors occurred.",
      "status": 400,
      "traceId": "|34d8eb25-4f589a8a1ec12a3f.",
      "errors": {
        "Price": [
          "The field Price must be between 0.01 and 7.922816251426434E+28."
        ]
      }
    }
    
  2. Senden Sie eine gültige HTTP-POST-Anforderung an die Web-API:

    curl -i -k \
        -H "Content-Type: application/json" \
        -d "{\"name\":\"Plush Squirrel\",\"price\":12.99}" \
        https://localhost:5001/products
    

    Der folgende Text stellt die Antwort dar:

    HTTP/1.1 201 Created
    Date: Mon, 18 May 2020 21:07:17 GMT
    Content-Type: application/json; charset=utf-8
    Server: Kestrel
    Transfer-Encoding: chunked
    Location: https://localhost:5001/products/3
    
    {"id":3,"name":"Plush Squirrel","price":12.99}
    

    Die erfolgreiche Erstellung des Produkts ergibt Folgendes:

    • Einen HTTP-Statuscode 201
    • Ein Location-Antwortheader mit einer URL zum Abrufen des neu erstellten Produkts
    • Eine JSON-Darstellung des neu erstellten Produkts
  3. Senden Sie eine HTTP-GET-Anforderung an die Web-API:

    curl -k -s https://localhost:5001/products/3 | jq
    

    Die folgende Ausgabe wird angezeigt, um anzugeben, dass das neue Produkt in der In-Memory Database gespeichert wurde:

    {
      "id": 3,
      "name": "Plush Squirrel",
      "price": 12.99
    }
    
  4. Senden Sie eine HTTP-PUT-Anforderung an die Web-API:

    curl -i -k \
        -X PUT \
        -H "Content-Type: application/json" \
        -d "{\"id\":2,\"name\":\"Knotted Rope\",\"price\":14.99}" \
        https://localhost:5001/products/2
    

    Der obige Code ändert den Preis von 12,99 in 14,99. Der Händler möchte den Preis für das Produkt „Knotted Rope“ (Knotentau) erhöhen.

    Der folgende Text stellt die Antwort dar:

    HTTP/1.1 204 No Content
    Date: Mon, 18 May 2020 21:08:48 GMT
    Server: Kestrel
    
  5. Senden Sie eine HTTP-DELETE-Anforderung an die Web-API:

    curl -i -k -X DELETE https://localhost:5001/products/1
    

    Mit dem obigen Befehl wird das Produkt aus der In-Memory Database gelöscht. Der Lieferant des Produkts „Squeaky Bone“ (Quietschender Knochen) hat Insolvenz angemeldet. Das Produkt kann nicht mehr bestellt werden, und dem Händler ist der Produktbestand ausgegangen.

    Der folgende Text stellt die Antwort dar:

    HTTP/1.1 204 No Content
    Date: Mon, 18 May 2020 21:09:29 GMT
    Server: Kestrel
    
  6. Senden Sie eine HTTP-GET-Anforderung an die Web-API:

    curl -k -s https://localhost:5001/products | jq
    

    Der aktualisierte Bestand wird angezeigt:

    [
      {
        "id": 2,
        "name": "Knotted Rope",
        "price": 14.99
      },
      {
        "id": 3,
        "name": "Plush Squirrel",
        "price": 12.99
      }
    ]