300 likes | 303 Views
Learn how Service-Oriented Architecture (SOA) and XML-based Web services can help you provide better content delivery and do more for your library patrons. Discover the benefits, implementation methods, and examples of mashups using Web services.
E N D
Service-driven content delivery: Do more for your patrons through Web services Marshall Breeding Director for Innovative Technology and Research Vanderbilt University http://staffweb.library.vanderbilt.edu/breeding
Service Oriented Architecture • Increasingly becoming the preferred architecture and framework for Web programming • A key supporting technology for Web 2.0 • Infrastructure for behind-the-scenes communication among applications. • Data exchange, conversions, lookups, etc. • Appropriate for portal integration, e-commerce, distributed applications.
http://www.w3.org/TR/2002/WD-ws-arch-20021114/ SOA Architecture diagram
An XML oriented Architecture • All the components of SOA are expressed in XML • Definition of a service • Directories of services • Messages involved in the operation of the service
Roles • Service provider • Technically more challenging • Service Requestor • Simple to implement
Adoption of Web services • Widespread use in many industries • Mainstream programming approach • Basis for Microsoft .NET technologies • SOAP support available for all common Web programming environments • Perl: SOAP::Lite • SOA Architecture Components
WDSL: Web Service Description Language • The definition, expressed in XML, of how the Web service operates and the data structures involved
SOAP: Simple Object Access Protocol • A transport and encapsulation protocol • The “envelope” that carries the messages involved in an XML Web service • Similar to RPC (Remote procedure calls)
UDDI: Universal Description, Discovery and Integration • A directory architecture that describes the services available Provides an automated mechanism for an application to know where to go to find a web service. • Web service implementations
Benefits of Web services • Easy way to add e-commerce capabilities to Web site • Leverage services offered by other providers for the benefit of your users.
Web Service implementation methods • REST • Representational State Transfer • Easier, more common approach • SOAP • Used in more complex environments • Requires more set-up and infrastructure
Rest-like Example: Google search http://www.google.com/search? q=marshall+breeding& hl=en& safe=off
RSS as an example of REST • http://www.librarytechnology.org/rss
REST Example: SRU http://law-library2.rutgers.edu/SRU/srucql.pl? query="New+Jersey"& startRecord=1& maximumRecords=10& collection=lawlib& version=1.1& operation=searchRetrieve& recordSchema=dc
Example: Google API • http://api.google.com/GoogleSearch.wsdl • http://www.google.com/apis/reference.html • Perl example for implementing the Google Web services
Example print"Top library automation sites according to Google";# if key is not provided, GoogleSearchService looks in $ENV{HOME},# or in the location of GoogleSearchService.pm for googlekey.txtmy $key = ‘your google API goes here';my $google = new GoogleSearch();my $return;use GoogleSearch;my $search = 'Library Technology';$return = $google-> doGoogleSearch(query => $search,start => 0,maxResults => 10,restrict => 'xml',)->result();foreachmy $entry (@{$return->{'resultElements'}}) {print "";print "<a href=\" $entry->{URL}\">$entry->{title}\n";print "$entry->{snippet}\n";print "\n";}
Mashups • A new resource based on content or services from multiple sources • Usually created through Web services • Many examples
Recipe • Ingredients • Information about the library from the local database • Name, photo, street address • Latitude and Longitude from an external Web service • USGS Web service • Map, positioning and display services from Google
Step 1. Launch map • Create button to launch a new window for the map • Pass Library name, address and photo location: sub ViewMap { local ($Library,$StreetAddress,$libphoto) = @_; print "<input type=\"button\" value=\"view street map\" onclick=\"newWindow( \'lwc-viewmap.pl $sessionstring& address=$StreetAddress &library=$Library& libphoto=$libphoto \',\'window2\')\" $buttonstyle />\n"; }
Step 2. Turn address into Geocode data my $d = get( http://rpc.geocoder.us/service/rest?address=$fields{'address'} ); $d =~ /geo:long>([^< ]*).*?geo:lat>([^< ]*)/is; $lat = $2;
Step 3. Invoke Google MAP API Use pre-established API key Fetch the correct map specifying size and location Place the marker on the map Label the marker Create and populate info window
Call the subroutine &MapScript("$lat","$long","$fields{'libphoto'}");
Invoke the subroutine sub MapScript { local($lat,$long,$photo) = @_; local $libphototext = ""; $libphototext = "+ \"<br /><img src=\\\"$imageserver//\" + libphoto + \".jpg\\\" height = \\\"100\\\">\"" if (length($photo) > 0); print "<script type=\"text/javascript\">\n"; print " //<![CDATA[\n"; print "\n"; print " function createMarker(point, name, address, libphoto) {\n"; print " var marker = new GMarker(point);\n"; print " GEvent.addListener(marker, \"click\", function() {\n"; print " marker.openInfoWindowHtml(\"<strong>\" + name + \"</strong><br />\" + address $libphototext);\n"; print " });\n"; print " return marker;\n"; print " }\n"; print " function load() {\n"; print " if (GBrowserIsCompatible()) {\n"; print " var map = new GMap2(document.getElementById(\"map\"));\n"; print " map.setCenter(new GLatLng($lat, $long), 15);\n"; print " var point = new GLatLng($lat,$long);\n"; print " map.addOverlay(createMarker(point,\"$fields{'library'}\",\"$fields{'address'}\",\"$fields{'libphoto'}\"));\n"; print " }\n"; print " }\n"; print "\n"; print " //]]>\n"; print " </script>\n"; }