<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Robby on Rails: The HTTParty has just begun</title>
    <link>http://www.robbyonrails.com/articles/2008/11/26/the-httparty-has-just-begun</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>thoughts.sort_by{|t| t[:topic]}.collect </description>
    <item>
      <title>The HTTParty has just begun</title>
      <description>&lt;p&gt;After releasing the new RubyURL &lt;span class="caps"&gt;API&lt;/span&gt;, I decided that it was time to look around at libraries to interact with it. I came across a new Ruby gem from &lt;a href="http://addictedtonew.com/about/"&gt;John Nunemaker&lt;/a&gt; named, &lt;a href="http://httparty.rubyforge.org/"&gt;HTTParty&lt;/a&gt;, which aims to make it easy to talk to &lt;span class="caps"&gt;XML&lt;/span&gt; and &lt;span class="caps"&gt;JSON&lt;/span&gt;-based web services. Be sure to &lt;a href="http://railstips.org/2008/7/29/it-s-an-httparty-and-everyone-is-invited"&gt;read John&amp;#8217;s announcement of HTTParty&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;So, I decided it might be fun to introduce more people to the gem by showing you all how to use it to talk to the new RubyURL &lt;span class="caps"&gt;API&lt;/span&gt;.&lt;/p&gt;


	&lt;h2&gt;Install HTTParty&lt;/h2&gt;


	&lt;p&gt;Before we get started, you&amp;#8217;ll need to install the HTTParty gem with the following command:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
   ~ : sudo gem install httparty
  Password:
  When you HTTParty, you must party hard!
  Successfully installed httparty-0.1.6
  1 gem installed
  Installing ri documentation for httparty-0.1.6...
  Installing RDoc documentation for httparty-0.1.6...
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Great! Now that &lt;strong&gt;we&amp;#8217;re ready to party hard&lt;/strong&gt;, let&amp;#8217;s build something.&lt;/p&gt;


	&lt;h2&gt;Talking to the RubyURL &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/h2&gt;


	&lt;p&gt;The &lt;a href="http://rubyurl.com/api"&gt;RubyURL &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; currently supports both &lt;span class="caps"&gt;XML&lt;/span&gt; and &lt;span class="caps"&gt;JSON&lt;/span&gt;, which are each supported by HTTParty. The great thing about HTTParty is that all you need to do is include it in a class and you&amp;#8217;re able to quickly talk to remote services.&lt;/p&gt;


	&lt;p&gt;In this following example, we&amp;#8217;re going to create a new class called &lt;code&gt;Rubyurl&lt;/code&gt;.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Rubyurl&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;What we&amp;#8217;ll want to do now is include the HTTParty library. (&lt;strong&gt;note:&lt;/strong&gt; you&amp;#8217;ll need to require both rubygems and httparty gems and I&amp;#8217;ll skip those lines in following code samples)&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Rubyurl&lt;/span&gt;
  &lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;HTTParty&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;The HTTParty provides &lt;a href="http://github.com/jnunemaker/httparty/tree/master/lib/httparty.rb"&gt;a few class methods&lt;/a&gt;, which we can use to configure our library. We&amp;#8217;ll go ahead and specify the &lt;code&gt;base_uri&lt;/code&gt;, which we&amp;#8217;ll set to &lt;code&gt;rubyurl.com&lt;/code&gt;.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Rubyurl&lt;/span&gt;
  &lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;HTTParty&lt;/span&gt;
  &lt;span class="ident"&gt;base_uri&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;rubyurl.com&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Now that our class is setup to talk to the &lt;a href="http://rubyurl.com"&gt;Rubyurl.com&lt;/a&gt; site, we&amp;#8217;ll want to add a new method which we can use to communicate with the RubyURL &lt;span class="caps"&gt;API&lt;/span&gt;. We&amp;#8217;ll call this &lt;code&gt;shorten&lt;/code&gt; as we&amp;#8217;re using RubyURL to shorten long URLs&amp;#8230; right?&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Rubyurl&lt;/span&gt;
  &lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;HTTParty&lt;/span&gt;
  &lt;span class="ident"&gt;base_uri&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;localhost:3000&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.shorten&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="ident"&gt;website_url&lt;/span&gt; &lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Our new &lt;code&gt;shorten&lt;/code&gt; method will expect us to provide it with a website url, which we&amp;#8217;ll want RubyURL to return a shortened &lt;span class="caps"&gt;URL&lt;/span&gt; for. The &lt;span class="caps"&gt;PATH&lt;/span&gt; for the &lt;span class="caps"&gt;API&lt;/span&gt; that we&amp;#8217;ll want to talk to is: &lt;code&gt;/api/links&lt;/code&gt;, which we&amp;#8217;re expected to pass &lt;span class="caps"&gt;XML&lt;/span&gt; or &lt;span class="caps"&gt;JSON&lt;/span&gt; to.&lt;/p&gt;


	&lt;p&gt;Here are two examples of using the RubyURL &lt;span class="caps"&gt;API&lt;/span&gt; with HTTParty.&lt;/p&gt;


	&lt;h3&gt;RubyURL via &lt;span class="caps"&gt;JSON&lt;/span&gt; w/HTTParty&lt;/h3&gt;


	&lt;p&gt;We&amp;#8217;re going to use the &lt;code&gt;post&lt;/code&gt; method that is provided with HTTParty to send a request to &lt;code&gt;/api/links.json&lt;/code&gt;. As you can see, we&amp;#8217;re providing the original website url to the web service.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Rubyurl&lt;/span&gt;
  &lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;HTTParty&lt;/span&gt;
  &lt;span class="ident"&gt;base_uri&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;rubyurl.com&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.shorten&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="ident"&gt;website_url&lt;/span&gt; &lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;post&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/api/links.json&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:query&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:link&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:website_url&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;website_url&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt; &lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;When ran, it&amp;#8217;ll produce the following:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="constant"&gt;Rubyurl&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;shorten&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;http://github.com/jnunemaker/httparty/tree/master/lib/httparty.rb&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;inspect&lt;/span&gt;
  &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;{&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;link&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;=&amp;gt;{&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;permalink&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;=&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;http://rubyurl.com/uJVu&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;website_url&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;=&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;http://github.com/jnunemaker/httparty/tree/master/lib/httparty.rb&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;}}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Pretty simple, eh?&lt;/p&gt;


	&lt;h3&gt;RubyURL via &lt;span class="caps"&gt;XML&lt;/span&gt; w/HTTParty&lt;/h3&gt;


	&lt;p&gt;The great thing about HTTParty is that you can use &lt;span class="caps"&gt;XML&lt;/span&gt; without changing much.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Rubyurl&lt;/span&gt;
  &lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;HTTParty&lt;/span&gt;
  &lt;span class="ident"&gt;base_uri&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;rubyurl.com&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.shorten&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="ident"&gt;website_url&lt;/span&gt; &lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;post&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/api/links.xml&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:query&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:link&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:website_url&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;website_url&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt; &lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Produces the following&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_xml "&gt;&lt;span class="punct"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="tag"&gt;xml&lt;/span&gt; &lt;span class="attribute"&gt;version&lt;/span&gt;&lt;span class="punct"&gt;=\&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;1.0\&amp;quot; encoding=\&amp;quot;UTF-8\&amp;quot;&lt;/span&gt;&lt;span class="punct"&gt;?&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;link&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;website_url&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;http://github.com/jnunemaker/httparty/tree/master/lib/httparty.rb&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;website_url&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;permalink&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;http://rubyurl.com/uJVu&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;permalink&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;link&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;Closing thoughts&lt;/h3&gt;


	&lt;p&gt;So&amp;#8230; there you have it. HTTParty makes it extremely easy to interact with various web services that work over &lt;span class="caps"&gt;HTTP&lt;/span&gt;. I&amp;#8217;d encourage you all to take a few minutes to experiment with it and see what crazy ideas that come to mind during the process. :-)&lt;/p&gt;
</description>
      <pubDate>Wed, 26 Nov 2008 19:54:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:930f06ef-ac0d-48f9-b0db-2fd14e6f161b</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2008/11/26/the-httparty-has-just-begun</link>
      <category>RubyURL</category>
      <category>Ruby</category>
      <category>Programming</category>
      <category>rubyurl</category>
      <category>development</category>
      <category>tutorial</category>
      <category>gem</category>
      <category>REST</category>
      <category>rubygems</category>
      <category>code</category>
      <category>xml</category>
      <category>api</category>
      <category>json</category>
      <category>httparty</category>
      <category>http</category>
    </item>
  </channel>
</rss>
