使用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
相关产品推荐
相关产品推荐

