Friday, February 01, 2008

RSSBus Feed Server is primarily an infrastructure to host simple web services. It allows one to quickly write scripts that take HTTP requests as input and produce simple feeds as a response. The extensive number of Connectors makes it possible to access data from many different sources. Today we will share our thoughts on some of the features that simplify the creation of service oriented architectures based on RSSBus.

Before we delve deeper into various options, let us remind ourselves of some guiding principles. We would like the solution to be simple, quick to implement, and benefit from the core promises of service oriented architectures. In doing so our solution should maintain:

  • loose coupling: making sure that a service does not depend on implementation details of another service,
  • reusability: consistent use of simple and extensible modules, patterns and formats, and
  • composability: ability to create new services by assembling composite services.  

RSSBus Connectors

RSSBus Connectors are .NET assemblies (modules) that are dynamically discovered by the RSSBus Engine upon installation. They take advantage of the .NET Framework and are extremely flexible in their capabilities. Each Connector is composed of one or more operations for accessing data from a specific data source.  Operations include only two functions, an Info function that describes the allowed inputs and outputs, and an Exec function that does the work.  The RSSBus API also allows an operation to call another operation, facilitating composability. Partitioning data access and business logic into individual operations and formally defining their service contract can help you implement new Connectors quickly in a predictable, extensible way.  RSSBus Feed Server ships with 70 Connectors to common Internet and Enterprise Data Sources, and you can easily create new Connectors using a simple API and .NET development tools (see the example in the White Paper).

RSBScript

The operations included in RSSBus Connectors are written to accept a variety of HTTP requests and host configuration inputs (for example the name of a SQL table to access or the username of a POP mailbox to read) and they can produce a rich variety of response output.  RSSBus makes it easy to configure operation inputs and outputs by wrapping those calls inside RSBScript.  Besides manipulating input and output, the script can be used to define user and role based security, manipulate response headers and data format, enhance performance with built-in caching, and more.  RSBScript allows invocation of one or more local or remote operations, and also has a number of simple control logic features.  RSBscript makes it easy for an administrator publishing the services to make the deployment decisions, while relying on developers to build core data access functionality within the Connectors.

RSBScript can also call other programming languages for implementation of more extensive business logic. RSSBus currently supports Python, Tcl, VBscript, Jscript and PowerShell, through an extensible API that allows easy creation of plug-ins for other languages.

RSSTools and Client Side Processing

Though RSS feeds can be consumed by RSS readers, email clients, and browsers; feeds generated with RSSBus also have data points that other programs can use. The format of data feeds generated by RSSBus is very simple, and most programming languages with basic XML libraries can easily work with them. To make this even easier we supply a set of tools for common development technologies. The ability to compute with feeds on the client side makes it possible to publish services that are suitable for a broader audience.

In addition to facilitating client side processing of feeds, RSSBus can alter the service response using RSSBus Feed Formatters. It is a simple matter to present the response of a service as HTML, CSV (comma-separated values), ATOM, JSON, etc, using existing feed formatters.  These formatters can be used by supplying parameters like (@json, @html, @csv) in the HTTP request. Moreover, extensibility via the Feed Formatter API makes it possible to expand the existing set of response formats.

To summarize: what we have laid out in this post are some of the options RSSBus offers to move towards a more service oriented architecture. The benefits of SOA are well known, and we hope we can help reduce the costs and accelerating uptake of SOA.  There will be more details in future posts.

#   
Friday, January 11, 2008

The API's on the web have simplified in the recent past. There are more REST-centric APIs in the public domain than ever before. Various services from Google and Amazon are a good example. Apart from being RESTful these services have a simple XML based response format. The xmlHttp operation, included in XmlOps, makes it easy to access such services and represent their results as RSS, HTML, an Excel spreadsheet, or any other output format supported by RSSBus.

Today we show an example of using xmlHttp to access the Amazon ECS service. The XmlOps connector includes this script as a demo.

<!-- Amazon Books Feed -->
<
rsb:info title="Amazon Book Search"
 
description="Use the Amazon web-services API to search for a book.">
  <
input name="query" req="true" desc="The search text." 
       
default="Harry Potter" />
</
rsb:info>
   

