やりたいこと
APIから返ってきたレスポンスの内容を他のリクエストのヘッダなどで使用したい。 例えば、レスポンス内に含まれるアクセストークンを他のリクエストのヘッダに設定したいなんてことをしたい。
試した環境
- IntelliJ IDEA 2018.3.4(UE)
サーバ側のコード
サーバ側の実装です。
fun Application.module(testing: Boolean = false) { install(ContentNegotiation) { jackson { enable(SerializationFeature.INDENT_OUTPUT) } } routing { get("/") { call.response.header("X-HOGE", "fuga") call.respond(mapOf("hello" to "world")) } post("/") { val hoge = call.receive<Hoge>() println("hoge = ${hoge}") } } } data class Hoge(val hello: String, val hoge: String)
HTTP Clientを使ってレスポンスの内容を他のリクエストで使ってみる
ドキュメント(Response Handling Examples - Help | IntelliJ IDEA)を参考に、 .http
ファイルを作ってみます。
- GETを呼び出した後のレスポンスの内容を
client.global.set
を使って設定することで次のリクエスでその値を使えるようになります - レスポンスヘッダを使いたい場合には、
response.headers.valuesOf
を使ってヘッダの値を取得します - ボディのjsonの値を使いたい場合には、
response.body
を使って取得します client.global.set
を使って設定した値は、{{変数名}}
で参照できます
GET http://localhost:8080 > {% client.global.set("hoge", response.headers.valuesOf("X-HOGE")[0]); client.global.set("hello", response.body.hello); %} ### POST http://localhost:8080 Content-Type: application/json { "hello": "{{hello}}", "hoge": "{{hoge}}" }
実行結果
POST処理のjsonには、最初のGETで取得した値が設定されていますね。
hoge = Hoge(hello=world, hoge=fuga)