Class: IceJade::Getter::Client

Inherits:
Object
  • Object
show all
Includes:
Transport
Defined in:
lib/ice_jade/getter/client.rb

Overview

通用 HTTP GET 客户端

与 IceJade::Poster::Client 并列,专用负责 GET 请求。 底层传输能力(URI 拼接、请求执行、响应适配、超时重试)复用 IceJade::Transport, 与 Poster 仅 HTTP 动词与参数构造不同:GET 幂等,无请求体,参数走 query string。

零外部依赖,内置超时控制、指数退避重试、统一 Response 包装, 与 Quantum 模块风格一致,错误不抛异常。

Examples:

基础用法

getter = IceJade::Getter::Client.new(
  base_url: 'https://api.example.com',
  headers:  { 'Authorization' => 'Bearer token' },
  timeout:  30
)
resp = getter.get('/users', params: { page: 1, size: 20 })
puts resp.data if resp.success?

Constant Summary

Constants included from Transport

Transport::HTTP_STATUS_TEXT

Instance Attribute Summary

Attributes included from Transport

#base_url, #default_headers, #max_retries, #open_timeout, #timeout

Instance Method Summary collapse

Methods included from Transport

#adapt_response, #apply_headers, #build_multipart, #build_uri, #execute, #init_transport, #merge_headers, #mime_type, #normalize_headers

Constructor Details

#initialize(base_url: nil, headers: {}, timeout: 60, open_timeout: 10, max_retries: 2) ⇒ Client

Returns a new instance of Client.

Parameters:

  • base_url (String, nil) (defaults to: nil)

    基础 URL,后续请求可传相对路径

  • headers (Hash) (defaults to: {})

    默认请求头(每次请求自动合并,同名会被覆盖)

  • timeout (Integer) (defaults to: 60)

    读取超时(秒),默认 60

  • open_timeout (Integer) (defaults to: 10)

    连接超时(秒),默认 10

  • max_retries (Integer) (defaults to: 2)

    超时后最大重试次数,默认 2



33
34
35
36
37
# File 'lib/ice_jade/getter/client.rb', line 33

def initialize(base_url: nil, headers: {}, timeout: 60, open_timeout: 10, max_retries: 2)
  init_transport(base_url: base_url, headers: headers,
                 timeout: timeout, open_timeout: open_timeout,
                 max_retries: max_retries)
end

Instance Method Details

#get(url, params: nil, headers: {}) ⇒ IceJade::Response

发送通用 GET 请求

与 Poster 的 post 系列方法对称:返回 IceJade::Response,错误不抛异常。 GET 幂等,超时重试同样安全。

Examples:

带查询参数

resp = getter.get('/users', params: { page: 1, size: 20 })
puts resp.data if resp.success?

自定义请求头

resp = getter.get('/headers', headers: { 'X-Request-ID' => 'uuid-5678' })

错误响应

resp = getter.get('/status/404')
resp.success?  # => false
resp.code      # => 404

Parameters:

  • url (String)

    完整 URL 或相对路径(需先设置 base_url)

  • params (Hash, nil) (defaults to: nil)

    查询参数,自动用 URI.encode_www_form 编码到 query string; 若 url 已含 query,则在其后追加

  • headers (Hash) (defaults to: {})

    额外请求头(与默认头合并,同名覆盖)

Returns:



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/ice_jade/getter/client.rb', line 65

def get(url, params: nil, headers: {})
  uri = build_uri(url)
  if params && !params.empty?
    extra = URI.encode_www_form(params)
    uri.query = uri.query ? "#{uri.query}&#{extra}" : extra
  end
  merged_headers = merge_headers(default_headers, normalize_headers(headers))
  req = Net::HTTP::Get.new(uri)
  apply_headers(req, merged_headers)
  execute(uri, req)
end