Protocol и Schema

Техническая документация протокола и схемы данных

Обзор протокола

Quip Messenger использует современный протокол обмена сообщениями, основанный на WebSocket для реального времени и REST API для стандартных операций. Протокол разработан с учетом безопасности, производительности и масштабируемости.

Архитектура протокола

Протокол Quip Messenger состоит из нескольких уровней:

  • Транспортный уровень - WebSocket для реального времени, HTTP для REST API
  • Уровень сообщений - структурированные JSON сообщения
  • Уровень безопасности - шифрование TLS/SSL и токены доступа
  • Уровень данных - схемы данных для всех типов сообщений

WebSocket протокол

Для обмена сообщениями в реальном времени используется WebSocket соединение. После установления соединения клиент отправляет сообщение аутентификации, после чего может отправлять и получать сообщения.

Формат сообщений WebSocket

{
  "type": "message_type",
  "data": {
    // данные сообщения
  },
  "timestamp": "2024-12-15T10:30:00Z"
}

Типы сообщений

  • auth - аутентификация
  • message - текстовое сообщение
  • media - медиа файл
  • typing - индикатор набора текста
  • read - подтверждение прочтения
  • presence - статус пользователя
  • call - сигналы видеозвонка

REST API протокол

Для стандартных операций (получение истории сообщений, управление профилем, создание групп) используется REST API. Все запросы должны содержать заголовок авторизации.

Формат запроса

POST /api/v1/messages/send
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "receiver_id": 123,
  "message": "Текст сообщения",
  "type": "text"
}

Формат ответа

{
  "status": "success",
  "data": {
    "message_id": 456,
    "created_at": "2024-12-15T10:30:00Z"
  }
}

Схемы данных

Все данные в Quip Messenger структурированы согласно определенным схемам. Ниже приведены основные схемы данных.

Схема пользователя

{
  "id": 123,
  "username": "user@example.com",
  "full_name": "John Doe",
  "profile_picture": "avatar.jpg",
  "status": "online",
  "last_seen": "2024-12-15T10:30:00Z",
  "created_at": "2024-01-01T00:00:00Z"
}

Схема сообщения

{
  "id": 456,
  "sender_id": 123,
  "receiver_id": 789,
  "message": "Текст сообщения",
  "type": "text",
  "media_url": null,
  "created_at": "2024-12-15T10:30:00Z",
  "read_at": null,
  "edited_at": null
}

Схема группы

{
  "id": 101,
  "name": "Моя группа",
  "description": "Описание группы",
  "avatar": "group_avatar.jpg",
  "creator_id": 123,
  "members": [123, 456, 789],
  "created_at": "2024-12-15T10:30:00Z"
}

Схема канала

{
  "id": 202,
  "name": "Мой канал",
  "description": "Описание канала",
  "avatar": "channel_avatar.jpg",
  "creator_id": 123,
  "is_private": false,
  "subscribers_count": 1000,
  "created_at": "2024-12-15T10:30:00Z"
}

Типы сообщений

Quip Messenger поддерживает различные типы сообщений:

  • text - текстовое сообщение
  • image - изображение
  • video - видео
  • audio - аудио файл
  • voice - голосовое сообщение
  • document - документ
  • location - геолокация
  • contact - контакт

Безопасность

Безопасность протокола обеспечивается несколькими механизмами:

  • TLS/SSL шифрование - все соединения защищены TLS 1.3
  • Токены доступа - JWT токены для аутентификации
  • Шифрование сообщений - end-to-end шифрование для конфиденциальных чатов
  • Валидация данных - все входящие данные валидируются
  • Rate limiting - ограничение частоты запросов

Версионирование

Протокол версионируется для обеспечения обратной совместимости. Текущая версия протокола: v1. При выходе новых версий старые версии будут поддерживаться в течение минимум 12 месяцев.

Примеры использования

Ниже приведены примеры использования протокола для различных сценариев.

Отправка текстового сообщения через WebSocket

{
  "type": "message",
  "data": {
    "receiver_id": 789,
    "message": "Привет!",
    "type": "text"
  },
  "timestamp": "2024-12-15T10:30:00Z"
}

Отправка медиа файла

{
  "type": "media",
  "data": {
    "receiver_id": 789,
    "media_type": "image",
    "media_url": "https://example.com/image.jpg",
    "caption": "Описание изображения"
  },
  "timestamp": "2024-12-15T10:30:00Z"
}

Индикатор набора текста

{
  "type": "typing",
  "data": {
    "receiver_id": 789,
    "is_typing": true
  },
  "timestamp": "2024-12-15T10:30:00Z"
}

Дополнительные ресурсы

Для получения более подробной информации о протоколе и схемах данных, пожалуйста, обратитесь к документации API или свяжитесь с нашей службой поддержки.