Наконец-то спецификация Activity Streams 2.0 приближается к стадии рекомендации W3C Candidate. Надеюсь, CR опубликует где-нибудь на следующей неделе.

Напоминаем, что Activity Streams - это синтаксис JSON для описания Activity (социального или другого). Например, выражение «Криста добавила фотографию в альбом» можно представить с помощью JSON, например:

{
  "@context": "http://www.w3.org/ns/activitystreams",
  "actor": {
    "id": "http://krista.example.org",
    "name": "Krista",
    "type": "Person"
  },
  "type": "Add",
  "object": {
    "id": "http://photos.example.org/id/123abc",
    "type": "Image",
    "name": "Picture of my Cat",
    "url": "http://photos.example.org/id/123abc.png"
  },
  "target": {
    "id": "http://albums.example.org/id/cat-pics",
    "name": "My Cat Pics",
    "url": "http://albums.example.org/id/cat-pics"
  }
}

Спецификация Activity Streams 2.0 состоит из двух частей:

Спецификация Core описывает сериализацию JSON, тогда как спецификация Vocabulary определяет типы объектов и свойства, которые могут быть представлены.

Что нового в AS 2.0?

Первая версия спецификации Activity Streams была опубликована в 2011 году по адресу http://activitystrea.ms/specs/json/1.0/. Версия 2.0 представляет собой значительную эволюцию, которая обеспечивает:

  • Улучшенная интернационализация с явным языковым контекстом и поддержкой двунаправленного текста;
  • Улучшенная расширяемость за счет поддержки JSON для связанных данных;
  • Опционально упорядоченные коллекции и встроенная поддержка разбиения по страницам;
  • Поддержка непереходных (или безобъектных) действий (например, действий, в которых актер также является объектом, например «Джо путешествует»);
  • Первоклассная модель Link;
  • 28 встроенных общих типов Активностей;
  • 13 встроенных общих типов объектов, включая тип Tombstone, используемый для представления удаленных объектов, и тип отношения, используемый для представления отношений в социальных сетях;
  • Встроенный таргетинг на аудиторию (ранее это было расширением Activity Streams 1.0);
  • Встроенные геотеги;
  • Возможность идентифицировать как источник, так и место назначения действия (например, «Аарон переместил документ из папки A в папку B»);
  • Умение описывать результат Деятельности;
  • И многое другое…

Как я могу его использовать?

Если вы используете Node.js, то можете использовать созданную мной реализацию JavaScript. Просто сделайте:

$ npm install activitystrea.ms

Модуль поддерживает создание и потребление объектов Activity Streams 2.0, но сам по себе не выполняет никакого сохранения. Чтобы создать действие:

const as = require('activitystrea.ms');
const activity = as.add()
  .actor(as.person()
           .id('http://krista.example.org')
           .name('Krista'))
  .object(as.image()
            .id('http://photos.example.org/id/123abc')
            .name('Picture of my Cat')
            .url('http://photos.example.org/id/123abc.png'))
  .target(as.object()
            .id('http://albums.example.org/id/cat-pics')
            .name('My Cat Pics')
            .url('http://albums.example.org/id/cat-pics'))
  .get();

Чтобы сериализовать объект `activity` как JSON, вызовите метод` write () `или` prettyWrite () `:

activity.prettyWrite((err, doc) => {
  if (err) throw err;
  console.log(doc); // doc will be a string
});

Обратите внимание, что методы write () и prettyWrite () являются асинхронными только потому, что есть некоторые вещи JSON-LD, которые требуют асинхронной обработки.

Анализировать сериализованное действие очень просто. В следующем примере показан синтаксический анализ с использованием потока:

const as = require('activitystrea.ms');
const fs = require('fs');
const AS2Stream = as.Stream;
const path = require('path');
const through = require('through2');
fs.createReadStream(path.resolve(__dirname,'test.json'))
  .pipe(new AS2Stream())
  .pipe(through.obj((obj,encoding,callback) => {
    console.log(obj.type);
    console.log(obj.name);
}));

Просмотрите модули activitystrea.ms README.md для получения дополнительных сведений об API.