HERE API API in Ruby
HERE API API in Ruby
This guide shows you how to integrate the HERE API into your Ruby application. Location services including maps, geocoding, routing, and fleet tracking.
Prerequisites
- Ruby installed on your system
- An HERE API API key (sign up at https://here.com)
- Basic familiarity with HTTP APIs
Installation
gem install httparty
Basic Usage
require 'net/http'
require 'json'
require 'uri'
api_key = ENV['API_KEY'] || 'YOUR_API_KEY'
base_url = 'https://api.here.com'
uri = URI("#{base_url}/v1/resources")
request = Net::HTTP::Get.new(uri)
request['Authorization'] = "Bearer #{api_key}"
request['Content-Type'] = 'application/json'
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(request)
end
puts "Status: #{response.code}"
puts response.body
Error Handling
require 'net/http'
require 'json'
require 'uri'
def call_api_with_retry(url, headers, max_retries = 3)
uri = URI(url)
max_retries.times do |attempt|
request = Net::HTTP::Get.new(uri)
headers.each { |k, v| request[k] = v }
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(request)
end
if response.code == '429'
sleep(60)
next
end
return response unless response.code.to_i >= 500
sleep(2 ** attempt)
end
raise "Max retries exceeded"
end
url = 'https://api.here.com/v1/resources'
headers = { 'Authorization' => "Bearer #{ENV['API_KEY']}", 'Content-Type' => 'application/json' }
response = call_api_with_retry(url, headers)
puts response.body
Advanced Usage
require 'net/http'
require 'json'
require 'uri'
class HereClient
def initialize(api_key, base_url = 'https://api.here.com')
@api_key = api_key
@base_url = base_url.chomp('/')
end
def request(method, path, body = nil)
uri = URI("#{@base_url}/v1#{path}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
request_class = Net::HTTP.const_get(method.capitalize)
request = request_class.new(uri)
request['Authorization'] = "Bearer #{@api_key}"
request['Content-Type'] = 'application/json'
request.body = body.to_json if body
response = http.request(request)
raise "API Error: #{response.code}" if response.code.to_i >= 400
JSON.parse(response.body)
end
def list_resources(params = {})
query = URI.encode_www_form(params)
path = "/resources#{query.empty? ? '' : '?' + query}"
request('get', path)
end
def create_resource(data)
request('post', '/resources', data)
end
end
client = HereClient.new(ENV['API_KEY'] || 'YOUR_API_KEY')
resources = client.list_resources(limit: 50)
puts "Found #{resources['data']&.length || 0} resources"
Best Practices
- Store your API key in an environment variable, never in source code
- Implement retry logic with exponential backoff for 429 and 5xx errors
- Set reasonable timeouts (10-30 seconds) for all API calls
- Log request IDs from response headers for debugging
- Cache responses where appropriate to reduce API calls