24
There’s an API for that! Why and how to build on the IBM Connections PLATFORM Mikkel Flindt Heisterberg Senior Solution Architect and Partner OnTime® by IntraVision

There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Embed Size (px)

DESCRIPTION

"There’s an API for that! Why and how to build on the IBM Connections PLATFORM" from Social Connections VII in Stockholm, Sweden 13-14 November 2014.

Citation preview

Page 1: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Mikkel Flindt Heisterberg

Senior Solution Architect and Partner

OnTime® by IntraVision

Page 2: There’s an API for that! Why and how to build on the IBM Connections PLATFORM
Page 3: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Agenda

• Brief intro to

–IBM Connections as a PLATFORM

– iWidgets for IBM Connections

–Developing for the Activity Stream

–SPI’s and Event handlers

Mikkel Flindt Heisterberg

Twitter: @lekkimE-mail: [email protected]://lekkimworld.comhttp://slideshare.net/lekkim

Page 4: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

The IBM Connections platform

Page 5: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Widgets

Page 6: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Widgets – descriptor

<iw:iwidget id="com.example.ExampleWidget" supportedModes="view fullpage”

mode="view” lang="en" xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget"

iScope="com.example.ExampleWidget">

<iw:resource uri="http://www.example.com/ExampleWidget.js" />

<iw:resource uri="http://www.example.com/ExampleWidget.css" />

<iw:content mode="view">

<![CDATA[

<div id="_IWID_widgetContent">Loading...</div>

]]>

</iw:content>

<iw:content mode="fullpage">

<![CDATA[

<div id="_IWID_widgetContent">Loading...</div>

]]>

</iw:content>

</iw:iwidget>

Page 7: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Widgets – iScope

dojo.provide("com.example.ExampleWidget");

dojo.declare("com.example.ExampleWidget", null, {

constructor: function() {},

onLoad: function() {},

onView: function() {},

onEdit: function() {},

onFullpage: function() {},

onSearch: function() {}

});

Page 8: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Widgets – declaration

Declaratively configured using widgets-config.xml

<widgetDef defId="com.example.ExampleWidget”

url="/ExampleWidget.xml" loginRequired="true”

showInPallette=”true” primaryWidget=”false”>

<itemSet>

<item name="resourceId" value="{resourceId}" />

<item name="profilesCtx" value="{profilesSvcRef}" />

<item name="myProp" value="Abc123" />

</itemSet>

</widgetDef>

Page 9: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Widgets – iContext

• An iContext instance is set into the iScope instance• The iContext provides access to the widget markup (e.g. root

element), I/O related functions (i.e. URL rewriting), widgetattributes etc.

• The iContext is easily accessed from the iScope class usingthis.iContext

• Important functions include:– iContext.getRootElement() : DOM Element

– iContext.getElementById(id:string) : DOM Element

– iContext.getiWidgetAttributes() : ItemSet

– iContext.getUserProfile() : ItemSet

– iContext.io.rewriteURI(uri:string) : string

– iContext.iEvents.fireEvent(name:string, type:string, payload:object)

Page 10: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Loading prior to IBM Connections 5

Page 11: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Loading from IBM Connections 5

Page 12: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Loading from IBM Connections 5

http://www.youtube.com/watch?v=1GLpA604Iic

Page 13: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Activity Stream

• The following is based on my highly acclaimed(cough, cough) presentation on the Activity Stream

• Much more detail and many examples there

• See http://slideshare.net/lekkim

Mikkel Flindt Heisterberg

Twitter: @lekkimE-mail: [email protected]://lekkimworld.comhttp://slideshare.net/lekkim

Page 14: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Activity Stream

• IS– River of news – it’s like water flowing by you

– Notifications about ”stuff” happening in (other) systems – we refer to these notifications as entries

• ISN’T– A new inbox – doesn’t replace email

– A perpeptual data store – entries are deletedbased on a server defined purge interval (default is 30 days) unless saved or actionable

Page 15: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Activity Stream

• In my opinion it makes most sense to not considerthe activity stream as one single stream

• Instead think that

– Each user has his/her own (@me)

– There is a public stream (@public)

– A community may have a stream if the widget has been added by a community owner – if there’s nostream for a community posting to it will return a ”403 Forbidden”

Page 16: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Activity Stream

• You will mainly use the POST and PUT methods to send JSON data (Content-Type:

application/json) to the API

