演習 - Web API のアクションをテストする

これで CRUD アクションが Web API に追加されたので、今度はそれらをテストします。

  1. Web API に無効な HTTP POST 要求を送信します。

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

    上記のコマンドでは次のことが行われます。

    • -i は、HTTP 応答ヘッダーを表示します。
    • -d は、HTTP POST 操作を意味し、要求本文を定義します。
    • -H は、要求本文が JSON 形式であることを示します。 ヘッダーの値で、既定のコンテンツ タイプ application/x-www-form-urlencoded がオーバーライドされます。

    コントローラーの [ApiController] 属性によって要求本文で Model の検証がトリガーされるので、コマンドからは HTTP 400 の状態コードが返されます。 MVC の Model バインダーでは、要求の -d JSON から Product オブジェクトへの変換が試みられます。 要求の Price の値が最小値 0.01 より小さいため、Model の検証は失敗します。

    次のテキストは応答を示すものです。

    HTTP/1.1 400 Bad Request
    Date: Mon, 08 Apr 2019 20:29:38 GMT
    Content-Type: application/problem+json; charset=utf-8
    Server: Kestrel
    Transfer-Encoding: chunked
    
    {
      "errors": {
        "Price": ["The field Price must be between 0.01 and 7.92281625142643E+28."]
      },
      "title": "One or more validation errors occurred.",
      "status": 400,
      "traceId": "0HLLSC127L2DR:00000001"
    }
    
  2. Web API に有効な HTTP POST 要求を送信します。

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

    次のテキストは応答を示すものです。

    HTTP/1.1 201 Created
    Date: Mon, 08 Apr 2019 20:34:26 GMT
    Content-Type: application/json; charset=utf-8
    Server: Kestrel
    Transfer-Encoding: chunked
    Location: https://localhost:5001/api/Products/4
    
    {"id":4,"name":"Plush Squirrel","price":12.99}
    

    製品が正常に作成されると、次のものが生成されます。

    • HTTP 201 状態コード
    • 新しく作成された製品を取得するための URL を含む Location 応答ヘッダー
    • 新しく作成された製品の JSON 表現
  3. Web API に HTTP GET 要求を送信します。

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

    次の出力が表示されて、新しい製品がメモリ内データベースに保持されたことが証明されます。

    {
      "id": 3,
      "name": "Plush Squirrel",
      "price": 12.99
    }
    
  4. Web API に HTTP PUT 要求を送信します。

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

    上記のコマンドにより、価格が 12.99 から 14.99 に変更されます。 小売業者は、Knotted Rope 商品の価格を上げることにしました。

    次のテキストは応答を示すものです。

    HTTP/1.1 204 No Content
    Date: Mon, 08 Apr 2019 20:35:41 GMT
    Server: Kestrel
    
  5. Web API に HTTP DELETE 要求を送信します。

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

    上記のコマンドにより、メモリ内データベースから製品が削除されます。 Squeaky Bone 製品の仕入先が破産を申し立てました。 その製品はもう注文できなくなり、小売業者に在庫は残っていません。

    次のテキストは応答を示すものです。

    HTTP/1.1 204 No Content
    Date: Mon, 08 Apr 2019 20:37:09 GMT
    Server: Kestrel
    
  6. Web API に HTTP GET 要求を送信します。

    curl -k -s https://localhost:5001/api/Products | jq
    

    更新された在庫が表示されます。

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