1.概要
このチュートリアルでは、 curl. を使用したREST APIのテストの概要について説明します。
-
curl は、データ転送用のコマンドラインツールで、HTTPを含む約22のプロトコルをサポートしています。
2.コマンドラインオプション
-
curlは200以上のコマンドラインオプションをサポートしています** 。そして、コマンド内のURLにそれらを0個以上含めることができます。
しかしそれを私たちの目的のために使う前に、私たちの生活を楽にするであろう二つを見てみましょう。
2.1. 冗長
テストするときは、冗長モードをオンに設定することをお勧めします。
curl -v http://www.example.com/----
その結果、これらのコマンドは解決されたIPアドレス、接続しようとしているポート、ヘッダなどの有用な情報を提供します。
==== 2.2. 出力
デフォルトでは、curlはレスポンスボディを標準出力に出力します。
オプションで、ファイルに保存するための出力オプションを提供できます。
[source,text,gutter:,true]
curl -o out.json http://www.example.com/index.html
応答サイズが大きい場合、これは特に役立ちます。 === 3. curlを使ったHTTPメソッド すべてのHTTPリクエストにはメソッドが含まれています。最も一般的に使用されるメソッドはGET、POST、PUT、そしてDELETEです。 ==== 3.1. 取得する これは、curlを使ってHTTP呼び出しを行うときのデフォルトの方法です。実際、前述の例は単純なGET呼び出しでした。 ポート8082でサービスのローカルインスタンスを実行している間に、次のようなコマンドを使用してGET呼び出しを行います。 [source,text,gutter:,true]
そして冗長モードが有効になっているので、レスポンスボディと共にもう少し情報が得られます。 [source,text,gutter:,true]
-
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. 役職 このメソッドを使用してデータを受信側サービスに送信します。そしてそのために、データオプションを使用します。 これを行う最も簡単な方法は、コマンドにデータを埋め込むことです。 [source,text,gutter:,true]
curl -d 'id=9&name=baeldung' http://localhost:8082/spring-rest/foos/new
または、リクエストボディを含むファイルを次のようにデータオプションに渡します。 [source,text,gutter:,true]
curl -d @request.json -H "Content-Type: application/json" http://localhost:8082/spring-rest/foos/new
上記のコマンドをそのまま使用すると、次のようなエラーメッセージが表示されることがあります。 [source,text,gutter:,true]
{ "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リクエストに次のデフォルトヘッダーを追加するためです。 [source,text,gutter:,true]
Content-Type: application/x-www-form-urlencoded
これはまたブラウザが普通のPOSTで使うものです。私たちの用法では、私たちは通常私たちのニーズに応じてヘッダをカスタマイズしたいと思います。 例えば、私たちのサービスがjson content-typeを期待しているなら、オリジナルのPOSTリクエストを修正するために-Hオプションを使うことができます。 [source,text,gutter:,true]
curl -d '{"id":9,"name":"baeldung"}' -H 'Content-Type: application/json' http://localhost:8082/spring-rest/foos/new
Windowsのコマンドプロンプトでは、Unix風のシェルのような単一引用符はサポートされていません。 その結果、私たちは一重引用符を二重引用符で置き換える必要があります。必要に応じてそれらをエスケープする: [source,text,gutter:,true]
curl -d "{\"id\":9,\"name\":\"baeldung\"}" -H "Content-Type: application/json" http://localhost:8082/spring-rest/foos/new
その上、やや大量のデータを送信したい場合は、通常データファイルを使用することをお勧めします。 ==== 3.3. プット この方法はPOSTとよく似ています。しかし、既存のリソースの新しいバージョンを送りたいときにそれを使います。これを行うには、-Xオプションを使用します。 リクエストメソッドのタイプについては何も言及していませんが、curlはデフォルトでGETを使用します。したがって、PUTの場合のメソッドタイプを明示的に説明します。 [source,text,gutter:,true]
curl -d @request.json -H 'Content-Type: application/json' -X PUT http://localhost:8082/spring-rest/foos/9
==== 3.4. DELETE 繰り返しますが、-Xオプションを使用してDELETEを使用することを指定します。 [source,text,gutter:,true]
curl -X DELETE http://localhost:8082/spring-rest/foos/9
=== 4.カスタムヘッダ デフォルトのヘッダを置き換えるか、独自のヘッダを追加することができます。 たとえば、Hostヘッダーを変更するには、次のようにします。 [source,text,gutter:,true]
curl -H "Host: com.baeldung" http://example.com/----
User-Agentヘッダをオフにするには、空の値を入れます。
curl -H "User-Agent:" http://example.com/----
テスト中の最も一般的なシナリオは、Content-TypeとAcceptヘッダーの変更です。各ヘッダーの前に-Hオプションを付けるだけです。
[source,text,gutter:,true]
curl -d @request.json -H "Content-Type: application/json" -H "Accept: application/json" http://localhost:8082/spring-rest/foos/new
=== 5.認証 https://www.baeldung.com/spring-security-basic-authentication[認証が必要なサービス]は、401 - Unauthorized HTTPレスポンスコードと、それに関連するWWW-Authenticateヘッダを送り返します。 基本認証では、ユーザーオプションを使用して、** 要求内にユーザー名とパスワードの組み合わせを** 埋め込むことができます。 [source,text,gutter:,true]
curl --user baeldung:secretPassword http://example.com/----
ただし、https://www.baeldung.com/rest-api-spring-oauth2-angularjs[認証にOAuth2を使用する]場合は、最初に認証サービスから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.まとめ
私たちはRESTサービスをテストするためにcurlの最低限の機能を使うことを検討しました。ここで説明したことよりもはるかに多くのことができますが、私たちの目的のためには、これで十分です。
利用可能なすべてのオプションをチェックアウトするには、コマンドラインでcurl -hと入力してください。デモンストレーションに使用されたRESTサービスはhttps://github.com/eugenp/tutorials/tree/master/spring-rest-simple[ここGitHubで利用可能]です。