HTTP ์ฌ์์ 2014๋ ์ ๋ณ๊ฒฝ๋์์ผ๋ฉฐ ์ญ์ ์ ๋ณธ๋ฌธ์ ํฌํจํ ์ ์์ต๋๋ค. ์ญ์ ๋ฉ์๋๊ฐ ์๋ ๋ณธ๋ฌธ์ ํ์ฉํ๊ณ ์ญ์ ํ์ง ์๋๋ก ํ๊ธฐ ์ํด connection.rb์์ ์์์ ๋ฉ์๋๋ฅผ ํด๊ฒฐํ ๊ณํ์ด ์์ต๋๊น?
๊ทํ์ ๊ฒํ ๋ฅผ ์ํด PR์ด ๊ณง ์ฌ๋ผ์ฌ ๊ฒ์ ๋๋ค.
์๋ ํ์ธ์ @Carlbc18 ์ ๋๋ค .
์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํด ์ฃผ์๊ฒ ์ต๋๊น?
HTTP 2.0 ์ฌ์์๋ง ํด๋น๋๋ ๊ฒ์ด๋ฏ๋ก ์ด ๊ธฐ๋ฅ์ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํ ์๋ ์์ต๋๋ค.
https://tools.ietf.org/html/rfc7231#section -4.3.5
์ฐธ๊ณ : ์ด ๋์ผํ ํ ์คํธ ๋ธ๋ก์ GET && HEAD ์์ฒญ์๋ ์ ์ฉ๋ฉ๋๋ค.
ํนํ ์ฌ์์ ์ด ๋ถ๋ถ:
DELETE ์์ฒญ ๋ฉ์์ง ๋ด์ ํ์ด๋ก๋์๋ ์ ์๋ ์๋ฏธ๊ฐ ์์ต๋๋ค.
DELETE ์์ฒญ์ ํ์ด๋ก๋ ๋ณธ๋ฌธ์ ๋ณด๋ด๋ฉด ๊ธฐ์กด
์์ฒญ์ ๊ฑฐ๋ถํ๋ ๊ตฌํ.
์๋ํ๋ ํ ์คํธ๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค(์ํ๋์ง ํ์คํ์ง ์์). ์ด ํ๋ก์ ํธ์ ๋ํ ํ๋ณด๋ฅผ ์ด๋ป๊ฒ ์์ฑํฉ๋๊น?
HTTP 2.0 ์ฌ์์๋ง ํด๋น๋๋ ๊ฒ์ด๋ฏ๋ก ์ด ๊ธฐ๋ฅ์ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํ ์๋ ์์ต๋๋ค.
์ด๊ฒ์ ์ค์ ๋ก HTTP 1.1์ ์ผ๋ถ์ ๋๋ค.
PR์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๊ผญ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.
๋ค๋ฅธ ์ ์ฅ์์ ๋ง์ฐฌ๊ฐ์ง๋ก faraday
ํฌํฌํ๊ณ ํฌํฌ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ๋ค์ ๋ง์คํฐ ๋ธ๋์น์ ๋ํ PR์ ์์ฑํ ์ ์์ต๋๋ค.
@iMacTia ๊ฐ์ฌํฉ๋๋ค. ๋ด๊ฐ ์ฌ๋ ค์ค๊ฒ. ๋ฒ์ ๋ณ๊ฒฝ์ ๋ํ ๊ทํ์ ๊ฒฌํด๋ ๋ง์นจ๋ด ์ด๊ฒ์ผ๋ก ์ฃผ์ ๋ฒ์ ๋ฒํธ๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๊น? ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ง์ ์ฌ๋๋ค์๊ฒ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ์ ๋ semver ํจํด์ ๋ฐ๋ฅด๊ณ ์ถ์ต๋๋ค. ์ด ์์ ์์ ํจ๋ฌ๋ฐ์ด ๋ฒ์ ์ 1.0.0์ด ๋ฉ๋๋ค. ๋ค ์๊ฐ์ ๋งํด๋ด.
์ฐ๋ฆฌ๋ ํ์คํ semver๋ฅผ ๊ณ ์ํ๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ผ๋ฉฐ ๋ช ๊ฐ์ง ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ v1.0์ ์์ฝํ์ต๋๋ค.
์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ์ค๋จ๋ ๊ฒฝ์ฐ ๋ฒ์ 1.0(ํ์ฌ ๊ณ ์ ๋ ๋ฆด๋ฆฌ์ค ๋ ์ง๊ฐ ์์)์์๋ง ๋ฆด๋ฆฌ์ค๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ด ์ดํด๋ ์ด์ ์ ํ์ ์ผ๋ก GET, HEAD ๋ฐ DELETE ์์ฒญ์ ๋ณธ๋ฌธ์ ์ถ๊ฐํ ์ ์์ด์ผ ํ๋ฏ๋ก ์ด์ ๋ฒ์ ๊ณผ ํธํ๋์ด์๋ ์ ๋๋ค๋ ๊ฒ์
๋๋ค. ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
@iMacTia i ๋ฒ์ ์ด 0.13.0์ด๊ณ PR์ด ์ฌ๋ผ์์ต๋๋ค. ์๊ฒฌ์ด ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํ๋ฏ๋ก ์ด์ ๋ํ ๋ค๋ฅธ ๋ํ๋ฅผ PR์ ์ ๋ฌํ ์ ์์ต๋๋ค. ๋ค์ ํ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
์ด๊ฒ์ ๋ด https://github.com/lostisland/faraday/pull/695#issuecomment -305145499์ ๋ํ ํ์ ์กฐ์น์
๋๋ค.
์ฐ์ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๊ธฐ๋ฅผ ์ํ๋์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ด ์ด์ ๋ฒ์ ๊ณผ ํธํ๋์ด์ผ ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์๋๋ ์ฌ์ ํ ์๋ํฉ๋๋ค.
conn = Faraday.new(...)
conn.get('/path', {page: 1, per: 10})
# performs "GET /path?page=1&per=10"
๋ด ์๊ฒฌ์ ๋ช ์๋ ์ต์ 1์ ์ด ๋์์ ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค.
conn = Faraday.new(..., standard: :http1_1)
conn.get('/path', {page: 1, per: 10})
# performs "GET /path" with body "page=1&per=10" (assuming www_form_url_encoded request)
๋์ ์ต์ 2๋ ๋ ๊ฐ๋ ฅํ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
conn = Faraday.new(...) # note no special config here
conn.get('/path', {page: 1, per: 10}, body: {some_key: 'some_value')
# performs "GET /path?page=1&per=10" with body "some_key=some_value"
ํ์ง๋ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ruby โโ1.9๋ ํค์๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ํ์ง ์์ผ๋ฏ๋ก ์ต์ 2๋ ruby โโ>= 2์์๋ง ์๋ํ ์ ์์ต๋๋ค. ๐
๋ฃจ๋น 1.9์์ ์๋ํ์ง ์๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. Ruby 1.9๋ ์ค๋๋์์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ํจ๋ฌ๋ฐ์ด์ v1.0 ๋ฆด๋ฆฌ์ค์ ์ธ๋ผ์ธ์ด ๋ ์ต์ ๋ฃจ๋น ๋ฒ์ ์ ์ํด ์ ์ด๋ 2.0์ผ๋ก ๋ฒ์ ์ ์ฌ๋ฆด ๊ฒ์ ์ง์งํฉ๋๋ค. ๋ํ ์ต์ 2๋ parms ๋ฐ/๋๋ ์ ํ์ ๋ณธ๋ฌธ์ ์ ๋ฌํ ์ ์๋ ์ต์ ์ด ์์ผ๋ฏ๋ก http 1.1 ์ฌ์์ ๋ ๋ฐ์ ํ๊ฒ ๋ฐ๋ฆ ๋๋ค.
Ruby 1.9์์ ์๋ํ๋ http ์ฌ์ ๊ธฐ๋ฅ๊ณผ ํ์ ํธํ์ฑ์ ์ ์งํ๋ ค๊ณ ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ V1 of Faraday์ ๋ ์ ํฉํ์ง ์์๊น ์๊ฐํฉ๋๋ค. ์ด ๋ณ๊ฒฝ ์ฌํญ(ruby v, params ์ ๋ฌ)์ ์ง์ํ๊ธฐ ์ํด ๋๋ฌด ๋ง์ ๋ณ์๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด๊ฐ ๊ณผํ ์๊ฐ์ ํ๊ณ ์๋ ๊ฑด ์๋๊น....
๋ฃจ๋น 1.9์์ ์๋ํ์ง ์๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. Ruby 1.9๋ ์ค๋๋์์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ํจ๋ฌ๋ฐ์ด์ v1.0 ๋ฆด๋ฆฌ์ค์ ์ธ๋ผ์ธ์ด ๋ ์ต์ ๋ฃจ๋น ๋ฒ์ ์ ์ํด ์ ์ด๋ 2.0์ผ๋ก ๋ฒ์ ์ ์ฌ๋ฆด ๊ฒ์ ์ง์งํฉ๋๋ค. ๋ํ ์ต์ 2๋ parms ๋ฐ/๋๋ ์ ํ์ ๋ณธ๋ฌธ์ ์ ๋ฌํ ์ ์๋ ์ต์ ์ด ์์ผ๋ฏ๋ก http 1.1 ์ฌ์์ ๋ ๋ฐ์ ํ๊ฒ ๋ฐ๋ฆ ๋๋ค.
์์ ๋ชจ๋ ๋ด์ฉ์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ฌ์ ํ v1.0์ ๊ธฐ๋ค๋ ค์ผ ํจ์ ์๋ฏธํ์ง๋ง ๊ทธ๊ฒ์ด ์ค์ ๋ก ์ต์ ์ ์กฐ์น์ ๋๋ค.
๋ฐ๋ผ์ v1.0 ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ API๋ฅผ ์ ์ํ๊ธฐ ์ํด ๋ค์์ ์๋ํ ์ ์์ต๋๋ค.
conn = Faraday.new(...) # note no special config here
conn.get(path, url_params, body: {...})
# second parameter is URL PARAMS, optionally accept a named parameter for request body
# works the same for head and delete
conn = Faraday.new(...) # note no special config here
conn.post(path, body, url_params: {...})
# second parameter is REQUEST BODY, optionally accept a named parameter for url_params
# works the same for put and patch
์ด๋ฐ ์์ผ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ๋ค๋ฃจ๊ณ post/put/patch ์์ฒญ๋ ํ์ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค!
ํ์คํ ๋์ํฉ๋๋ค. ๋ด PR์ ๊ฑฐ๋ถํ๊ณ ์ด๋ฅผ ์ํด ์ PR์ ์ด๊ฒ ์ต๋๊น? ์์ ํ ์ ์๋ V1 ๋ถ๊ธฐ ์ปท์ด ์์ต๋๊น?
๊ทธ๊ฒ์ ๋ซ๊ณ ์์ ํ ๋ค๋ฅผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ์์ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ๊ทธ ์ฃ์กํฉ๋๋ค!
๋ณํฉํ๊ธฐ ์ ์ V1 ๋ธ๋์น๋ฅผ ์์ฑํ ๊ฒ์ด๋ฏ๋ก ๋ง์คํฐ์์ ์์ ๋กญ๊ฒ ์์ํ๋ฉด PR์ ๋ฆฌ๋๋ ์ ํ ๊ฒ์ ๋๋ค. :)
์๋
ํ์ธ์ @Carlbc18 ๋์ด ์ด์ 1.0
์ง์ ์ ์ฌ์ฉํ ์ ์์์ ์๋ ค๋๋ฆฌ๊ณ ์ ํฉ๋๋ค ๐.
๊ณ ๋ง์, ๊ณ ๋ง์! ๐
์์ง ์ด๊ฒ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ฌ๋์ ์ํด ์ ๊ฒฝ์ฐ์ ํจ๊ณผ๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ ๋ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค.
conn = Faraday.new
body = {
some_key: 'some value'
}
conn.run_request(:delete, url, body, headers)
์ญ์ ๊ฐ ๋ ์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณธ๋ฌธ์ nilsํ์ง ์์ ๋๊น์ง ์ด๊ฒ์ด ๋๊ตฐ๊ฐ๋ฅผ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ธ์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์์ง PR์ ๋ณธ ์ ์ ์์ง๋ง v1์ ๋ํ ์์
์ด ์ฒ์ฒํ ์งํ๋๊ณ ์์ต๋๋ค.
์ง์ ์์
ํ ์๋ ์์ง๋ง ํ์ฌ๋ก์๋ ๊ฒฌ์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
์์ฒญ์ด ์ด๋ป๊ฒ ์๋ํด์ผ ํ๋์ง์ ๋ํ ์
๋ฐ์ดํธ๋ API๋ ์์ ๋ด ์๊ฒฌ์ ์ค๋ช
๋์ด ์์ผ๋ฏ๋ก ๋๊ตฌ๋ ์ง ๋๋ณด๋ค ๋จผ์ ์๋ํ๊ณ ์ถ๋ค๋ฉด PR์ ํ์ํฉ๋๋ค.
์ด์ ๋ฒ์ ๊ณผ ์์ ํ ํธํ๋๋ ์๋ฃจ์
์ ๊ฒฝ์ฐ PR์ ๋ง์คํฐ์์ ๋ถ๊ธฐํ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ 0.x ๋ฆด๋ฆฌ์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ์ค๋จ๋ ๊ฒฝ์ฐ 1.0
๋ถ๊ธฐ์์ ๋ถ๊ธฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
https://github.com/lostisland/faraday/pull/855 ๋ ์ด๋ฅผ ์ง์ํ๊ธฐ ์ํ PR ์ด์์ ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๊ฑฐ๋ถํฉ๋๋ค. ํจ๋ฌ๋ฐ์ด์์ ๋ธ๋ก ํ์์ ์ฌ์ฉํ์ฌ ๋ณธ๋ฌธ์ผ๋ก ์์ฒญํ ์ ์์ต๋๋ค.
conn.delete(url) do |req|
req.body = { some_key: 'some value' }
end
์ด ์์ด๋์ด๋ ๋ณธ์ฒด๋ฅผ ๋จ์ผ ๋ผ์ด๋๋ก ๊ฐ๋จํ ์ญ์ ํ์ง๋ง ๊ตฌํ์ ๋ด๊ฐ ์ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ณต์กํ๊ณ ๋๋ผ์ด ๋์์ ์ถ๊ฐํฉ๋๋ค. ์ด ๋ธ๋ก ํ์์ ์ด๋ฏธ ํจ๋ฌ๋ฐ์ด์์ ์ ์๋ํฉ๋๋ค. ๋ฉ์๋์ ๋ ๋ง์ ์ธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค ํด๋์ค์ ์์ฑ์ ์์ ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
conn.delete('/foo/1') do |req|
req.headers["X-Men"] = "marvel"
req.params[:confirm] = 1
req.body = { some_key: 'some value' }
end
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์์ง ์ด๊ฒ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ฌ๋์ ์ํด ์ ๊ฒฝ์ฐ์ ํจ๊ณผ๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ ๋ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค.
์ญ์ ๊ฐ ๋ ์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณธ๋ฌธ์ nilsํ์ง ์์ ๋๊น์ง ์ด๊ฒ์ด ๋๊ตฐ๊ฐ๋ฅผ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.