You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HTTParty实现Ruby灵活客户端类的memoization client方法

HTTParty 实现方案
  • 先安装HTTParty依赖:gem install httparty,如果使用Bundler管理依赖,在Gemfile中添加gem 'httparty'后执行bundle install即可。

完整实现代码

require 'httparty'

class Client
  API_ENDPOINT = 'https://id.amiqus.co/api/'
  PERSONAL_ACCESS_TOKEN = ENV['personal_access_token']

  def initialize
    @access_token = PERSONAL_ACCESS_TOKEN
  end

  def get(path, options = {})
    client.get(path.to_s, options)
  end

  private

  def client
    # 通过||=实现memoization,仅第一次调用时初始化客户端,后续复用实例
    @client ||= begin
      # 复制HTTParty模块生成实例专属配置,避免污染全局类配置,支持多实例独立使用
      http_client = HTTParty.dup
      http_client.base_uri API_ENDPOINT
      http_client.format :json # 自动解析JSON响应,对应原Faraday的response :json配置
      # 配置请求头,和原有Faraday逻辑完全一致
      http_client.headers['Accept'] = 'application/json'
      http_client.headers['Content-Type'] = 'application/json'
      http_client.headers['Authorization'] = "Bearer #{@access_token}" if @access_token&.present?
      http_client
    end
  end
end

如果是没有引入Active Support的纯Ruby环境,将@access_token&.present?替换为@access_token && !@access_token.strip.empty?即可正常运行。

功能说明

  • 和原有Faraday实现逻辑1:1对齐,所有配置、调用方式完全兼容,不需要修改上层调用代码
  • 每个Client实例仅初始化一次HTTP客户端,避免重复创建实例的性能开销
  • 支持创建多个使用不同token的Client实例,配置不会互相覆盖
  • 响应直接调用#parsed_response即可拿到解析后的JSON哈希,不需要手动处理序列化

使用示例

# 初始化客户端
client = Client.new
# 调用GET接口,参数规则和原Faraday调用完全一致
response = client.get('v2/employees', query: { department: 'tech', page: 1 })
# 获取解析后的响应数据
puts response.parsed_response
# 获取响应状态码
puts response.code

内容的提问来源于stack exchange,提问作者mr_muscle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:04