Новости‎ > ‎

ProstoDiary: OpenAPI + JSON-LD

Отправлено 14 июн. 2020 г., 23:35 пользователем Deni Baskovsky   [ обновлено 14 июн. 2020 г., 23:47 ]
C обновлением Public API v5 используется новый механизм передачи сообщений. 

Идея: совместить текущий JSON RPC 2 с JSON-LD для будущего оформления всего этого добра через стандарт OpenAPI.

Суть: любой внешний ассистент сможет загружать/выгружать валидный JSON и декодировать его результаты для наполнения собственной онтологии API используя schema.org. Тем самым, появится типизация параметров для генерации новых запросов.

Плюсы: возможность более четкого понимания клиент-серверного общения; будущая возможность обучения ИИ для клиент-серверного взаимодействия.

Минусы: дополнительная нагрузка на передачу и парсинг данных. 

Пример:
curl -X POST \
-H "Verification: $MARKETPLACE_SIGN" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/schema+json" \
--data '{"jsonrpc":"2.0","method":"ping","params": $ACTION_JSONLD,"id":1}' \
http://127.0.0.1:9000/api

Где MARKETPLACE_SIGN - ключ подключенного ассистента;
JWT_TOKEN - токен приложения;
ACTION_JSONLD - вида:
{
'@context': {
      mainEntity: 'schema:mainEntity',
      schema: 'http://schema.org/',
      agent: 'schema:agent',
      name: 'schema:name',
      startTime: 'schema:startTime',
      object: 'schema:object',
      target: 'schema:target',
      result: 'schema:result',
      actionApplication: 'schema:actionApplication',
      subjectOf: 'schema:subjectOf',
      abstract: 'schema:abstract',
      description: 'schema:description',
      instrument: 'schema:instrument',
      encodingFormat: 'schema:encodingFormat',
      identifier: 'schema:identifier',
      provider: 'schema:provider',
      participant: 'schema:participant',
      value: 'schema:value',
      url: 'schema:url',
      email: 'schema:email',
      geo: 'schema:geo',
      addressCountry: 'schema:Country',
      addressLocality: 'schema:Text',
      addressRegion: 'schema:Text',
      streetAddress: 'schema:Text',
      postalCode: 'schema:Text',
      address: 'schema:address',
      latitude: 'schema:latitude',
      longitude: 'schema:longitude'
    },
    '@id': 'https://t.me/chat#100326480',
    agent: { '@type': 'Organization', email: 'tg@gotointeractive.com' },
    participant: { '@type': 'Organization', email: 'posrednik@example.com' },
    startTime: '2020-06-15',
    instrument: {
      '@type': 'Thing',
      name: 'Core',
      url: 'https://github.com/gotois/core'
    },
    target: { '@type': 'EntryPoint', actionApplication: [Object] },
    '@type': 'AllocateAction',
    name: 'Ping',
    result: {
      '@type': 'CreativeWork',
      encodingFormat: 'text/plain',
      mainEntity: [Array]
    },
    'https://w3id.org/security#proof': { '@graph': [Object] }
}
Comments