Back

Step by Step Guide to Building a Thryv API Integration in Ruby

Sep 14, 20246 minute read

Introduction

Hey there, fellow developer! Ready to dive into the world of Thryv API integration? You're in for a treat. Thryv's API is a powerful tool that'll let you tap into a wealth of business management features. In this guide, we'll walk through building a solid integration in Ruby. Let's get cracking!

Prerequisites

Before we jump in, make sure you've got:

  • Ruby 2.7+ installed
  • Bundler gem
  • Your Thryv API credentials (if you don't have these yet, hop over to Thryv's developer portal)

Setting Up the Project

First things first, let's get our project set up:

mkdir thryv_integration cd thryv_integration bundle init

Now, open up your Gemfile and add these gems:

gem 'httparty' gem 'dotenv'

Run bundle install, and you're good to go!

Authentication

Alright, time to get authenticated. Thryv uses OAuth 2.0, so we'll need to grab an access token:

require 'httparty' require 'dotenv/load' class ThryvAuth include HTTParty base_uri 'https://api.thryv.com' def self.get_token response = post('/oauth/token', body: { grant_type: 'client_credentials', client_id: ENV['THRYV_CLIENT_ID'], client_secret: ENV['THRYV_CLIENT_SECRET'] } ) response.parsed_response['access_token'] end end

Pro tip: Store your credentials in a .env file and use the dotenv gem to load them. Keep those secrets secret!

Making API Requests

Now that we're authenticated, let's make some requests:

class ThryvAPI include HTTParty base_uri 'https://api.thryv.com/v1' def initialize @token = ThryvAuth.get_token @options = { headers: { 'Authorization' => "Bearer #{@token}" } } end def get_customers self.class.get('/customers', @options) end # Add more methods for other endpoints end

Implementing Key Thryv API Features

Let's add some methods to work with core Thryv features:

class ThryvAPI # ... previous code ... def create_appointment(customer_id, start_time, end_time) body = { customerId: customer_id, startDateTime: start_time, endDateTime: end_time } self.class.post('/appointments', @options.merge(body: body.to_json)) end def process_payment(customer_id, amount) body = { customerId: customer_id, amount: amount } self.class.post('/payments', @options.merge(body: body.to_json)) end end

Error Handling and Logging

Don't forget to handle those pesky errors:

def api_request yield rescue HTTParty::Error => e puts "HTTP Error: #{e.message}" # Log error, retry, or handle as needed rescue StandardError => e puts "General Error: #{e.message}" # Log error or handle as needed end

Wrap your API calls with this method for better error handling.

Testing the Integration

Time to make sure everything's working smoothly:

require 'minitest/autorun' class ThryvAPITest < Minitest::Test def setup @api = ThryvAPI.new end def test_get_customers response = @api.get_customers assert_equal 200, response.code # Add more assertions end # Add more tests end

Best Practices and Optimization

Remember to respect rate limits and implement caching where it makes sense. Your future self (and Thryv's servers) will thank you!

def get_customers Rails.cache.fetch('customers', expires_in: 1.hour) do self.class.get('/customers', @options) end end

Conclusion

And there you have it! You've just built a solid Thryv API integration in Ruby. You're now equipped to manage customers, appointments, and payments programmatically. How cool is that?

Remember, this is just the beginning. There's a whole world of Thryv API features to explore. So go forth, experiment, and build something awesome!

Need more info? Check out Thryv's API docs for the full scoop. Happy coding!