Lalaji,

#5) The handlers will catch any request to the social APIs, including REST 
requests, JavaScript requests (via a gadget), or RPC requests.  This separates 
the back-end service from the request mechanism used to interact with the 
service (REST, JavaScript, RPC).  The handler's service path is registered with 
the system via the @Service tag at the top of the Handler class (e.g. 
@Service(name = "activitystreams", 
path="/{userId}+/{groupId}/{appId}/{activityId}+")).  The handler is then 
registered in social/core/config/SocialApiGuiceModule.java.  Last, bind the 
service provider interface (e.g. ActivityStreamService) to an implementing 
class within social/sample/SampleModule.java.

#6) The JSON database has been in use since before I joined the project.  My 
educated guess for its use is simplicity.  Shindig reads from a simple 
JSON-based datastore to illustrate sample usage.  The expectation is providers 
will re-implement the social services using a bone fide database.  It's easy to 
interact with this database for development purposes.  It's also easy to 
distribute and run without dependencies on a third party DB provider that must 
be started/stopped, etc.

#7) Since the Activity Streams service is accessible as a REST end point, you 
may surface this data in which ever way you find most convenient and 
appropriate.  You can use a server-side request to the Activity Stream 
end-point to populate static/dynamic HTML.  You may also hit the end-point 
using an XHR request in JavaScript.

The advantage of using an OpenSocial gadget is the OpenSocial APIs.  It's very 
convenient to say "osapi.activitystreams.get(…)" or 
"osapi.activitystreams.create(…)" directly in a gadget, as opposed to manually 
handling a REST exchange using server-to-server or XHR.  In addition, 
OpenSocial gadgets are portable across OpenSocial containers, allowing your 
application to be surfaced in a variety of environments (including a fancy 
embedded experience).

Hope this helps,
- Eric W.

Reply via email to