рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ URL рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: https://service.com/service:search
ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдлреИрд░рд╛рдбреЗ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
class Provider::Client
...
delegate :post, :patch, :delete, :put, to: :client
def client
Faraday.new(url: 'https://service.com/') do |faraday|
faraday.headers = headers.merge(content_type: content_type)
faraday.response(:json, content_type: CONTENT_TYPE)
faraday.basic_auth(USER, PASSWORD)
faraday.adapter(Faraday.default_adapter)
end
end
end
рдФрд░ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ
data = Provider::Client.post(
"service:search?limit=#{LIMIT}&offset=#{offset}", search_params
)
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдкреНрд░рд╢реНрди рдореЗрдВ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:
URI::InvalidURIError: query conflicts with opaque
from /Users/luiz/.rbenv/versions/2.7.1/lib/ruby/2.7.0/uri/generic.rb:832:in `query='
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЗрдЯ/http рдПрдбрд╛рдкреНрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдбрд╛рдкреНрдЯрд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд╣реА рдХреЙрд▓ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдерд╛
require "uri"
require "net/http"
url = URI("https://service.com/service:search?limit=50&offset=400")
https = Net::HTTP.new(url.host, url.port);
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Accept"] = "custom_header"
request["Authorization"] = "Basic xxx="
request["Content-Type"] = "application/json"
request.body = "long_json"
response = https.request(request)
puts response.read_body
рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдлреИрд░рд╛рдбреЗ рдореЗрдВ рдХреБрдЫ рдЗрд╕ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдиреЗрдЯ/http рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдорд╛рдиреНрдп рдХрд░ рд░рд╣рд╛ рд╣реИ
рд╣рд╛рдп @luizkowalski , рдЕрдкрд╡рд╛рдж URI
рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдФрд░ query=
рд╡рд┐рдзрд┐ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
def query=(v)
return <strong i="9">@query</strong> = nil unless v
raise InvalidURIError, "query conflicts with opaque" if <strong i="10">@opaque</strong>
...
end
рдлреИрд░рд╛рдбреЗ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдФрд░ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз url рдкрд░ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдЬрд╛рджреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ @opaque
рдХреЛ :
рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рдЗрд╕ рд▓рд╛рдЗрди рддрдХ рд▓рдЧрд╛рдпрд╛ рд╣реИ: https://github.com/lostisland/faraday/blob/c26df87b8653db4f270e3bcdc7a15bcdd2dd5cae/lib/faraday/connection.rb#L525
рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, base
рд╣реЛрдЧрд╛ #<URI::HTTPS https://service.com/>
рдФрд░ url
рд╣реЛрдЧрд╛ service:search?limit=50&offset=400
ред
рдЕрдм, рджрд┐рд▓рдЪрд╕реНрдк рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдпрджрд┐ рдпреВрдЖрд░рдЖрдИ рдХреЗ рд▓рд┐рдП +
рд╡рд┐рдзрд┐ рдХреЗ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ :
, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ!
2.7.1 > url
=> "service:search?limit=50&offset=400"
2.7.1 > base
=> #<URI::HTTPS https://service.com/>
2.7.1 > base + url
=> #<URI::Generic service:search?limit=50&offset=400>
рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, base
рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ url рдмрдЪрд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд┐рдХреНрд╕ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдХреЗрд╡рд▓ /
рдкреНрд░реАрдкреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдЪреАрдЬреЗрдВ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ:
data = Provider::Client.post(
"/service:search?limit=#{LIMIT}&offset=#{offset}", search_params
)
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ base
рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ /
рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдЗрд╕реЗ /
рдХрд░рдХреЗ рджреЗрдЦреЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдФрд░ рдлреИрд░рд╛рдбреЗ рдореЗрдВ рдХреЛрдб рдХреА рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХрд╛ рдвреВрдВрдвреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЦреБрд╢реА-рдЦреБрд╢реА рдПрдХ рдкреАрдЖрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реВрдБрдЧрд╛
@iMacTia рдЗрд╕рдиреЗ рдЕрдм рдХрд╛рдо рдХрд┐рдпрд╛ред рдЖрдзрд╛рд░ URL рд╣реИ: https://service.com/api
ред рдЬрдм рдореИрдВрдиреЗ /
рдХреЛ service:search
рдЬреЛрдбрд╝рд╛ рддреЛ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдФрд░ рджреЗрдЦрд╛ рдХрд┐ /api
рдореВрд▓ URL рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдерд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ /api/service:search
рдЬреЛрдбрд╝рд╛ рдФрд░ рдЕрдм рдпрд╣ рдареАрдХ рд╣реИ
@luizkowalski рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА, рд╣рд╛рдБ рдпрд╣реА рд╡рд╣реА рд╣реИ рдЬреЛ рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ / рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдлреИрд░рд╛рдбреЗ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ URL рдирд┐рд░рдкреЗрдХреНрд╖ рд╣реИ рдпрджрд┐ рдпрд╣ /
рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдзрд╛рд░ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкрде рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрднреА рднреА рдареАрдХ рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЕрдм рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@luizkowalski рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА, рд╣рд╛рдБ рдпрд╣реА рд╡рд╣реА рд╣реИ рдЬреЛ рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛
рдЬреИрд╕рд╛ рдХрд┐ рдлреИрд░рд╛рдбреЗ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ URL рдирд┐рд░рдкреЗрдХреНрд╖ рд╣реИ рдпрджрд┐ рдпрд╣
/
рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдзрд╛рд░ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкрде рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИредрдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрднреА рднреА рдареАрдХ рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЕрдм рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