在日常开发中,经常需要从外部服务获取数据。比如你写了个小工具,想查天气、获取用户信息,或者同步订单状态,这些都可以通过调用ref="/tag/155/" style="color:#B2A89E;font-weight:bold;">API完成。Ruby作为一门简洁高效的编程语言,处理这类任务特别顺手。
使用Net::HTTP发起请求
Ruby自带的Net::HTTP库足够应付大多数基础场景。不需要额外安装依赖,适合轻量级脚本。
比如你想从JSONPlaceholder这样的测试接口拉取一篇博客文章:
require 'net/http'
require 'uri'
require 'json'
url = URI('https://jsonplaceholder.typicode.com/posts/1')
response = Net::HTTP.get(url)
post = JSON.parse(response)
puts post['title']
这段代码先加载必要的模块,构造URL,然后发送GET请求并解析返回的JSON数据。简单直接,适合一次性任务或小型自动化流程。
用Faraday让代码更清晰
当项目变复杂,比如要加请求头、处理认证、发POST数据,Net::HTTP写起来就有点啰嗦了。这时候推荐用Faraday,它像一个更友好的前端封装。
先安装: gem install faraday
接着写个带Header和参数的请求:
require 'faraday'
require 'json'
conn = Faraday.new(url: 'https://api.example.com') do |f|
f.headers['Content-Type'] = 'application/json'
f.headers['Authorization'] = 'Bearer your-token-here'
f.adapter Faraday.default_adapter
end
response = conn.get('/v1/users', { page: 1 })
data = JSON.parse(response.body)
puts data.first['name']
Faraday的好处是结构清晰,方便后续扩展。比如换日志、加重试机制,都可以通过插件方式接入。
处理错误别大意
网络不稳、接口挂掉、返回格式异常,都是常见问题。别让脚本一出错就崩溃。
加一层异常捕获,让程序更健壮:
begin
response = conn.get('/v1/data')
if response.success?
result = JSON.parse(response.body)
else
puts "请求失败:#{response.status}"
end
rescue JSON::ParserError
puts "数据解析失败"
rescue Faraday::ConnectionFailed
puts "连接超时或网络问题"
end
这样即使出问题,也能知道发生了什么,而不是干瞪眼等结果。
把脚本变成定时任务
很多实际用途都离不开定时执行。比如每天早上6点抓一次汇率,写进本地文件。
配合系统的crontab就能实现。编辑计划任务:
crontab -e
加上一行:
0 6 * * * /usr/bin/ruby /home/user/scripts/fetch_rate.rb
只要脚本本身能独立运行,这种方式稳定又省心。