Shopify API API in Ruby

Shopify API API in Ruby

This guide shows you how to integrate the Shopify API into your Ruby application. E-commerce platform API for products, orders, customers, and store management.

Prerequisites

  • Ruby installed on your system
  • An Shopify API API key (sign up at https://shopify.dev)
  • 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://shopify.dev/api'
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://shopify.dev/api/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 ShopifyClient
  def initialize(api_key, base_url = 'https://shopify.dev/api')
    @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 = ShopifyClient.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

Other languages