curlを使ってREST APIをテストする

curlでREST APIをテストする

 

1. 概要

このチュートリアルでは、curl.を使用したRESTAPIのテストの概要を説明します。

curl is a command-line tool for transferring data and supports about 22 protocols including HTTP.この組み合わせにより、RESTサービスをテストするための非常に優れたアドホックツールになります。

参考文献:

Postmanコレクションを使用したWeb APIのテスト

REST APIをテストできるPostmanコレクションを作成する方法を学ぶ

REST保証ガイド

REST保証の基本-REST APIのテストと検証を簡素化するライブラリーを調べてください。

2. コマンドラインオプション

curl supports over 200 command-line options。 また、コマンドのURLに付随するゼロ個以上を含めることができます。

しかし、それを目的に使用する前に、私たちの生活を楽にする2つを見てみましょう。

2.1. 冗長

テスト中は、詳細モードをオンにすることをお勧めします。

curl -v http://www.example.com/

その結果、コマンドは、解決されたIPアドレス、接続しようとしているポート、ヘッダーなどの役立つ情報を提供します。

2.2. 出力

デフォルトでは、curlは応答本文を標準出力に出力します。 オプションで、ファイルに保存する出力オプションを提供できます。

curl -o out.json http://www.example.com/index.html

これは、応答サイズが大きい場合に特に役立ちます。

3. curlを使用したHTTPメソッド

すべてのHTTP要求にはメソッドが含まれます。 最も一般的に使用されるメソッドは、GET、POST、PUT、およびDELETEです。

3.1. GET

これは、curlを使用してHTTP呼び出しを行うときのデフォルトの方法です。 実際、前に示した例は単純なGET呼び出しでした。

ポート8082でサービスのローカルインスタンスを実行しているときに、次のコマンドのようなものを使用してGET呼び出しを行います。

curl -v http://localhost:8082/spring-rest/foos/9

また、詳細モードがオンになっているため、応答本文とともにもう少し情報を取得します。

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8082 (#0)
> GET /spring-rest/foos/9 HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/7.60.0
> Accept: */*
>
< HTTP/1.1 200
< X-Application-Context: application:8082
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 15 Jul 2018 11:55:26 GMT
<
{
  "id" : 9,
  "name" : "TuwJ"
}* Connection #0 to host localhost left intact

3.2. POST

このメソッドを使用して、受信サービスにデータを送信します。 そのために、データオプションを使用します。

これを行う最も簡単な方法は、コマンドにデータを埋め込むことです。

curl -d 'id=9&name=example' http://localhost:8082/spring-rest/foos/new

または、次のようにリクエストオプションを含むファイルをデータオプションに渡します。

curl -d @request.json -H "Content-Type: application/json"
  http://localhost:8082/spring-rest/foos/new

上記のコマンドをそのまま使用すると、次のようなエラーメッセージが表示される場合があります。

{
  "timestamp" : "15-07-2018 05:57",
  "status" : 415,
  "error" : "Unsupported Media Type",
  "exception" : "org.springframework.web.HttpMediaTypeNotSupportedException",
  "message" : "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported",
  "path" : "/spring-rest/foos/new"
}

これは、curlがすべてのPOST要求に次のデフォルトヘッダーを追加するためです。

Content-Type: application/x-www-form-urlencoded

これは、ブラウザがプレーンPOSTで使用するものでもあります。 私たちの使用法では、通常、ニーズに応じてヘッダーをカスタマイズします。

たとえば、サービスがjson content-typeを予期している場合、-Hオプションを使用して元のPOSTリクエストを変更できます。

curl -d '{"id":9,"name":"example"}' -H 'Content-Type: application/json'
  http://localhost:8082/spring-rest/foos/new

Windowsコマンドプロンプトは、Unixのようなシェルのような単一引用符をサポートしていません。

その結果、一重引用符を二重引用符に置き換える必要があります。必要に応じてそれらをエスケープする:

curl -d "{\"id\":9,\"name\":\"example\"}" -H "Content-Type: application/json"
  http://localhost:8082/spring-rest/foos/new

また、多少大量のデータを送信する場合は、通常、データファイルを使用することをお勧めします。

3.3. PUT

このメソッドはPOSTに非常に似ています。 ただし、既存のリソースの新しいバージョンを送信する場合に使用します。 これを行うには、-Xオプションを使用します。

要求メソッドのタイプについての言及がない場合、curlはデフォルトでGETを使用します。 したがって、PUTの場合、メソッドタイプを明示的に言及します。

curl -d @request.json -H 'Content-Type: application/json'
  -X PUT http://localhost:8082/spring-rest/foos/9

3.4. DELETE

繰り返しますが、-Xオプションを使用してDELETEを使用することを指定します。

curl -X DELETE http://localhost:8082/spring-rest/foos/9

4. カスタムヘッダー

デフォルトのヘッダーを置き換えるか、独自のヘッダーを追加できます。

たとえば、Hostヘッダーを変更するには、次のようにします。

curl -H "Host: com.example" http://example.com/

User-Agentヘッダーをオフにするには、空の値を入力します。

curl -H "User-Agent:" http://example.com/

テスト中の最も一般的なシナリオは、Content-TypeおよびAcceptヘッダーの変更です。 各ヘッダーの前に-Hオプションを付ける必要があります。

curl -d @request.json -H "Content-Type: application/json"
  -H "Accept: application/json" http://localhost:8082/spring-rest/foos/new

5. 認証

service that requires authenticationは、401 – UnauthorizedHTTP応答コードと関連するWWW-Authenticateヘッダーを送り返します。

基本認証の場合、simply embed the username and password combination inside our request using the user optionを実行できます。

curl --user example:secretPassword http://example.com/

ただし、use OAuth2 for authenticationにする場合は、最初に認証サービスからaccess_tokenを取得する必要があります。

サービス応答にはaccess_token:が含まれます

{
  "access_token": "b1094abc0-54a4-3eab-7213-877142c33fh3",
  "token_type": "bearer",
  "refresh_token": "253begef-868c-5d48-92e8-448c2ec4bd91",
  "expires_in": 31234
}

これで、Authorizationヘッダーでトークンを使用できます。

curl -H "Authorization: Bearer b1094abc0-54a4-3eab-7213-877142c33fh3" http://example.com/

6. 結論

curlの最低限の機能を使用してRESTサービスをテストすることを検討しました。 ここで説明したことよりもはるかに多くのことができますが、私たちの目的のためには、これで十分です。

コマンドラインでcurl -hと入力して、使用可能なすべてのオプションをチェックアウトしてください。 デモンストレーションに使用されるRESTサービスは利用可能なhere on GitHubです。