์ด ๋ฐฐ์ด์ ํฌํจ๋์ด์ผ ํ์ง ์์ต๋๊น?
https://github.com/lostisland/faraday/blob/master/lib/faraday/connection.rb#L137
์ ๊ฐ์ค๋ฝ๊ฒ๋ Connection์๋ ์ด๋ฏธ options
์ ๊ทผ์๊ฐ ์์ผ๋ฏ๋ก OPTIONS ์์ฒญ์ ๋ง๋ค๊ธฐ ์ํด ์ด๋ฅผ ์ฉ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. run_request(:options)
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์๋ง๋ ์์งํ ๊ฐ์ ์ด์ง๋ง ๋ค๋ฅธ ์ฌ์ฉ ํจํด์ ๊ฐ๋ ๊ฒ๋ณด๋ค :options
๋ฅผ :configuration
์ ๋ค์ ๋งคํํ๋ ๊ฒ์ด ๋ ์ฝ์ง ์์๊น์?
๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ HTTP๋ฅผ ์ง์ํ๋๋ก ์ค์ ๋ API๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ง ์์ต๋๋ค.
run_request
ํตํด ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋ ๋ฉ์๋์
๋๋ค.
IMHO, ์ด ๊ฒฐ์ ์ ์ฌ๊ณ ํด์ผ ํฉ๋๋ค. OPTIONS
๋ ์ ํจํ HTTP ๋ฉ์๋ ์ด๋ฆ์ด๊ณ run_request
๊ฐ ํญ์ ์ ํฉํ ๋์์ ์๋๋๋ค. ๊ณต๊ฐ API๋ฅผ ์ค๋จํ๋ ค๋ฉด ๋์ค์ ๊ฒฐ์ ์ ํํํ๋ ๊ฒ๋ณด๋ค 1.0์ ์ถ์ํ๊ธฐ ์ ์ ์ง๊ธ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
run_request
๊ฐ ํญ์ ์ ์ ํ ๋์์ด ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
Faraday๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถํ๋ ํ์ ์์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์์ ๊ฒฝ์ฐ
์ค์ ๋ก run_request
๋ณด๋ค get
, post
๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@mislav #run_request
๋ #get
, #post
๋ฑ๊ณผ ๊ฐ์ด ๋ธ๋ก์ ์ฌ์ฉํ์ง ์์ต๋๋ค. Twitter::REST::Client#request
์์ Faraday๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์ธ์. https://github.com/sferik/twitter/blob/master/lib/twitter/rest/client.rb#L130 -L144
run_request๋ #get, #post ๋ฑ๊ณผ ๊ฐ์ ๋ธ๋ก์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๊ทธ๋ ๊ฒ ์๊ฐํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น ?
๊ทํ์ ์ฌ์ฉ ์ฌ๋ก๋ run_request
๋ฅผ ์ฌ์ฉํ๋ ์๋ฒฝํ ์์
๋๋ค. ์ฆ, send
๋ฅผ ํผํ๋ ๊ฒ์
๋๋ค.
์ด์ ๋ด๊ฐ #run_request
์ข์ํ์ง ์๋ ์ด์ ๋ฅผ ๊ธฐ์ตํฉ๋๋ค. ์ค์ ๋ก Twitter::Client#request
์ฝ๋์ ํ ์ง์ ์์ ์ฌ์ฉํ์ง๋ง ๋ฆฌํฉํ ๋ง์ ์ผ๋ถ๋ก ์ ๊ฑฐํ์ต๋๋ค: https://github.com/sferik/twitter/commit/2d70b64674bdc204c85c47327afa571f9641e545. #send
์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํ๋ค๋ ์ ์ ์ธ์ ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(๊ทธ๋ ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค).
#run_request
ํ๋ฉด ์์ฒญ์ด PUT
์ธ์ง POST
์ธ์ง ๊ฑฑ์ ํ๊ณ GET
, DELETE
๋ํ ์์ฒญ ๋ณธ๋ฌธ ๋ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํด์ผ ํ์ต๋๋ค #run_request
๋ณด๋ค ํจ์ฌ ์น์ํ ์ธํฐํ์ด์ค์
๋๋ค.
#send
๋ฅผ #run_request
๋ฐ๊พธ๋ twitter
gem์ pull ์์ฒญ์ ์ ์ถํ์ฌ ๋ ๋ณต์กํ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ์์ฒญํฉ๋๋ค(Code Climate ๋๋ ๊ธฐํ ์ ์ ๋ถ์์ ๋ฐ๋ฅด๋ฉด ).
OPTIONS
๋ฐฉ๋ฒ์ ๋ฐฉ์ดํ๊ธฐ ์ํด HTTP ๋์ฌ์ ๋ฏธ๋ ์ธ๊ธฐ๋ฅผ ์ถ์ธกํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. HTTP 1.0์์๋ GET๊ณผ POST๋ง ์์์ต๋๋ค. 1999๋
์ HTTP 1.1์ ๋ ๋ง์ ๋์ฌ๊ฐ ์ถ๊ฐ๋์์ง๋ง Rails 2๊ฐ ๋ฆฌ์์ค ๊ฒฝ๋ก์์ PUT
๋ฐ DELETE
์ ๋ํ ์ง์์ ์ถ๊ฐํ ๋๊น์ง ๋๋ถ๋ถ ๋ฌด์๋์์ต๋๋ค. ์ด์ Rails 4์์ PATCH
๊ฐ PUT
์ ํจ๊ป ์ง์๋ฉ๋๋ค. ๋ช ๋
์ ์ " PATCH
๋ ์ธ๊ธฐ๊ฐ ์๋ค"๊ณ (์ฌ๋ฐ๋ฅด๊ฒ) ์ฃผ์ฅํ์ ์ ์์ผ๋ฉฐ ๋ฐ๋ผ์ ์ผ๋ฅ ์ง์์ด ํ์ํ์ง ์์ต๋๋ค. ์ค๋๋ Rails๋ก ์์ฑ๋ ๋ชจ๋ ์๋ก์ด API ์๋ฒ๋ GitHub API๋ฅผ ํฌํจํ์ฌ PATCH
๋ฅผ ์ง์ํ๋ฉฐ, Rails 4๊ฐ ์ถ์๋๊ธฐ ์ ์ PATCH
๋ฅผ ์ง์ํ์ต๋๋ค. GitHub API๋ CORS(Cross Origin Resource Sharing)์ ๋ํด OPTIONS
๋ ์ง์ํฉ๋๋ค. OPTIONS
์ ์์ง ๋์ค์ ์ด์ง ์์ ์ ์์ง๋ง, CORS๊ฐ Rails 5์์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ถ๊ฐ๋๋ค๋ฉด ๊ฑฐ์ ํ๋ฃป๋ฐค ์ฌ์ด์ ๋์คํ๋ ๊ฒ์
๋๋ค. ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ๋ฌด์ํ๊ณ ํํํ๊ฒ ๋ ๊ฒ์
๋๋ค.
HTTP ๋์ฌ๋ HTTP ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ค์ํ ์์ฝ์ด์ ๋๋ค. ๊ทธ๋ค ์ค ์์๋ง์ด ์๊ณ ๋ด ์๊ฐ์ ์ฐ๋ฆฌ๋ ํจ๋ฌ๋ฐ์ด 1.0์์ ์ผ๋ฅ ์๋ฏผ์ผ๋ก์ ๊ทธ๋ค์ ๋ชจ๋ ์ง์ํด์ผ ํฉ๋๋ค. ๋น๋ก ๊ทธ๊ฒ์ด ๊ธธ์ ๊ฐ๋ก๋ง๋ ๊ฒ์ ์๋ฏธํ๋๋ผ๋ ๋ง์ ๋๋ค.
CORS๋ ๋งค์ฐ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค. 1.0์ด ์ผ๊ธ ๋์ฌ๋ก OPTIONS ์์ด ๋ฐฐ์ก๋๋ค๋ฉด ์ค๋งํ ๊ฒ์ ๋๋ค.
์ด๋ฐ _bump_์ ๋ํด ๋๋จํ ์ ๊ฐ์
๋๋ค. ํ์ง๋ง OPTIONS
์์ฒญ์ ๋ํ ๋ฐฉ๋ฒ์ผ๋ก options
๋ฅผ ์ง์ํ๋ ๋ฐ ๋์ํ์ญ๋๊น? ์ด๋ฅผ ์คํํ๊ธฐ ์ํด ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
๋๋ ์์ง๋ ๊ทธ ์์ด๋์ด์ ๋ํด ํ๋ฆฌ์ง ์์๋ค. ๊ทธ๋ฌ๋ฉด ํ์ฌ์ options
๋ฉ์๋๋ ๋ฌด์์ ํธ์ถํ ๊น์?
์ฐ๋ฆฌ๊ฐ ์ง์ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋์ฌ์
๋๋ค: get, post, put, delete. ๋น์ ์ด ๊ทธ๋ค์ ๋ถ๋ฅผ ๋ ์ด๋ค ํ๋์ด ์ผ์ด๋๊ณ ์๋ค๋ ๊ฒ์ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค. options
๋ ๋์ฌ๊ฐ ์๋๋ฏ๋ก ์ข์ ์๊ธฐ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฌ๋๋ค์ด ์ผ์์ ์ธ ์ฝ๋์์ ํค๋น OPTIONS
๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ ์ด๋ค ์ด์ ๋ก run_request
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฒฌ๋ ์ ์๋ค๋ฉด(๊ทธ ์ด์ ๋ฅผ ๋ฃ๊ณ ์ถ์ต๋๋ค!) ๋ค์์ ์ ์ํฉ๋๋ค. ์ ๋ฉ์๋์ ์ด๋ฆ์ http_options
๋ก ์ง์ ํ์ฌ ์ด๊ฒ์ด HTTP ์์ฒญ ๋ฉ์๋์์ ๋ํ๋
๋๋ค.
"๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋์ฌ๋ค"๋ผ๋ ์ฃผ์ฅ์ ์ค์ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ๋์ฌ์ด๊ธฐ ๋๋ฌธ์ ํจ๋ฌ๋ฐ์ด์ ๋ฉ์๋๊ฐ ์๋๋ฉฐ, ๊ทธ ๋ฉ์๋๋ HTTP ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ์กด์ฌํฉ๋๋ค. options
IMO์์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
์ด๊ฒ์ด options
์๋ ์ด์ ๋ผ๋ฉด HTTP์ "head"๋ ๋์ฌ์ธ "going"์ด ์๋๊ธฐ ๋๋ฌธ์ head
๋ฅผ ์ ์ํด์๋ ์ ๋ฉ๋๋ค.
options
API๋ฅผ ๊นจ๋ ๊ฒ์ ๋ํ ์ฐ๋ ค๋ฅผ ์์ ํ ์ดํดํ์ง๋ง "์ง์"๋์ง ์๋๋ค๋ ๊ฒ์ ํฐ ๋๋ผ์์
๋๋ค. ๋ชจ๋ HTTP ๋ฉ์๋๊ฐ ๋์ผํ๊ฒ ์ฒ๋ฆฌ๋๋๋ก ํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ผ๊ด์ฑ์ด ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ run_request
์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋ํด์๋ ์์์ ์ง์ ํ ๊ฒ์ฒ๋ผ ์ด ์ฝ๋๊ฐ ์๋ ์ฝ๋๊ฐ ํจ์ฌ ๊นจ๋ํฉ๋๋ค.
์ด๊ฒ์ ์ง์ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ ๊ฒ์ ์ฌ์ ํ โโ๋น์ ์ ๋ถ๋ฆ(๋ถ๋ช :-) ์ด์ง๋ง, ๋๋ ๊ทธ๊ฒ์ ๋ํด ๋น์ ์ ๋ง์์ ๋ฐ๊พธ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ์ง์๋์ง ์์ ๊ฒ์ด๋ผ๋ฉด ๊ทธ๊ฒ์ "_options_๊ฐ ์๋ ๋ค๋ฅธ ๊ฒ์ ์ํ ๊ฒ์ ๋๋ค. ๋์ฌ".
+1 @nhoki
์ด๊ฒ์ ์ค๋ ๋๋ฅผ ๋๋ผ๊ฒ ํ๋ค. conn.get
, conn.post
, conn.delete
๋ฑ์ ๋ชจ๋ ์์ ๋ OPTIONS ์์ฒญ์ ์ํํ๋ ํ์คํ ๋ฐฉ๋ฒ์ด conn.options
๋ผ๊ณ ๋ฏฟ๊ฒ ๋ง๋ญ๋๋ค.
Faraday::Connection
rdocs ๋๋ README?์์ ์ด ๋ถ์ผ์น์ run_request
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ฌธ์ํํ ์ ์์ต๋๋ค. ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
+1
์ต์ ์ด GET, POST, DELETE์ ๋์ผํ์ง ์์ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๊ฐ์ธ์ ์ผ๋ก @mislav ์ ๋์ํ์ง๋ง @sferik ์๊ฒฌ๊ณผ ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ์ ๋ฌด์ํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ํ์ธํ๊ณ options
๋ ๋จ์ํ attr_reader
์ด๋ฉฐ ์ฃผ๋ก ํ
์คํธ์์ ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ณ๊ฒฝ ์ค์ธ ์ผ๋ถ ๊ตฌํ์ ์ ์ฌ์ ์ผ๋ก ์ค๋จํ ์ ์๋ ๊ณต๊ฐ API์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ๋ Faraday 1.0์์๋ง ํด๊ฒฐ๋ฉ๋๋ค.
๊ทธ๋๊น์ง ๋ฐ๋ํ๋ ์ฌ๋์ด ์์ผ๋ฉด ๋ค์ ๋
ผ์ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
conn.options
์(๋) ์์ ํ ๊ฐ์น๊ฐ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. conn.get
, conn.post
๋ฑ์ ์กด์ฌ๋ก ์ธํด ๊ทธ ์กด์ฌ๊ฐ ํฌ๊ฒ ๋ํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆด ๊ฒ์ด๊ธฐ ๋๋ฌธ์ v1.0์ ์ด๊ฒ์ ์ ์ฉํ๊ธฐ์ ์ข์ ๋์์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
์ข์ ์์์
๋๋ค. ๊ธฐ์กด ๋์์ ์ ์งํ๋ฉด์ ์๋ก์ด ๋์์ ์ง์ํ๊ธฐ ์ํด #options
๋ฅผ ์ค๋ฒ๋ก๋ํ์ฌ ์ด๊ฒ์ ๊ตฌํํ์ต๋๋ค. https://github.com/lostisland/faraday/pull/857
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ์ธ์ ์ผ๋ก @mislav ์ ๋์ํ์ง๋ง @sferik ์๊ฒฌ๊ณผ ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ์ ๋ฌด์ํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ํ์ธํ๊ณ
options
๋ ๋จ์ํattr_reader
์ด๋ฉฐ ์ฃผ๋ก ํ ์คํธ์์ ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.๊ทธ๋ฌ๋ ๋ณ๊ฒฝ ์ค์ธ ์ผ๋ถ ๊ตฌํ์ ์ ์ฌ์ ์ผ๋ก ์ค๋จํ ์ ์๋ ๊ณต๊ฐ API์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ๋ Faraday 1.0์์๋ง ํด๊ฒฐ๋ฉ๋๋ค.
๊ทธ๋๊น์ง ๋ฐ๋ํ๋ ์ฌ๋์ด ์์ผ๋ฉด ๋ค์ ๋ ผ์ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.