• JSON is super simple key/value data format. It has simple datatypes (strings,

numbers, booleans), objects and arrays

{

”email”: ”[email protected]”,

”niceGuy”: true,

”age”: 37,

”name”: {

”first”: ”Mikkel Flindt”, ”last”: ” Heisterberg”

},

”Connectospheres”: [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

}

Page 17: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Activity Stream{

"actor": {"id": "@me"},

"verb": "post",

"title": "Some entry title",

"updated": "2013-05-17T12:00:00.000Z",

"object": {

"title": "Some object title",

"objectType": "note",

"id": "1234567890-1234567890-1234567890"

}

}

Page 18: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Activity Stream

https://<host>/connections/opensocial/<auth>/rest/activitystreams/<user ID>/<group ID>/<application ID>/<activity ID>

Component Meaning

<auth> (optional) If using form based authentication leave this component out. Otherwise options are anonymos, basic, oauth.

<user ID> The user whose stream you’re addressing – use @me for current users stream, @public for public stream or a community ID for the stream in a community.

<group ID> The group of entries you’re addressing – use @all for all posts or options for special meaning such as @saved, @actions, @mentions. Refer for InfoCenter and resources slide for more.

<application ID> When retrieving entries this refers to the application (or ”generator”) that created the entry. All the IBM Connections app names can be used (profiles, blogs, wikis etc.) plus custom ones (e.g. ontimegc). @all used for all applications.

<activity ID> Used to reference a specific event e.g. for updating saved status.

Page 19: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Activity Stream

1. /activitystreams/@me/@all

List my (current users) entries

2. /activitystreams/@public/@all

List public stream entries

3. /activitystreams/@me/@actions

List my actionable events

4. /activitystreams/@me/@saved/blogs

List my saved events from blogs

5. /@me/@all/@all/urn:lsid:lconn.ibm.com:activitystreams.story:bdb562f…

Work with entry from my stream based on ID

* All URLs above start with

https://<host>/connections/opensocial/<auth>/rest

Also used

when creating

new entries

(e.g. POSTing)

Page 20: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Other Programming Interfaces

• SPIs are lower-level programming interfaces which may be subject to modification from release to release.

• Event SPI– The IBM Connections Event SPI allows third parties to consume event data generated by

IBM Connections.

• Seedlist SPI– Use the Seedlist service provider interface (SPI) provided with IBM Connections to

integrate your search engine with IBM Connections content.

• Service SPI– You can use the IBM Connections Service SPI to learn about the applications running in

your IBM Connections deployment.

• User SPI– You can use the IBM Connections User SPIs to access information about the users in

your IBM Connections deployment.

Page 21: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Event Handlers – declaration

Declaratively configured using events-config.xml

<postHandler enabled=”true" invoke="ASYNC" name=”MyEventHandler” class="com.example.MyEventHandler">

<subscriptions>

<subscription source="*" type="*" eventName="*"/>

<!--

<subscription source=”PROFILES" type="*" eventName=”profiles.updated"/>

<subscription source=”PROFILES" type="*" eventName=”profiles.person.photo.updated"/>

-->

</subscriptions>

</postHandler>

Page 22: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Event Handlers – implementation

import com.ibm.connections.spi.events.EventHandler

public class MyEventHandler implements EventHandler {

public void init() throws EventHandlerInitException {}

public void destroy() {}

public void handleEvent(Event event) throws EventHandlerException {

String eventName = event.getName(); // event name

Person actor = event.getActor(); // person that triggered event

// look at the event name

if (event.getName().equals("profiles.person.photo.updated")) {

// a profile photo was updated

this.doEventProfilesPhotoUpdated(event);

} else if (event.getName().equals("profiles.updated")) {

// a profile was updated

this.doEventProfilesUpdated(event);

}

}

}

Page 23: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Event Handlers – summary

• Make event handlers asynchroneous

• What happens if your event handler fail?

• What happens if the recipient of the event (3rd party API) fail?

• Be defensive – consider what happens ifevents are lost

Page 24: There’s an API for that! Why and how to build on the IBM Connections PLATFORM

Thank you

• Presentations on slideshare.net – this one is coming

• Contact me – often times more than willing to help – I’ll let you know when it’s a project

Mikkel Flindt Heisterberg

Twitter: @lekkimE-mail: [email protected]://lekkimworld.comhttp://slideshare.net/lekkim