์๋ .
์์ฒญ ๋ฐ ์๋ต ๋ณธ๋ฌธ์ ๋ชจ๋ 0.9.2๋ก ์ธ์ํ๋ ค๊ณ ํฉ๋๋ค.
์ด๊ฒ์ ๋ฌธ์ํ๋์ง ์์์ง๋ง #277 PR์์ ๋
ผ์๋์์ต๋๋ค.
์ค์ ์ ์ ๋๋ก ํ ๊ฒ ๊ฐ์์. ์ฌ์ค๋ฆฐ ๊ฒฝ์ ํจ๋ฌ๋ฐ์ด ์ฌ์ฉ์ค์
๋๋ค..
<strong i="9">@client</strong> = Saorin::Client.new(:url => @endpoint) do |connection|
connection.response :logger, <strong i="10">@logger</strong>, :bodies => true
end
๋ด ๋์๋ ๋๋ฒ๊ทธ ์ถ๋ ฅ์ด ์์ฒญ ๋ณธ๋ฌธ ์ ์ธ์ํ์ง ์์ง๋ง ์๋ต ๋ณธ๋ฌธ์ ์ธ์ํฉ๋๋ค(์์๋์ง ์์).
(์์๋๋ก ์๋ต ๋ณธ๋ฌธ์ ๋ค์ ์ธ์ํฉ๋๋ค).
๊ทธ๋์ ๋๋ ๋ก๊ทธ์์ ๋ค์๊ณผ ๊ฐ์ด response
๋ฅผ ์ป์ต๋๋ค request
post https://foo.bar.com/api/3.0/json-rpc
request User-Agent: "Faraday v0.9.2"
Content-Type: "application/json"
request {"result":{"accessGranted":false},"id":"foo","jsonrpc":"2.0"}
Status 200
response server: "nginx"
date: "Thu, 14 Jul 2016 21:28:21 GMT"
content-type: "application/json"
transfer-encoding: "chunked"
connection: "close"
response {"result":{"accessGranted":false},"id":"foo","jsonrpc":"2.0"}
๋ค์ faraday/response/logger.rb
์ฝ๋๋ฅผ ํ์ธํ์ญ์์ค.
def call(env)
info "#{env.method} #{env.url.to_s}"
debug('request') { dump_headers env.request_headers }
debug('request') { dump_body(env[:body]) } if env[:body] && log_body?(:request)
super
end
def on_complete(env)
info('Status') { env.status.to_s }
debug('response') { dump_headers env.response_headers }
debug('response') { dump_body env[:body] } if env[:body] && log_body?(:response)
end
์ฌ๋ฐ๋ฅด๊ฒ ์ฝ์ผ๋ฉด line: debug('request') { dump_body(env[:body]...
๊ฐ ์ ์ ํ var๋ฅผ ์ธ์ํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก env[]
๋ฅผ ๊ฒ์ฌํ๋ฉด ์์ฒญ ๋ณธ๋ฌธ์ ์ฐพ์ ์ ์์ต๋๋ค request_headers
, request_options
๋ฐ response
๋ฐ์ดํฐ๋ง ์์ต๋๋ค.
์๋ฌด๋ ๊ทธ๊ฒ์ ์ ์ ๋์น์ฑ์ง ๋ชปํ๋ค๊ณ ๋ฏฟ๊ธฐ ๋๋ฌธ์ ์๋ง๋ ๋ด๊ฐ ์ค์๋ฅผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ์ด๋?
@nthx ๋๋ ์ด๊ฑฐ๋ณด๊ณ ..
@stve - ๋ณด๊ณ ์๊ฐ ์๋ฏธ๊ฐ ์์ต๋๊น?
์์ฒญ ๊ตฌ์ฑ๋ ํ์ํฉ๋๊น? ํด๋ณด์ง ์์์ง๋ง..
<strong i="6">@client</strong> = Saorin::Client.new(:url => @endpoint) do |connection|
connection.response :logger, <strong i="7">@logger</strong>, :bodies => true
connection.request :logger, <strong i="8">@logger</strong>, :bodies => true
end
์ผ๋ฐ์ ์ธ ๊ฒฝ์ ์กฐ๊ฑด์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ์ ์ผ์ด๋๋ ์ผ์ env[:body]
๊ฐ ํ ๋ฒ ์์ฒญ์ ๋ณธ๋ฌธ์ผ๋ก ์ค์ ๋์๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ log ๋ฉ์๋ ๋๋ dump_body๊ฐ ์คํ๋ ๋๊น์ง ์๋ต ๋ณธ๋ฌธ์ env[:body]
๋ด๋ถ์ ์์ฒญ ๋ณธ๋ฌธ์ ๋์ฒดํ๊ณ ์๋ ์์ฒญ ๋ณธ๋ฌธ์ ๋ํด ๋ ์ด์ ๋ณ์/๋ณต์ฌ๋ณธ์ด ๋ง๋ค์ด์ง์ง ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋์ ๋ฌธ์ ๋ฅผ ์์ ํ๋ ๊ฒ์ ์๋๋๋ค. env
๋ ์์ฒญ์ ๋ํด ์ ์ญ์ ์ด๋ฏ๋ก ํธ์ถ์ด ์ด๋ฃจ์ด์ง๊ธฐ ์ ์ ๋ฏธ๋ค์จ์ด๊ฐ ๋๊ธฐ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์์๋๋ก ์คํ๋๋ค๊ณ ๊ฐ์ ํด์๋ ์ ๋ฉ๋๋ค.
์ฌ์ด ์์ ์ ๋ ๊ฐ์ env
๊ฐ์ ์ฌ์ฉํ์ฌ ๋ณธ๋ฌธ์ ์ถ์ ํ๊ณ ํ๋๋ ์์ฒญ์, ๋ค๋ฅธ ํ๋๋ ์๋ต์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
ํค๋์๋ request_headers
๋ฐ response_headers
๋ผ๋ ๋ ๊ฐ์ ๊ฐ๋ณ ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ๊ทธ๋ค์ ๋ฆฌ๋๋ฅผ ๋ฐ๋ฅด์ง ์๋ ์ด์ ๋ ...
๋๋ request_body
๋ผ๋ ๋ ๋ฒ์งธ env
๊ฐ์ ๋ง๋ค๊ณ env.request_body
๋ฐ env.body
๋ ๋ค์ ์์ฒญ ๋ณธ๋ฌธ์ ๋ ๋ฒ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๊ธฐ์กด ๋์์ ์์กดํ๋ ๋ชจ๋ ์ฝ๋๊ฐ ์ด๋ฅผ ์ ์งํ์ง๋ง ์ฌ๊ธฐ์ ์๋ ๋ก๊น
๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์
๋ฐ์ดํธ๋ ์ฝ๋๋ ์กด์ฌํ๋ ๊ฒฝ์ฐ request_body
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ์ ์คํธ๋ฆผ์์ ๊ณง ์์ ๋์ง ์์ผ๋ฉด ํจ๋ฌ๋ฐ์ด๋ฅผ ํจ์นํ๊ณ ๋ด ํฌํฌ๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ํฝ๋๋ค. ์ ๋ขฐํ ์ ์๋ ๋ก๊น ์ ํ ์ ์์ต๋๋ค ...
@nthx , ๋์ณค๋ค๋ฉด ์ฃ์กํ์ง๋ง ์ด๋ค ๋ก๊ฑฐ๋ฅผ ์ฌ์ฉํ๊ณ ๊ณ์ ๊ฐ์?
์ฝ๋๋ ๊ด์ฐฎ์ ๋ณด์ด์ง๋ง ๋ด๊ฐ ๋ณผ ์ ์๋ ์ ์ผํ "๋ฌธ์ "๋ ๋ฉ์์ง๋ฅผ ํ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋ก์์ ์
๋๋ค. ์์ฒญ์ด ์ฒ๋ฆฌ๋ ํ์ ํ๊ฐ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋ ํ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
์ด๊ฒ์ด ํ์ค (๋๊ธฐ์) ๋ก๊ฑฐ๋ก ๊ฐ๋ฅํ์ง ํ์คํ์ง ์์ผ๋ฏ๋ก ์ฌ์ฉ์ค์ธ ๋ก๊ฑฐ๋ฅผ ์๊ณ ์ถ์ต๋๋ค. :)
์ฌ์ค, ๋๋ ์ด ๊ฒฝ์ฐ์ ๋ด ์์ ์ ๋ก๊ฑฐ๋ฅผ ์ฌ์ฉํด์๋ค. ๋ค๋ฅธ ๋ฉ์์ง์ ๋ํด์๋ ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์์ต๋๋ค.
ํ์ค ๋ก๊ฑฐ๋ก ํ์ธํ๊ณ ์ ๋ก๊ฑฐ๋ก ์ฌํ์ธํ์ฌ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
์๋
ํ์ธ์ @nthx , ํ
์คํธ์ ํ์ด์ด ์์ต๋๊น? ์๋ก์ด ์ฌ์ค์ ๋ฐ๊ฒฌํ์
จ๋์?
์ด ๋ฌธ์ ๋ฅผ ์ข
๋ฃํ๊ณ ๋ฌธ์ ๊ฐ Faraday ๋๋ ๋ก๊ฑฐ์ ์๋์ง ์ดํดํ๊ณ ์ถ์ต๋๋ค.
๋๋ ํ์ค์ ํ ์คํธํ๊ณ ๋์๊ฒ ์ ์๋ํ๋ ๋ก๊ฑฐ์ ๊ฒฐํจ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ ์ด๊ฒ์ ๋ซ์ ๊ฒ์ ๋๋ค.
@nthx ๊ฐ๋ฅํ ์์ธ์ผ๋ก ํจ๋ฌ๋ฐ์ด๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ก์ด ์ฆ๊ฑฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ธ์ ๋ ์ง ๋ค์ ์ด ์ ์์ต๋๋ค.
๋น์์๋ Faraday ๋ด์ฅ Logger๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ํ ์ด ๋ฒ๊ทธ๊ฐ ์์์ง๋ง ๋ฏธ๋ค์จ์ด์ ์์ฒด ๋ก๊ฑฐ๋ฅผ ์์ฑํ๊ณ ๋์ค์ Faraday๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์์ ๋ ๊ฐ๋จํ ๊ฒ์ผ๋ก ์ ํํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
์๋ ํ์ธ์ @iMacTia , ์ ๋ ์ด ๋ฌธ์ ๋ก ๊ณจ๋จธ๋ฆฌ๋ฅผ ์์์ต๋๋ค. ๋ก๊ฑฐ ์ ์ ์ด๋ํฐ๋ฅผ ์ ์ํ ๋ ๋ฌธ์ ๊ฐ ์ฌํ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ด ์ฝ๋ ๋ก๊ทธ ์์ฒญ ๋ณธ๋ฌธ:
Faraday.new(url: url) do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), bodies: true
faraday.adapter Faraday.default_adapter
end
์ด๊ฒ์ ๋ค์์ ์ํํ์ง ์์ต๋๋ค.
Faraday.new(url: url) do |faraday|
faraday.adapter Faraday.default_adapter
faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end
์๋ ํ์ธ์ @llxff ์ ๋๋ค .
์, ๋ฏธ๋ค์จ์ด ์์๊ฐ ์ค์ํ๊ณ ์ด๋ํฐ๊ฐ ํญ์ ๋งจ ์๋์ ์์ด์ผ ํ๋ฏ๋ก ์์๋ฉ๋๋ค.
์ด๋ํฐ๋ฅผ BEFORE์ ๋์ผ๋ฉด ๋ก๊ฑฐ ์ด๋ํฐ์ ๋๋ฌํ๊ธฐ ์ ์ ์์ฒญ์ด ์ํ๋์ด ์๋ต์ด ๋ ๋ฒ ๊ธฐ๋ก๋ฉ๋๋ค.
๋ํ, ์ ๋ ์ด์ ์ด์ ๋ํ @nthx ๋ฌธ์ ๋ฅผ ๋ค์ ์ฝ๊ณ ์์ผ๋ฉฐ ๋ฏธ๋ค์จ์ด ์คํ์ ์ด๋ํฐ๊ฐ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
<strong i="11">@client</strong> = Saorin::Client.new(:url => @endpoint) do |connection|
connection.response :logger, <strong i="12">@logger</strong>, :bodies => true
end
๋ํ Saorin
gem์์ ์ฝ๋๋ฅผ ํ์ธํ๋๋ฐ ๋์ผํ ์ ํํ ์ด์ ๋ก ์์ ํ ์๋ชป๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค: https://github.com/mashiro/saorin/blob/master/lib/saorin/client/faraday. rb#L16
๋ง์ด๋๋ค. ์์ง ๋ค์ ํ์ธํ ์๋ ์์ง๋ง ๋ค๋ฅธ ์๊ฐ์ด ์์ต๋๋ค. ์ด๊ธฐ ๋ณด๊ณ ์๋ฅผ ์ฝ์๋๋ฐ ๋ค์๊ณผ ๊ฐ์ด ๋์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ฌธ์ํ๋์ง ์์์ง๋ง #277 PR์์ ๋ ผ์๋์์ต๋๋ค.
์ค์ ๋ก ์๋ต ๋ก๊น
์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๊น?
๋ฌธ์๊ฐ ์์๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ์์ฌ์ ์ฌ์ง๊ฐ ์์์ ๊ฒ์
๋๋ค.
๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ์ํ ํฐ์ผ์ ๋ง๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น? ์๋๋ฉด ์ด๊ฒ์ ๋ค์ ์ด ์ ์์ต๋๊น?
๋ํ - Saorin ๋ ์๋ค์๊ฒ ๋๊ตฌ์๊ฒ ์ฐ๋ฝํด์ผํฉ๋๊น?
์๋
ํ์ธ์ @nthx ๋ ๋ง์์ด ๋ง์ต๋๋ค. ํ์ฌ ์ฐ๋ฆฌ ๋ฌธ์๊ฐ ์ถฉ๋ถํ ์์ธํ์ง ์์ต๋๋ค(์ฌ์ค, ์ฐ๋ฆฌ๋ Readme๋ฅผ "๋ฌธ์"๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค).
๊ทํ์ ํน์ ๊ฒฝ์ฐ์๋ ๋ก๊ฑฐ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ https://github.com/lostisland/faraday/blob/master/README.md#basic -use ์น์
์ ์ธ ๋ฒ์งธ ์๊ฐ ์์ง๋ง ์ถฉ๋ถํ์ง ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. .
์ฐ๋ฆฌ๋ ๊ฐ๊น์ด ์ฅ๋์ ์ด๋ฌํ ์ข
๋ฅ์ ๋ฌธ์ ๋ฅผ ์ํํ๋ ๋ฐ ๋์์ด ๋ ๊ฐ์ ๋ Wiki๋ฅผ ๊ฐ์ง ๊ณํ์
๋๋ค.
Saorin์ ๋ฐ๋ฅด๋ฉด ๋ฌธ์ ๋ฅผ ์ถ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ค๋ฅ๊ฐ ์๋ ์ฝ๋์ ๋ํ ์์ ๋ฅผ ์ ๊ณตํ๊ณ ๋ด ์๊ฒฌ์ ๋ณด๊ณ ํ๋ ํ์ด์ง์์ ๋ฌธ์ ๋ฅผ ์ฌ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋ ๋น์ ์ด ๊ทธ๋ค์ gem์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๊ณ ๊ทธ๋ค์ด ํ์ํ ์ ์๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ์์
์ ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
๊ฐ์ฌ ํด์
์๋ ,
๋ฐฉ๊ธ ์ด ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๋ด ์์ฒญ์ด ์ ๋๋ก ์๋ช ๋์ง ์์ ์ด์ ๋ฅผ ์ดํดํฉ๋๋ค.
์์ฒญํ๊ธฐ ์ ์ ์๋ช
์ ์ถ๊ฐํ๋ ๋ฏธ๋ค์จ์ด๋ฅผ ๋ง๋ค์์ต๋๋ค.
๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ด๋ํฐ๋ฅผ ์ ์ํ๋ฏ๋ก ์ธ์ฆ ํค๋๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ ์์ฒญ์ด ์ ์ก๋์์ต๋๋ค.
๋ถ์์ฉ์ ๋ฏธ๋ค์จ์ด๊ฐ env.body๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ ์์ฑํ๊ณ ์๋ต ๋ณธ๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋ช ์ ์์ฑํ๋ค๋ ๊ฒ์ ๋๋ค.
์ฐ๊ฒฐ ์๋จ์์ ์ด๋ํฐ๋ฅผ ์ ์ํ ๋ ๋ด ๋ก๊ทธ๋ ์๋ชป๋์๊ณ ๋ด ์๋ช ์คํฌ๋ฆฝํธ๋ ์๋ชป๋์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์น์ ํ๋!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์ @iMacTia , ์ ๋ ์ด ๋ฌธ์ ๋ก ๊ณจ๋จธ๋ฆฌ๋ฅผ ์์์ต๋๋ค. ๋ก๊ฑฐ ์ ์ ์ด๋ํฐ๋ฅผ ์ ์ํ ๋ ๋ฌธ์ ๊ฐ ์ฌํ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ด ์ฝ๋ ๋ก๊ทธ ์์ฒญ ๋ณธ๋ฌธ:
์ด๊ฒ์ ๋ค์์ ์ํํ์ง ์์ต๋๋ค.