class RestApiService < ApplicationService private def base_url raise NotImplementedError end def headers raise NotImplementedError end def endpoint_url(path) "#{base_url}/#{path.gsub(/^\//, '')}" end def get(path, params = {}) res = Faraday.get endpoint_url(path), params, headers # TODO handle unsuccessful responses with no valid JSON body JSON.parse(res.body) end def post(path, payload) res = Faraday.post endpoint_url(path), payload.to_json, headers # TODO handle unsuccessful responses with no valid JSON body JSON.parse(res.body) end end