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

Ruby集成Nomics API如何灵活构建查询参数无需硬编码

实现方案

你完全不需要自己手动拼接查询参数,Faraday 的 get 方法原生支持第二个参数传入哈希格式的查询参数,框架会自动完成URL编码、参数拼接的全部逻辑,不需要处理特殊字符转义、& 符号拼接这类细节。

修正后的封装代码如下:

class Api
  API_KEY = 'some_key'
  API_ENDPOINT = 'https://api.nomics.com/v1/'

  # 可灵活传入任意接口支持的查询参数
  def get_crypto(ids: [], interval: [], convert: 'USD', per_page: 100, page: 1)
    # 构造参数哈希,Faraday会自动把这个哈希转成URL后的查询字符串
    params = {
      ids: ids.join(','),
      interval: interval.join(','),
      convert: convert,
      'per-page': per_page,
      page: page
    }.compact # 过滤掉值为nil的参数,避免拼接无效空参数

    client.get("currencies/ticker", params)
  end

  private

  def client
    # 用||=实现单例,避免每次调用接口都重复初始化Faraday实例
    @client ||= Faraday.new(API_ENDPOINT) do |client|
      client.response :json, content_type: /\bjson$/
      client.adapter Faraday.default_adapter
      client.headers['Accept'] = 'application/json'
      client.headers['Authorization'] = "Bearer #{API_KEY}"
    end
  end
end

调用示例:

api = Api.new
# 直接传参即可,不需要处理任何拼接逻辑
api.get_crypto(ids: ['BTC','ETH'], interval: ['1d','30d'], convert: 'EUR')

额外优化说明

  • 你原有代码里的request :url_encoded中间件、Content-Type请求头都是冗余配置,这两个是给带请求体的POST/PUT表单请求用的,GET请求不需要传,可以直接删掉
  • 如果后续要对接其他Nomics接口,只需要新增对应方法,按同样逻辑传入参数哈希即可,不需要写任何通用参数拼接工具方法

内容的提问来源于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.29 17:54:02