<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://experience.fellowshipone.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Intelligent Design : Payment Gateway</title><link>http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/Payment+Gateway/default.aspx</link><description>Tags &amp; Topics: Payment Gateway</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>Fellowship One APIs - Past, Present, and Future</title><link>http://experience.fellowshipone.com/blogs/intelligentdesign/archive/2009/02/25/fellowship-one-apis-past-present-and-future.aspx</link><pubDate>Wed, 25 Feb 2009 22:42:00 GMT</pubDate><guid isPermaLink="false">87eee960-b871-44cb-8a98-02588a960c04:13823</guid><dc:creator>FTProductDev</dc:creator><slash:comments>2</slash:comments><comments>http://experience.fellowshipone.com/blogs/intelligentdesign/comments/13823.aspx</comments><wfw:commentRss>http://experience.fellowshipone.com/blogs/intelligentdesign/commentrss.aspx?PostID=13823</wfw:commentRss><description>&lt;p&gt;With the up coming Fellowship One RESTful API we wanted to take the some time and look back on our other two APIs and reflect on what we intended them to be and what they actually became.&amp;nbsp; We looked at the their interfaces, authentication, resources, versioning, protocols, logging mechanisms, "debuggability", etc...&amp;nbsp; What we found out was that in the world of "API" nothing ever ends up like you intend.&lt;br&gt;&lt;br&gt;&lt;span style="font-weight:bold;"&gt;Fellowship One Data Exchange&lt;/span&gt;:&amp;nbsp; A very powerful XML &lt;a href="http://en.wikipedia.org/wiki/Remote_procedure_call"&gt;RPC API&lt;/a&gt; that was specifically designed to address massive data import and export needs.&amp;nbsp; It's ridged pinpoint interface allow users to build simple data presses, which move large amounts of data between disparate systems.&amp;nbsp; A few years into the product's life we introduced the ability to do synchronous transactions - a decision that completely changed many consumer's usage patterns.&lt;br&gt;&lt;br&gt;Serendipity
stepped in and instantly consumers began to use this brute force
application on websites to perform anything&amp;nbsp; from profile updates to
seamless login patterns.&amp;nbsp; After seeing how much the community found value in the login metaphor we've published docs and given presentations on the best practices of this approach. We now have 3rd parties writing web
applications and hosting web sites that do a myriad of things.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Being a &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;SOAP &lt;/a&gt;based .NET web service, consuming Data Exchange required the language to either have a library that constructs SOAP envelopes or that the developer understand that protocol and be able to construct a SOAP message manually.&lt;/p&gt;&lt;p&gt;Another characteristic of this API are the logging and response mechanisms; both were intended to only be used / interpreted by the consuming application.&amp;nbsp; Its authentication is based on simple credential / key maps.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;Fellowship One Payment Gateway&lt;/span&gt;: A .NET SOAP based web service that gives churches the ability to submit giving / e-commerce transactions.&amp;nbsp; The interesting thing about this service is that it was originally developed for internal consumption only and later opened up to external consumers for book stores, tithe applications, etc... another decision point that changed the way an established API was used.&lt;/p&gt;&lt;p&gt;Payment Gateway answered a changeling question of: "how do I get all of my billing and payments to go through one channel and be able to report on the transactions going through that channel?"&amp;nbsp; Much like Data Exchange, we saw it consumed in ways we couldn't have imagined.&lt;/p&gt;&lt;p&gt;We used credential and signed key authentication for this API.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;Fellowship One RESTful API:&lt;/b&gt; A REST based web application that uses several open protocols and patterns to provide consumers access to secure resources. &amp;nbsp;&lt;/p&gt;&lt;p&gt;STANDARDS, PROTOCOLS, and PATTERNS - nothing else.&amp;nbsp; Looking back, we could see where their is major value in sticking with something that is "tried and true."&amp;nbsp; If we could use &lt;u&gt;web based&lt;/u&gt; patterns and protocols for a &lt;u&gt;web based&lt;/u&gt; API we could not only get instant adoption but gain the efficiencies and effectiveness of technologies that "just work."&amp;nbsp; &lt;/p&gt;&lt;p&gt;This next generation of API is, ironically based on foundations that have been in place for years. &amp;nbsp; We chose &lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;MVC &lt;/a&gt;as the application architecture, &lt;a href="http://oauth.net/core/1.0/"&gt;OAUTH&lt;/a&gt; protocol for Authentication, &lt;a href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm"&gt;REST&lt;/a&gt; and &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html"&gt;HTTP 1.1&lt;/a&gt; as the transport.&amp;nbsp; This API should give web developers an tool where all they have to think about is what to do with the resources.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Thank you for partnering with us over the years; we have a lot of fun stuff up ahead and we hope to see you at the &lt;a href="http://www.dynamicchurchconference.com/developers"&gt;Dev track&lt;/a&gt; @ DC09!&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://experience.fellowshipone.com/aggbug.aspx?PostID=13823" width="1" height="1"&gt;</description><category domain="http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/MVC/default.aspx">MVC</category><category domain="http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/development/default.aspx">development</category><category domain="http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/API/default.aspx">API</category><category domain="http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/DataExchange/default.aspx">DataExchange</category><category domain="http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/REST/default.aspx">REST</category><category domain="http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/RESTful+API/default.aspx">RESTful API</category><category domain="http://experience.fellowshipone.com/blogs/intelligentdesign/archive/tags/Payment+Gateway/default.aspx">Payment Gateway</category></item></channel></rss>