<!--
Create the input URL -->
<
rsb:set attr="in.url" value="http://webservices.amazon.com/onca/xml"/>
<
rsb:set attr="in.url" value="[in.url]?Service=AWSECommerceService"/>
<
rsb:set attr="in.url" value="[in.url]&SubscriptionId=0E8MHMPRK05NWG9AJ8G2"/>
<
rsb:set attr="in.url" value="[in.url]&Operation=ItemSearch"/>
<
rsb:set attr="in.url" value="[in.url]&SearchIndex=Books"/>
<
rsb:set attr="in.url" value="[in.url]&ResponseGroup=Large"/>
<
rsb:set attr="in.url" value="[in.url]&Title=[query | urlencode ]"/>
      
<!--
  Specify the item XPath. An item is pushed each time this path is

  encountered in the XML response.

-->

<
rsb:set attr="in.item" value="/ItemSearchResponse/Items/Item"/>
   
<!-- Specify the XPath of the attributes to be pushed in an item. -->
<
rsb:set attr="in.attr#" value="ASIN"/>
<
rsb:set attr="in.attr#" value="DetailPageURL"/>
<
rsb:set attr="in.attr#" value="MediumImage/URL"/>
<
rsb:set attr="in.attr#" value="ItemAttributes/Title"/>
<
rsb:set attr="in.attr#" value="ItemAttributes/Author"/>
<
rsb:set attr="in.attr#" value="ItemAttributes/NumberOfPages"/>
<
rsb:set attr="in.attr#" value="ItemAttributes/ISBN"/>
<
rsb:set attr="in.attr#" value="ItemAttributes/PublicationDate"/>
<
rsb:set attr="in.attr#" value="ItemAttributes/Publisher"/>
<
rsb:set attr="in.attr#" value="ItemAttributes/ReadingLevel"/>
<
rsb:set attr="in.attr#"
       
value="ItemAttributes/ListPrice/FormattedPrice"/>
      

<!--
Use xmlHttp to get the results  -->
<
rsb:call op="xmlHttp" in="in" out="output" >
  <
rsb:set attr="rss:link" value="[DetailPageURL]"/>
  <
rsb:set attr="rss:guid" value="[ASIN]"/>
  <
rsb:push title="[Title]">
    <
a href="[DetailPageURL]">
      <
img src="[URL]" alt="[Title]"/>
    </
a> <br/>
    Author: [Author | implode(',') ]
<br/>
    Pages: [NumberOfPages | def('Unknown')]
<br/>
    Price: [FormattedPrice | def('Unknown')]
<br/>
    ISBN: [ISBN | def('Unknown')]
<br/>
    Publication Date: [PublicationDate | def('Unknown')]
<br/>
    Publisher: [Publisher | def('Unknown')]
<br/>
    Reading Level: [ReadingLevel | def('Unknown')]
<br/>
    <
hr>
    </
rsb:push>
</
rsb:call>

In this template we use xmlHttp to call the Amazon ECS service and parse the response. We first create the request URL by appending query string parameters, and then specify the "item" and "attr#" parameters to parse the response. XmlHttp uses the Xpath notation to specify locations of interest in the response XML. The "item" xpath specifies the xpath for an item (an item is produced in the resulting feed each time this xpath is seen), and the "attr#" specify the attributes that should be present in the items of the resulting feed. The names of the attributes in the item are the same as the name of the XML elements in the response. This can be changed by using the map input parameter. The xmlHttp operation also allows you to specify the HTTP method (GET, PUT, POST and DELETE), pick a file to post, and specify HTTP headers, among other things needed to use simple XML API's.


Downloads: XmlOps

#   
Friday, January 04, 2008

jolt.jpgWe are proud to announce that RSSBus Feed Server has been nominated as a finalist for the upcoming 18th Annual Jolt Product Excellence Awards (www.joltawards.com) in the ‘Web Development Tools’ category.   The Jolt awards is widely considered the “Oscar's of the software industry”, recognizing only the most innovative, trend-making, and ahead-of-the-curve software solutions.  The entire RSSBus team feels honored to be considered for this highly prestigious industry award.
 
Stay tuned, winners will be announced March 5 at SDWest in Santa Clara, CA.

#