DEV Community

Germán Alberto Gimenez Silva
Germán Alberto Gimenez Silva

Posted on • Originally published at rubystacknews.com on

How to Use APIs in Ruby: A Step-by-Step Guide with Faraday, HTTParty, and Net::HTTP

May 26, 2025

If you’re a Rubyist like me, you know that making an API call can go from a quick one-liner to a full-blown production-ready beast — and everything in between! Let’s take a journey through the best-to-least optimal approaches for making API calls in Ruby, with a dash of humor to keep us caffeinated. ☕


💬 Let’s Make Your API Calls Sing!

If you enjoyed this article and you’re wondering how these Ruby techniques could level up your website or application , I’d love to chat!

Get in Touch

I specialize in building fast, reliable APIs and integrating external services using Ruby and Rails. From optimizing performance to adding new features, let’s collaborate to make your project even more awesome! 🚀


🥇 1⃣ Faraday Gem (The API Superhero)


gem install faraday



require 'faraday'

conn = Faraday.new(url: "https://api.sunrisesunset.io")
response = conn.get('/json', lat: lat, lng: lng, date: date)

puts response.body

Enter fullscreen mode Exit fullscreen mode

✅ Why choose Faraday? Faraday is like your favorite multi-tool: It’s flexible, testable, and middleware-ready. Need retries, logging, or fancy authentication? Faraday’s got your back!

🪄 When to use it:

  • For larger projects (like Rails APIs).
  • When you need robust error handling, consistent patterns, and easy testing.

🤭 Joke:

“Faraday is like Batman — always prepared for anything.”


🥈 2⃣ HTTParty Gem (The Crowd Favorite)


gem install httparty



require 'httparty'

response = HTTParty.get(
  "https://api.sunrisesunset.io/json",
  query: { lat: lat, lng: lng, date: date }
)

puts response.parsed_response

Enter fullscreen mode Exit fullscreen mode

✅ Why choose HTTParty? HTTParty is super popular for its simplicity. It handles JSON parsing out of the box and works great for quick scripts or small Rails apps.

🪄 When to use it:

  • Quick and easy REST API integrations.
  • Scripts that don’t need middleware or heavy customization.

🤭 Joke:

“HTTParty: because even your Ruby code needs a little party now and then!”


🥉 3⃣ Fully Customized Net::HTTP (Maximum Control, Maximum Fun)

Article content


require 'net/http'
require 'uri'

url = URI("https://api.sunrisesunset.io/json")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true if url.scheme == 'https'

request = Net::HTTP::Get.new("/json?lat=#{lat}&lng=#{lng}&date=#{date}")
request['User-Agent'] = 'Ruby Script 1.0'

response = http.request(request)
puts response.body

Enter fullscreen mode Exit fullscreen mode

✅ Why choose Net::HTTP (customized)? This is for those times when you need full control: headers, SSL, timeouts, and more. It’s built-in, so no extra gems needed.

🪄 When to use it:

  • When you need to customize requests heavily (headers, proxies, etc.).
  • When you don’t want to rely on external gems.

🏅 4⃣ Using URI.encode_www_form (Safety First)


require 'net/http'
require 'uri'

base_url = "https://api.sunrisesunset.io/json"
params = URI.encode_www_form(lat: lat, lng: lng, date: date)
url = URI("#{base_url}?#{params}")

response = Net::HTTP.get_response(url)
puts response.body

Enter fullscreen mode Exit fullscreen mode

✅ Why choose it? This method is your shield against sneaky special characters! It ensures your query parameters are always safe and sound.

🪄 When to use it:

  • If you’re dealing with dynamic or user-supplied parameters.
  • When you want to avoid URL encoding headaches.

🎖 5⃣ The Classic Net::HTTP (Simple but Not Fancy)


require 'net/http'
require 'uri'

url = URI("https://api.sunrisesunset.io/json?lat=#{lat}&lng=#{lng}&date=#{date}")
response = Net::HTTP.get_response(url)
puts response.body

Enter fullscreen mode Exit fullscreen mode

✅ Why choose it? It’s straightforward and built right into Ruby — no dependencies!

🪄 When to use it:

  • When you’re writing a small script or testing a simple endpoint.
  • When you don’t need to tweak headers or SSL.

⚠ Why it’s less optimal: No built-in encoding or error handling. If you’re in production, you’ll want more robust tools.


🥲 6⃣ OpenURI (The Lazy Sunday Option)


require 'open-uri'

url = "https://api.sunrisesunset.io/json?lat=#{lat}&lng=#{lng}&date=#{date}"
response = URI.open(url).read
puts response

Enter fullscreen mode Exit fullscreen mode

✅ Why choose it? It’s the ultimate one-liner! Perfect for quick-and-dirty scripts when you just need the data.

⚠ Why it’s not ideal: Very limited control over SSL, headers, or advanced features.


💡 Wrapping it Up

So there you have it: From the mighty Faraday to the humble OpenURI , Ruby has an approach for every project size and level of control you need.

👉 If you’re building a serious app, go for Faraday or HTTParty. 👉 If you’re just playing around, OpenURI or Net::HTTP might do the trick.

Whatever path you choose, remember: clean code + good testing = happy APIs!


🤝 What about you? What’s your go-to gem for API calls in Ruby? Let’s share some stories (or horror stories!) in the comments below. 🚀 ✨

Article content

Top comments (0)