15. Спецификация модуля «BLOB-адаптер»

15.1. Запрос на считывание BLOB

Настоящая спецификация определяет формат обмена электронными сообщениями через BLOB-адаптер. Описывает возможность запроса на считывание BLOB-объект по полученной ссылке, получения успешного ответа на чтение содержимого BLOB или ошибки, в случае невозможности считывания, с описанием причины ошибки.

Топик

Назначение

blob.rq

Запросы на считывание BLOB’а по ссылке.

blob.rs

Содержимое BLOB’а (ответ на запрос).

blob.err

Сообщения об ошибке считывания.

Для строковых параметров используется кодировка UTF-8.

15.1.1. blob.rq

blob.rq - Топик запросов на получение бинарных данных по полученной ранее ссылке.

Структура сообщения

datamartBlobRequestMessage:
  description: Запрос бинарных данных по ссылке
  schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
  bindings:
    kafka:
      key:
        type: string
        format: uuid
        description: Уникальный идентификатор подзапроса
  headers:
    type: object
    properties:
      REQUEST_ID:
        description: Идентификатор запроса
        type: string
      AGENT_CONSUMER_ID:
        description: Идентификатор агента потребителя
        type: string
      MESSAGE_TYPE:
        description: Тип сообщения
        type: string
        const: DatamartBlobRequest:0.1
  payload:
    $ref: '#/components/schemas/datamartBlobRequest'
  examples:
    - name: getBlobDataRequest
      summary: Запрос бинарных данных по ссылке
      headers:
        REQUEST_ID: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
        AGENT_CONSUMER_ID: agent-fias
        MESSAGE_TYPE: DatamartBlobRequest:0.1
      payload:
        requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
        queryRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
        reference:
          subRequestId: 4cbb11d6-47de-4928-953f-47dfa6c6b310
          path: reference

Avro-схема сообщения

datamartBlobRequest:
  schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
  type: record
  name: BlobRequest
  namespace: datamart.blob
  fields:
    - name: requestId
      description: Уникальный идентификатор запроса
      type:
        type: string
        logicalType: uuid
    - name: queryRequestId
      description: Идентификатор исходного запроса, в рамках которого была получена ссылка
      type:
        type: string
        logicalType: uuid
    - name: reference
      description: Ссылка на данные
      type:
        type: record
        name: BinaryReference
        namespace: query.result
        fields:
          - name: subRequestId
            description: Идентификатор подзапроса
            type:
              type: string
              logicalType: uuid
          - name: path
            description: Ссылка
            type: string

15.1.2. blob.rs

blob.rs - Топик с бинарными данным блобов

Структура сообщения

datamartBlobChunkMessage:
  description: Чанки бинарных данных
  contentType: 'application/octet-stream'
  bindings:
    kafka:
      key:
        $ref: '#/components/schemas/datamartBlobChunkInfo'
  headers:
    type: object
    properties:
      AGENT_CONSUMER_ID:
        description: Идентификатор агента потребителя
        type: string
      MESSAGE_TYPE:
        description: Тип сообщения
        type: string
        const: DatamartBlobChunkInfo:0.1
  payload:
    description: Бинарные данные
  examples:
    - name: base64
      headers:
        MESSAGE_TYPE: DatamartBlobChunkInfo:0.1
      payload:
        value: JEEJNodyLO7p1pgsRHG9pEiXeYGvHW4YCl4FgrgBmu5C92iVX1PV2GZdcqsb66bx8sk=

Avro-схема сообщения

datamartBlobChunkInfo:
  schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
  type: record
  name: BlobChunk
  namespace: datamart.blob
  fields:
    - name: requestId
      description: Уникальный идентификатор запроса
      type:
        type: string
        logicalType: uuid
    - name: queryRequestId
      description: Идентификатор исходного запроса, в рамках которого была получена ссылка
      type:
        type: string
        logicalType: uuid
    - name: chunkNum
      description: Номер чанка
      type: int
      minimum: 1
    - name: isLast
      description: Признак последнего чанка
      type: boolean
  examples:
    - requestId: 3546e40b-47fe-41b6-9c06-a2e915eb4181
      queryRequestId: a8e9f47b-38cd-4db6-a245-0fbd6e78c195
      chunkNum: 1
      isLast: true

15.1.3. blob.err

blob.err - Топик c ошибками получения бинарных данных по ссылке.

Структура сообщения

datamartBlobErrorResponseMessage:
  description: Ошибка получения бинарных данных по ссылке
  schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
  bindings:
    kafka:
      key:
        type: string
        format: uuid
        description: Уникальный идентификатор подзапроса
  headers:
    type: object
    properties:
      AGENT_CONSUMER_ID:
        description: Идентификатор агента потребителя
        type: string
      MESSAGE_TYPE:
        description: Тип сообщения
        type: string
        const: DatamartBlobErrorResponse:0.1
  payload:
    $ref: '#/components/schemas/datamartBlobErrorResponse'
  examples:
    - name: blobError
      summary: Пример ошибки получения бинарных данных по ссылке
      headers:
        AGENT_CONSUMER_ID: agent-fias
        MESSAGE_TYPE: DatamartBlobErrorResponse:0.1
      payload:
        requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
        queryRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
        errorCode: DATAMART-001
        errorMessage: Непредвиденная ошибка обработки

Avro-схема сообщения

datamartBlobErrorResponse:
  schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
  type: record
  name: BlobError
  namespace: datamart.blob
  fields:
    - name: requestId
      description: Уникальный идентификатор запроса
      type:
        type: string
        logicalType: uuid
    - name: queryRequestId
      description: Идентификатор исходного запроса, в рамках которого была получена ссылка
      type:
        type: string
        logicalType: uuid
    - name: errorCode
      description: Код ошибки
      type: string
    - name: errorMessage
      description: Сообщение с ошибкой
      type: string