API thoughts

Some thoughts on the Social API...

At the core, the majority of the social APIs reviewed reduce down to a
handful of relatively simple concepts. Let me see if I can effectively
classify them.

1. We have any number of Social Artifacts. These are distinct
resources that represent various kinds of Things: People, Groups,
Organizations, Various kinds of content, Responses of various types,
etc. If you look at the Activity Streams Vocabulary, you can see that
we already have many (if not most) of these Artifacts already
identified.

2. There are a couple of specific Social Artifact that are considered
central to social systems: that of an Identity and a Profile. The
Identity represents the authenticated individual. The Profile
represents a description of the Individual. Secondary to the Identity
is the Persona. A Persona is some scoped aspect of the Identity. For
example, "jasnell@us.ibm.com" represents one of my Persona's.
"jasnell@gmail.com" represents another, as does
"http://www.twitter.com/jasnell". These are separate Personas mapped
to the same Identity. A Profile can describe an Identity or a Persona.
Persona's are themselves a type of Identity. We can formalize this
using:

  :Identity a owl:Class .

  :Persona a owl:Class ;
    rdfs:subClassOf :Identity .

  :Profile a owl:Class .

  :hasPersona a owl:ObjectProperty ;
    rdfs:domain :Identity ;
    rdfs:range :Persona .

  :describes a owl:ObjectProperty ;
    rdfs:domain :Profile ;
    rdfs:range :Identity ;
    owl:inverseOf :describedBy .

  :describedBy a owl:ObjectProperty ;
    rdfs:domain :Identity ;
    rdfs:range :Profile ;
    owl:inverseOf :describes .

3. The various kinds of Actor's we have defined as part of the
Activity Streams Vocabulary are all types of Identities.

4. All of the other Social Artifacts are owned by an Identity.

5. All Social Artifacts can be organized into Collections.

6. Collections are themselves a type of Social Artifact.

7. Identity, Persona and Profile are all types of Social Artifacts
that can be owned by an Identity (an Identity can either own itself or
be owned by another Identity).

Given these presumptions, the Social API needs to provide a means of
discovering basic information about an Identity, including:

A. Discovery of any Persona's associated with the Identity
B. Discovery of any Profile's describing the Identity
C. Discovery of any Social Artifacts owned by the Identity

Further, the Social API ought to allow the owner of a social artifact to:

D. Create, Modify or Delete the Artifact
E. Permit other Identities to View the Artifact
F. Permit other Identities to Create, Modify or Delete the Artifact
G. Permit any Identity to Perform Actions relative to the Artifact
(Like, Unlike, Share, Comment, Annotate, etc)
H. Provide a means of recording which Actions have been performed
relative to an Artifact.

There are at least two key flows to consider:

1. I have an Identity, I need to discover information about this
Identity, potentially including what Artifacts are owned by this
Identity and what Actions I can take on those Artifacts. (e.g. is
"acct:joe@example.org" the same as "http://example.org/joe" ? Does
"joe" have a blog? Can I comment on those blog entries? etc)

2. I have an Artifact, I need to discover what Identity owns this
artifact and what Actions I can take on the Artifact. (e.g. can I
"Like" it? can I "Share" it? can I "Comment" on it? etc)

>From here it should be straight forward to construct an API. I'll post
a few thoughts on that a bit later on.

- James

Received on Wednesday, 28 January 2015 17:29:40 UTC