← Назад до блогу

n8n API: створення реєстру робочих процесів і порівняння локальних знімків

Зберіть доступні робочі процеси через n8n API з курсорною пагінацією, збережіть локальний реєстр ID і назв та знайдіть додані, відсутні й перейменовані записи.

Лупа та два лотки для документів символізують збір і порівняння реєстру робочих процесів через n8n API.

Перевірено за наведеними джерелами .

Мета й передумови створення реєстру через n8n API

У цьому посібнику ми використаємо n8n API, щоб зібрати всі повернуті сторінки робочих процесів і порівняти локальний знімок відповідностей ID і назв із попереднім. Вам потрібні доступ до API, дозвіл на створення ключа та локальне середовище Python. У документації n8n API зазначено, що доступ до API підтримують Cloud Starter, Pro й Enterprise та всі редакції для самостійного розгортання; безкоштовний пробний період його не передбачає. Ця інформація відповідає переглянутій документації, яка не вказує версію розгорнутого продукту.

Результат охоплює робочі процеси, доступні обліковому запису та ключу, які виконують збір, і не доводить повноту охоплення всього інстансу. Він виявляє зміни складу й назв, але не зміни визначень робочих процесів, поведінки виконання чи стану публікації. Немає гарантії, що сторінки утворюють знімок на один момент часу: зміни під час збору можуть вплинути на результат.

На нашу думку, невеликий реєстр — корисна відправна точка, адже питання для перевірки залишається чітким: які ID та назви робочих процесів змінилися?

Sources: n8n-docs/docs/connect/n8n-api/api-reference.md at main · n8n-io/n8n-docs · GitHub, Workflow | Connect | n8n Docs

1. Підготуйте ключ і кореневу адресу API

У Settings > n8n API створіть ключ із міткою та строком дії. Enterprise підтримує ключі з обмеженими правами: виберіть workflow:list для доступу до колекції. Ключі поза Enterprise мають повний доступ до ресурсів і можливостей облікового запису; обмеження цього скрипту запитами GET не робить такі облікові дані доступом лише для читання.

Задайте N8N_API_ROOT у локальному середовищі: HTTPS-адресу вашого інстансу з /api/v1 у кінці. Для Cloud використовуйте хост app.n8n.cloud вашого робочого простору; для самостійного розгортання — хост вашого інстансу зі збереженням базового шляху, специфічного для розгортання. Окремо задайте N8N_API_KEY. Не додавайте ключ до знімків і прикладів, якими ділитеся.

Sources: n8n-docs/docs/connect/n8n-api/authentication.md at main · n8n-io/n8n-docs · GitHub, Authentication | Connect | n8n Docs

2. Зберіть усі сторінки та збережіть реєстр

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

Задокументований запит до колекції — GET /api/v1/workflows. Передавайте X-N8N-API-KEY у кожному запиті. Задокументований розмір сторінки за замовчуванням — 100, максимальний — 250; цей приклад запитує 100. Не застосовуйте фільтри active, name, tags і проєкту. Дотримуйтеся такої послідовності:

  1. Запитайте колекцію робочих процесів без фільтрів, які звужують реєстр.
  2. Накопичуйте data з кожної сторінки, відхиляючи повторювані ID робочих процесів.
  3. Передавайте nextCursor без змін як наступний параметр cursor.
  4. Завершуйте збір, коли nextCursor дорівнює null; відхиляйте повторювані курсори або некоректні відповіді.
  5. Збережіть повне відображення ID у назви з відсортованими ключами.

Нижче наведено запропонований редакційний приклад коду, а не перевірений інструмент n8n. Збережіть наступні два абзаци коду послідовно у файлі inventory.py. Він використовує стандартну бібліотеку Python. Задавши змінні середовища, запустіть його командою python3 inventory.py. Відомості про структуру відповіді частково взято з довідкового матеріалу супровідників n8n у гілці, що оновлюється, а не з гарантій для клієнта конкретного релізу.

import json, os from pathlib import Path from urllib.parse import urlencode from urllib.request import Request, urlopen root = os.environ['N8N_API_ROOT'].rstrip('/') key = os.environ['N8N_API_KEY'] items, seen, cursor = {}, set(), None while True: params = {'limit': 100} if cursor is not None: params['cursor'] = cursor request = Request(root + '/workflows?' + urlencode(params), headers={'X-N8N-API-KEY': key}, method='GET') with urlopen(request, timeout=30) as response: page = json.load(response) if not isinstance(page, dict) or not isinstance(page.get('data'), list) or 'nextCursor' not in page: raise ValueError('Incomplete collection: malformed page')

