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

