In this tips I am going to introduce you to web service API call. I am using http://webservicex.net/
“WebserviceX.NET provides programmable business logic components and standing data that serve as “black boxes” to provide access to functionality and data via web services”.
I am going to use one of its web service which is “Currency Convertor “ and wsdl schema location is http://www.webservicex.net/CurrencyConvertor.asmx?WSDL We have a very good gem for SOAP API call in Ruby on Rails which is Savon. I am going to use it and show you how to use it.
First let’s create a new rails application and name it CurrencyConverter (or any other name you like). Then add this “gem ‘savon’ “ to gem file and bundle it.
Create a controller with name public with index and create action and model CurrencyConverter.
Code for controller is below and it is self explanatory.
class PublicsController < ApplicationController #purpose: for showing the home page for the application def index end #purpose: for calculating the currency convertion rate # params : params[:fromCurrency],params[:toCurrency] # return : convertion rate def create # creating a object of the CurrencyConverter model currency = CurrencyConverter.new(params[:fromCurrency],params[:toCurrency]) render :json => currency.result end end
Code for model is below
class CurrencyConverter attr_reader :result # purpose : for initializing the object of currency converter # params : fromCurrecny(unit),toCurrency(unit) # return : none def initialize(fromCurrency , toCurrency) # creating a client from the wsdl schema client = Savon::Client.new("http://webservicex.net/currencyconvertor.asmx?wsdl") # calling the api with fromCurrecny and toCurrency unit response = client.request :web, :conversion_rate, body: { "FromCurrency" => fromCurrency , "ToCurrency" => toCurrency } #checking for success of api call if response.success? data = response.to_array(:conversion_rate_response).first if data # setting convertion rate to result @result = data[:conversion_rate_result] end end end end
The index.html.erb view is like
From Currency Unit Select Currency British Pound Indian Rupee Pakistani Rupee Singapore Dollar South African Rand U.S. Dollar To Currency Unit Select Currency British Pound Indian Rupee Pakistani Rupee Singapore Dollar South African Rand U.S. Dollar
I have used ajax call for submitting this fromCurrency And toCurrency unit.The code for it is
$(document).ready(function(){ var rate = 0.0; var fromCurrency = $("#from_currency"); var toCurrency= $("#to_currency"); var fromAmount = $("#from_amount"); var toAmount = $("#to_amount"); var button = $(“# get_conversion_rate”); var getConversionRate = function(){ $.post('/publics',{ fromCurrency : fromCurrency.val(), toCurrency : toCurrency.val() },function(data) { rate = data; toAmount.val(fromAmount.val()*rate); }); }; var initialize = function(){ button.click(getConversionRate); }; initializer(); });