class AuthingRuby::Common::HttpClient
Constants
- METHODS
Public Class Methods
new(options = {}, tokenProvider = nil)
click to toggle source
METHODS
= %i[get post put delete head patch options trace]
# File lib/authing_ruby/common/HttpClient.rb, line 61 def initialize(options = {}, tokenProvider = nil) @options = options @tokenProvider = tokenProvider end
Public Instance Methods
faraday_conn(config = {})
click to toggle source
目的: 把 Faraday 稍微封装一下,因为 Faraday 不能动态指定方法(文档里没写),不像 js 的 axios。 github.com/lostisland/faraday/blob/main/lib/faraday/connection.rb www.rubydoc.info/github/lostisland/faraday/Faraday/Connection 返回 <Faraday::Response>
# File lib/authing_ruby/common/HttpClient.rb, line 70 def faraday_conn(config = {}) method = config.fetch(:method, nil) if method == nil raise "必须传入 method,可选值 #{METHODS.join(', ')}" end method_downcase = method.downcase # 转成小写 if METHODS.include?(method_downcase.to_sym) == false raise "传入的 method 错误,可选值 #{METHODS.join(', ')}" end url = config.fetch(:url, nil) data = config.fetch(:data, nil) # data 和 body 一回事 params = config.fetch(:params, nil) headers = config.fetch(:headers, nil) if method_downcase == 'get' conn = Faraday::Connection.new url return conn.get nil, params, headers end if method_downcase == 'post' conn = Faraday::Connection.new url return conn.post nil, data, headers end if method_downcase == 'put' conn = Faraday::Connection.new url return conn.put nil, data, headers end if method_downcase == 'delete' conn = Faraday::Connection.new url return conn.delete nil, params, headers end end
request(config = {})
click to toggle source
# File lib/authing_ruby/common/HttpClient.rb, line 106 def request(config = {}) # 处理 config 里5个参数:method, url, data, params, headers method = config.fetch(:method, nil) url = config.fetch(:url, nil) data = config.fetch(:data, nil) # data 和 body 一回事 params = config.fetch(:params, nil) headers = { 'x-authing-sdk-version': "ruby:#{AuthingRuby::VERSION}", 'x-authing-userpool-id': @options.fetch(:userPoolId, ''), 'x-authing-request-from': @options.fetch(:requestFrom, 'sdk'), 'x-authing-app-id': @options.fetch(:appId, ''), 'x-authing-lang': @options.fetch(:lang, ''), }; # 如果用户传了 authorization 进来。 config_headers_authorization = config.dig(:headers, :authorization) if config_headers_authorization != nil headers['Authorization'] = config_headers_authorization else # 如果用户不传 token,就使用 sdk 自己维护的。 token = @tokenProvider.getToken() if @tokenProvider headers['Authorization'] = "Bearer #{token}" if token end resp = faraday_conn({ method: method, params: params, url: url, data: data, headers: headers, }) # const { code, message } = data; # if (code !== 200) { # this.options.onError(code, message, data.data); # throw new Error(JSON.stringify({ code, message, data: data.data })); # } # return data.data; return resp end