Для розробників

Для розробників

Для розробників

Синхронізація даних

Синхронізація

Синхронізація даних між різними системами це завжди виклик для розробника, адже збудувати надійний ETL це затратно по часу, а також не завжди зручно. Вам потрібно завжди слідкувати за "джерелом правди" та зберігати ідентифікатори записів в суміжних системах для подальшої upsert стратегії (update or insert).

remoteId

Керуй на рівні архітектури до основних сутностей через API додає таке зручне поле remoteId

Це ідентифікатор даних з вашого "джерела правди". Він не є обов'язковим, але якщо ви його передаєте, то значення повинно бути унікальним.

remoteId дозволяє вам при синхронізації даних використовувати його для наступних обмінів. Завдяки цьому для синхронізації даних в Керуй вам не потрібно на своїй стороні зберігати id значення з Керуй.

Upsert мутації

Окрім стандартних create/update/delete мутацій в Керуй API є також окремі upsert мутації котрі дозволяють вам простіше синхронізувати дані. Вони працюють за принципом update or insert. Тобто ви просто викликаєте потрібну вам upsert мутацію з необхідним ідентифікатором або вашим remoteId і Керуй сам вирішить чи цей запис потрібно створити, чи оновити. Наразі наше API надає наступні upsert мутації

  • upsertItem

  • upsertAddress

  • upsertLocation

  • upsertContragent

  • upsertDocument

  • upsertDocumentItem

  • upsertTaxon

Приклад з номенклатурою

Для прикладу візьмемо синхронізацію номенклатури з вашої БД в Керуй.

Запит

mutation ($input: UpsertItemInput!) {
  upsertItem(input: $input) {
    id
    remoteId
    name
    sku
    basePrice
  }
}

Змінні

{
  "input": {
    "remoteId": "your_db_id",
    "context": "CARGO",
    "name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
    "basePrice": 999
  }
}

Відповідь

{
  "data": {
    "upsertItem": {
      "basePrice": "999",
      "id": "9dc7f7af-abe6-4e31-89e4-057f0a9c7c84",
      "name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
      "remoteId": "your_db_id",
      "sku": "1000014"
    }
  }
}

Керуй в цьому випадку використав значення вашого remoteId та створив відповідний запис у таблицю номенклатур. ID та SKU були згенеровані автоматично, але remoteId може бути використаний для наступних обмінів даними.

Для прикладу у товару змінилась ціна і ви передаєте ту саму мутацію, але вже з іншими змінними (змінилась basePrice)

Запит

{
  "input": {
    "remoteId": "your_db_id",
    "context": "CARGO",
    "name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
    "basePrice": 699
  }
}

Відповідь

{
  "data": {
    "upsertItem": {
      "basePrice": "699",
      "id": "9dc7f7af-abe6-4e31-89e4-057f0a9c7c84",
      "name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
      "remoteId": "your_db_id",
      "sku": "1000014"
    }
  }
}

Як бачите, запис оновився з новим значенням ціни

Пріоритети ідентифікаторів

Для upsert мутацій дуже важливий пріоритет ідентифікаторів, якщо ви вирішили в 1 запиті передати id та remoteIdто основним ключем синхронізації буде саме id

Детальніше про пріоритети ідентифікаторів ви можете ознайомити в анотації для API документації кожної окремої upser мутації

Пов'язані статті

Переглянути статті в тій самій категорії