for workflow in page['data']: identifier, name = workflow['id'], workflow['name'] if not isinstance(identifier, str) or not isinstance(name, str) or identifier in items: raise ValueError('Incomplete collection: invalid or duplicate ID/name') items[identifier] = name cursor = page['nextCursor'] if cursor is None: break if not isinstance(cursor, str) or not cursor or cursor in seen: raise ValueError('Incomplete collection: invalid or repeated cursor') seen.add(cursor) with open('inventory.candidate.json', 'w', encoding='utf-8') as output: json.dump(items, output, sort_keys=True, ensure_ascii=False, indent=2) print('Complete collection saved as inventory.candidate.json')

Скрипт записує файл лише після завершення збору. Після невдалого запуску не порівнюйте старий файл кандидата. Зберігайте попередній повний еталон окремо. Сортування ключів робить відображення з ID як ключами відтворюваним незалежно від порядку даних API. Метадані збору зберігайте окремо.

Sources: Authentication | Connect | n8n Docs, Workflow | Connect | n8n Docs, Pagination | Connect | n8n Docs, n8n-docs/docs/connect/n8n-api/pagination.md at main · n8n-io/n8n-docs · GitHub, n8n/.agents/skills/public-api/reference.md at master · n8n-io/n8n · GitHub, json — JSON encoder and decoder — Python 3.13.16 documentation

3. Порівняйте знімки та перевірте результат

Два лотки реєстру робочих процесів показують доданий елемент, відсутній елемент і змінену вкладку з назвою.
Пара лотків ілюструє категорії доданих, відсутніх і перейменованих записів у запропонованому порівнянні.

Після першого успішного збору збережіть кандидата як inventory.previous.json. Після наступного успішного запуску збережіть цей запропонований код порівняння як compare.py та виконайте python3 compare.py. Він завантажує обидва JSON-відображення та порівнює спочатку ID, а потім назви.

import json with open('inventory.previous.json', encoding='utf-8') as source: before = json.load(source) with open('inventory.candidate.json', encoding='utf-8') as source: after = json.load(source) report = { 'added': {k: after[k] for k in sorted(after.keys() - before.keys())}, 'missing': {k: before[k] for k in sorted(before.keys() - after.keys())}, 'renamed': {k: {'before': before[k], 'after': after[k]} for k in sorted(before.keys() & after.keys()) if before[k] != after[k]} } print(json.dumps(report, sort_keys=True, ensure_ascii=False, indent=2))

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

Умовні приклади порівняння
Попередній знімокКандидатЗвіт
a: Замовленняa: ЗамовленняУсі категорії порожні
a: Замовленняa: Замовлення; b: Потенційні клієнтиДодано b
a: Замовлення; b: Потенційні клієнтиa: ЗамовленняВідсутній b
a: Замовленняa: Приймання замовленьПерейменовано a

Ми б призначили відповідального за перевірку перед заміною еталона: звіт про відмінності найкорисніший тоді, коли хтось визначає значення кожної зміни.

Sources: Workflow | Connect | n8n Docs, json — JSON encoder and decoder — Python 3.13.16 documentation

4. Усуньте проблеми перед прийняттям знімка

Довідник робочих процесів n8n API документує наведені нижче значення відповідей. Використовуйте запропоновані перевірки для дослідження проблеми, а не сприймайте кожен статус як вичерпний діагноз.

Задокументовані статуси та запропоновані перевірки
СтатусЗначенняЗапропонована перевірка
400Недійсний або некоректно сформований запитПеревірте параметри та незмінність курсора
401НеавторизованоПеревірте ключ і заголовок автентифікації
403Доступ забороненоПерегляньте доступ облікового запису та права Enterprise

Sources: Workflow | Connect | n8n Docs, n8n-docs/docs/connect/n8n-api/authentication.md at main · n8n-io/n8n-docs · GitHub, Authentication | Connect | n8n Docs, n8n-docs/docs/connect/n8n-api/pagination.md at main · n8n-io/n8n-docs · GitHub

Спробуйте на практиці

Практичні завдання з n8n

Оберіть завдання й створіть робочий воркфлоу у власному середовищі n8n – до кожного завдання є п’ять поступових підказок.

Спробувати практичне завдання

Для вашої команди

Програми навчання n8n для однієї команди чи відділу – на вашому власному екземплярі n8n, з вашими інструментами й даними.

Навчання для вашої команди

Оцінка навичок n8n

Безкоштовний тест приблизно на 20 хвилин, англійською: 30 запитань у 10 напрямах і рівень від початківця до експерта. На AI Adoption Score – іншому проєкті автора цього сайту.

Дізнатися свій рівень n8n