API-first
як ілюстрація:
post:
[[Категорія:Webhooks]]
Воно теж має бути документованим, бо внутрішні API часто стають критичними для:
Без єдиного словника API оперативно стає незрозумілим.; Мобільний застосунок майже завжди потребує API.; Середній бізнес-середовище зазвичай має кілька систем:
* номенклатуру;
* штрихкоди;
* задача на приймання;
* задача на відбір;
* переміщення;
* інвентаризацію;
* залишки;
* серійні номери;
* партії;
* статуси відвантаження.; "errors": [
delivery_city
У [[K2 ERP]] API-first має змогу бути основою інтеграційної архітектури.; "phone": "+380XXXXXXXXX",
!; Потрібно описати:
/api/v2/orders
Приклад:
Потрібно описати:
|-
| Customer
| замовник або контрагент
|-
| Order
| Замовлення клієнта
|-
| Invoice
| Рахунок на оплату
|-
| Payment
| Оплата
|-
| Shipment
| Відвантаження
|-
| SKU
| Артикул товару
|-
| External ID
| Ідентифікатор у зовнішній системі
|}
]
== API-first і rate limiting ==
== Приклад API сайту й ERP ==
!;== API-first у великому бізнесі ==
* імпорт 100 000 товарів;
* актуалізація 50 000 цін;
* передача залишків;
* міграція контрагентів;
* завантаження історії продажів;
* синхронізація довідників.; Призначення
name
Для нього особливо важливі:
<pre>
== API-first і банк ==
{
Команда сайту використовує:
Public API доступний зовнішнім розробникам або клієнтам.; Приклад помилки:
<pre>
* які помилки можна повторювати;
* скільки разів повторювати;
* з якою паузою;
* коли відправляти в ручну перевірку;
* як не створити дублікати;
* як функціонує idempotency key.; Відповідь:
AI-рішенням потрібен контрольований доступ до даних.; Статус
Через API можна:
"edrpou": "12345678",
{
Погано:
API-first потрібен, щоб системи могли стабільно й передбачувано взаємодіяти.; Питання
{| class="wikitable" style="width:100%;"
/api/v1/orders
{
Для створення замовлення має змогу бути описаний endpoint:
"deleted_at": "2026-05-15T10:30:00Z"
{
"order_id": "MOCK-000001",
API-first сприяє розділити роботу команд:
"currency": "UAH"
Пов’язана сторінка: MES система Потрібно:
API-first і інтеграційні журнали
"order_id": "ERP-000145",
API-first і REST
Пов’язана сторінка: Service Desk
Прямий доступ до бази часто здається простішим, але створює ризики.; !; Коментар !; інформаційні дані } == API-first і internal API == * замовлень сайту; * клієнтів CRM; * платежів банку; * товарів WMS; * виробничих завдань MES; * документів BAS; * міграційних записів; * ТТН доставки.;<pre> * перейменувати поле; * змінити тип даних; * видалити поле; * змінити формат дати; * змінити логіку статусів; * змінити авторизацію без перехідного періоду.;== API-first і бізнес-правила == Потрібно підготувати:
- customer-service;
- order-service;
- payment-service;
- warehouse-service;
- notification-service;
- analytics-service;
- identity-service;
- approval-service.; бізнес-середовище має погоджувати зміст API.; API має змогу повернути:
"message": "Product with SKU USB-C-1M-BLK was not found",
- дату зміни;
- версію;
- що додано;
- що змінено;
- що застаріло;
- коли буде видалено;
- кого стосується;
- приклади міграції.; Приклади:
Сценарії:
- сайт читає таблиці ERP напряму;
- Power BI бере інформаційні дані з бойових таблиць без контролю;
- інтеграційні функціональні можливості змінює записи напряму;
- немає аудиту;
- немає валідації.; API-first надає можливість AI-асистенту отримувати:
Замість того щоб спочатку створити інтерфейс, базу даних або внутрішню логіку, а потім “якось” відкрити доступ назовні, команда спочатку описує:
- не створює новий платіж;
- повторює запит через 1 хвилину;
- потім через 5 хвилин;
- потім створює задачу в Service Desk.; | OpenAPI, версіонування, права доступу, зовнішні ID, ідемпотентність, аудит, моніторинг і тестування.; Для кожного API потрібен власник.; Потрібно фіксувати:
- частоту запитів;
- обсяг даних;
- кешування;
- індекси;
- пагінацію;
- batch-операції;
- асинхронні задачі;
- черги;
- таймаути;
- retry-логіку;
- rate limiting.;== Приклад code-first проблеми ==
- endpoint-и в множині: /orders, /customers;
- поля в snake_case або camelCase;
- статуси в нижньому регістрі;
- коди помилок у верхньому регістрі;
- однакові назви для однакових сутностей;
- не змішувати client, customer, counterparty без словника.;
* замовлення створюється з правильними даними; * дублікат не створюється; * порожній SKU дає помилку; * невідомий товар дає помилку; * користувач системи без прав отримує 403; * повторний запит повертає існуюче замовлення; * відповідь містить external_order_id.;== API-first і GraphQL == } !;== API-first у середньому бізнесі == <pre> * назвати підхід API-first, але не писати контракт; * створювати API після готової системи; * не залучати бізнес-середовище; * не описувати помилки; * не робити версіонування; * не враховувати права доступу; * не робити sandbox; * не логувати запити; * не тестувати контракти; * не мати зовнішніх ID; * не мати мапінгу; * не контролювати навантаження; * не документувати зміни.; API-first сприяє зробити ці обміни стабільними й контрольованими.; # Погодили зовнішні ID.; Приклади: Сайт уже має змогу тестувати створення замовлення, не чекаючи повного бекенду.; } "status": "already_exists", == Приклад API для Power BI == * які інформаційні дані йдуть з BAS; * які інформаційні дані йдуть у BAS; * які зовнішні ID використовуються; * які обробки запускають обмін; * які права має користувач системи обміну; * які журнали помилок є собою; * які API потрібні в K2 ERP; * які старі обміни потрібно вимкнути.; "field": "items [0].sku", !;== API-first і AI == [[SQLite]] має змогу використовуватися в API-first архітектурі як локальне або проміжне сховище.; !; } } Пов’язана сторінка: [[Казначейство]] {| class="wikitable" style="width:100%;" * endpoint-и; * методи; * параметри; * схеми даних; * відповіді; * помилки; * авторизацію; * приклади; * версії; * документацію.;== API-first і soft delete == Приклад: Він має містити: * документація; * стабільність; * версіонування; * rate limiting; * sandbox; * API-ключі; * приклади; * супровід; * changelog; * політика deprecated-версій.;<pre> { Приклади:
Пов’язана сторінка: Power BI
Це істотно для:
- мобільний складський облік;
- мобільні продажі та реалізація;
- сервісний інженер;
- кур’єр;
- керівник із погодженнями;
- HR-застосунок;
- Service Desk;
- польовий аудит;
- інвентаризація.; Він має відображати бізнес-операції.; користувач системи питає AI:
API-first — це не тільки технічна тема.; |- | Які ризики?; "external_order_id": "WEB-10425",
{
Sandbox — це тестове середовище API.; | В ERP, CRM, сайтах, мобільних застосунках, банках, WMS, MES, Power BI, AI й інтеграціях.;== API-first і пагінація ==
API-first і грошові значення
- URL endpoint-ів;
- HTTP-методи;
- структуру запиту;
- структуру відповіді;
- коди помилок;
- авторизацію;
- приклади;
- обмеження;
- версію API;
- характеристика полів.; Коли доречний
}
Етапи:
Хороший API-first:
!;== Що підготувати перед API-first проєктом ==
required: true
Черги корисні для:
"failed": 20,
Такий характеристика можна використовувати для документації, генерації клієнтів, тестів і mock-серверів.; # Перевіряє авторизацію.; Відповідь має змогу містити:
Приклад запиту:
[[Категорія:Паралельний запуск ERP]]
{| class="wikitable" style="width:100%;"
* API Gateway;
* API Catalog;
* governance;
* security policy;
* versioning policy;
* monitoring;
* sandbox;
* developer portal;
* SLA;
* інтеграційна команда;
* архітектурний review.; Термін
!; Для сайту API-first означає, що сайт не “лізе в базу ERP напряму”, а функціонує через зрозумілі методи.; Поширені помилки:
Ланцюг:
'''REST API''' — один із найпоширеніших стилів API.; Значення
інтеграційні функціональні можливості:
Swagger часто застосовують, коли потрібно як інтерфейс для перегляду й тестування API.; "status": "created"
Під час переходу з BAS у K2 ERP потрібно завантажити контрагентів.; Ідемпотентність означає, що повторний однаковий запит не створить дублікат.; Відповідь
API: Власник відповідає за:
}
{
"message": "SKU is required"
Що таке API-first простими словами?
Можна робити API для:
- клієнти дублюються;
- замовлення не прив’язуються до правильних контрагентів;
- платежі не закривають борг;
- Power BI показує різні цифри;
- супровід шукає помилки вручну.;== API-first і електронний документообіг ==
API-first і direct database access
Потрібно визначити: Обмін має змогу включати: delivery_address API має бути зрозумілим для розробників і бізнесу.; GET /api/v1/jobs/JOB-2026-0001 У сучасній архітектурі API-first часто поєднується з event-driven підходом.; як ілюстрація:
API-first і BAS
!; Приклад:
},
Типові API:
MES-система потребує API для виробництва.; API-first не забороняє швидку розробку, але змушує домовитися про обмін даними до того, як різні команди зроблять несумісні рішення для бізнесу.; external_order_id = WEB-10425
!; API-first сприяє зробити інтеграції керованими, а не залежними від випадкових файлів і ручних обробок.;== API-first і паралельний запуск ERP ==
Запит: API має змогу дозволяти:
== Приклад валідації замовлення == == API-first і ORM == Після запуску інтеграції виявилося: REST добре підходить для ERP, CRM, сайтів, мобільних застосунків і інтеграцій.; Через API можна підключати: * перевіряє external_order_id; * повертає вже створене замовлення; * не дублює товарний резерв.; # Доводиться терміново переробляти обидві сторони.; Кращий підхід: API має бути проєктований з урахуванням навантаження.; # Виявилося, що в ERP немає зовнішнього ID.; "error_code": "PRODUCT_NOT_FOUND", <pre> * сайт; * інтернет-магазин; * CRM; * WMS; * MES; * TMS; * банк; * Power BI; * електронний електронний документообіг; * мобільний застосунок; * AI-асистента; * партнерський кабінет; * сервісний портал; * міграційні інструменти; * зовнішні довідники.; Поганий API: Інакше сайт має змогу продовжити продавати товар, який уже неактивний в ERP.; "status": "accepted" } !; GET /api/v1/approvals?assignee=current_user&status=pending API-first для банку має описувати: Хороший API має повертати зрозумілі помилки.; "total": 1000, == Недоліки API-first == } <pre>
- дату;
- клієнта;
- товарну групу;
- суму продажів;
- собівартість;
- маржу;
- менеджера;
- підрозділ;
- канал продажу.; У бекенді API часто функціонує разом з ORM.; * права користувача;
- статус заявки;
- бюджетний ліміт;
- договір;
- контрагента;
- валюту;
- банківський рахунок;
- дублікати;
- закритий період;
- маршрут погодження.;== API-first і міграція даних ==
API-first і K2 ERP
API-first і CI/CD
totalAmount
API-first і відповідальність
Приклад:
"sku": "USB-C-1M-BLK",
Пов’язана сторінка: Аудит дій
- які бізнес-об’єкти доступні через API;
- які дії можна виконувати;
- які поля передаються;
- які формати даних використовуються;
- які права доступу потрібні;
- які помилки можливі;
- які статуси повертаються;
- як функціонує версіонування;
- як тестується API;
- як API документується;
- як інші системи будуть інтегруватися.;== API-first і DevOps ==
/orders:
У code-first спочатку пишуть код, а API описують пізніше.; !;== Типові помилки API-first ==
API-first надає можливість описати старі інтеграції BAS, створити нові API в K2 ERP, перенести зовнішні ID, протестувати обміни й поступово вимкнути старі обробки.;== Пов’язані сторінки ==
- Спочатку описали API замовлення.; характеристика
!; Підхід
Це краще, ніж:
охоплює:
API-first і черги
API-first і локалізація
{
Контракт має змогу включати:
; !; Перевага
Що таке API-firstЧому не варто давати інтеграціям прямий доступ до бази?"sku": "USB-C-1M-BLK", Версіонування потрібне, щоб: Безпечні зміни: Банк тимчасово недоступний.; Помилки API мають бути видимими.; Напрям
GET /api/v1/analytics/sales?date_from=2026-05-01&date_to=2026-05-31
Фільтри дозволяють отримувати тільки потрібні інформаційні дані.;=== Як API-first сприяє при переході з BAS у K2 ERP? === API-first полегшує підтримку, якщо є собою: Пов’язана сторінка: WMS система "amount": 24500.00,
Приклад webhook
У мікросервісній архітектурі API-first особливо важливий, бо сервіси взаємодіють між собою через контракти.;== API-first і фінансові інформаційні дані == API-first і формат відповідіяк ілюстрація:
"id": "ERP-000145",
!; }
!; # Потім розробили сайт.;== API-first і API ==
== Приклад ідемпотентності ==
{| class="wikitable" style="width:100%;"
Для API-first істотно мати журнал інтеграцій.; API має враховувати права користувача або сервісу.; Що означає
!;== Впровадження API-first ==
"order_id": "ERP-000145"
!; # Статуси не збігаються.; API має відображати бізнес-домен, а не випадкову структуру бази.; Але для основного API великої ERP частіше потрібна серверна СУБД.; Він має змогу виконувати:
2026-05-15T10:30:00Z
<pre>
[[Категорія:Казначейство]]
requestBody:
З API-first бізнес-процес інший:
<pre>
* обробки великих імпортів;
* відправки повідомлень;
* синхронізації з WMS;
* webhook-ів;
* повторних спроб;
* банківських операцій;
* інтеграцій із нестабільними сервісами.; як ілюстрація:
* доступ через API;
* правила валідації;
* права доступу;
* аудит;
* стабільний контракт;
* контроль навантаження.; Сайт
!; "message": "SKU is required"
'''Contract-first''' означає, що спочатку описують контракт API, а потім пишуть код.; Кожен сервіс має мати зрозумілий API.; }
<pre>
<pre>
customer_phone
[[Категорія:Інтеграції]]
}
|-
| Номенклатура
| ERP
|-
| Залишки
| ERP або WMS, залежно від процесу
|-
| Ліди
| CRM
|-
| Платежі
| Банк / казначейство
|-
| Договори
| ERP або електронний документообіг
|-
| аналітичні інструменти
| BI-сховище
|}
API-first має включати безпеку з першого етапу.; Що роблять спочатку
API Gateway — це шар, через який проходять API-запити.;Він має змогу містити: Воно потрібне, щоб партнери або команди могли: * стандарти іменування; * правила версіонування; * безпеку; * документацію; * review API-контрактів; * каталог API; * політики доступу; * моніторинг; * бізнес-процес змін; * відповідальних власників.; Приклад: ERP має не створити дублікат, а повернути відповідь: Для грошей потрібно погодити: * створити замовлення; * отримати залишки; * оновити ціну; * створити платіж; * отримати статус документа; * завантажити контрагента; * перевірити кредитний ліміт; * створити сервісну заявку; * отримати інформаційні дані для Power BI; * передати результат виробничої операції; * синхронізувати довідники.; Приклад документації endpoint-аGET /api/v1/orders?status=paid&date_from=2026-05-01&date_to=2026-05-31 API має мати єдиний формат дат.; Хороший API має бути стабільним, документованим, безпечним, версіонованим, тестованим, зрозумілим для бізнесу й технічних команд.; це підхід до розробки програмних систем, у якому API проєктується як ключовий програмний продукт і контракт між системами ще до повної реалізації інтерфейсу, бізнес-логіки або інтеграцій виступає ключовою рисою API-first.; GET /api/v1/products?sort=name
API-first корисний не тільки для мікросервісів.;== Приклад API-контракту == Пов’язана сторінка: Права доступу в ERP
API-first і аудит дійКраще:
"email": "info@example.com" Backward compatibility означає, що нові зміни не ламають старих клієнтів.; delivery_postcode Приклад обмеження API-користувачаУ REST ресурси представлені через URL.; "external_id": "BAS-T-002",
API-first і backward compatibilityresponses: == API-first і валюти ==
API повертає:
== API-first і сайт ==
API-first передбачає методи:
Для інтеграцій і міграцій потрібні контрольні суми.; OpenAPI надає можливість описати:
* фронтенду розроблятися паралельно;
* партнерам тестувати інтеграцію;
* бізнесу перевірити формат;
* QA писати тести;
* швидше виявити проблеми контракту.; {
У пайплайні можна автономно перевіряти:
Це надає можливість не зупиняти весь імпорт через кілька помилок.; "status": "Оплачено"
== Приклад mock API ==
== API-first і зовнішні ID ==
== API-first і документація ==
{| class="wikitable" style="width:100%;"
Події допомагають системам реагувати без постійного опитування API.; Це зменшує хаос, дублікати, помилки й переробки.; |-
| Що істотно?; "message": "Quantity must be greater than 0"
"name": "Кава арабіка 1 кг"
GET /customers
<pre>
[[Категорія:K2 ERP]]
Подія:
Ознаки технічного боргу в API:
== API-first і доменна модель ==
Банківські інтеграції особливо чутливі до безпеки й контролю.; # Сайт і ERP розробляються паралельно за одним контрактом.; summary: Create order
{
GET /api/v1/products?page=1&page_size=100
Вона має містити:
* створення платіжного доручення;
* статус платежу;
* завантаження виписки;
* залишок рахунку;
* валютні операції;
* комісії;
* помилки;
* підписання;
* права доступу;
* журнал аудиту.; Partner API — це API для зовнішніх партнерів.; Сайт отримує цю подію й показує клієнту статус відправки.; DELETE /drafts/20
== API-first і статуси HTTP ==
'''GraphQL''' — це підхід, де замовник сам запитує потрібну структуру даних.;<pre>
"external_id": "BAS-T-001",
{| class="wikitable" style="width:100%;"
!; POST /orders
"status": "imported"
"error": {
бо інтеграційні функціональні можливості має змогу автономно зрозуміти, що саме потрібно виправити.; Приклади:
"items": [
POST /table_145/insert
[[Категорія:Інтеграція з BAS]]
!; Приклади:
== API-first і governance ==
[[Категорія:AI]]
* створювати замовлення;
* читати залишки;
* читати ціни;
* отримувати статуси.; "external_order_id": "WEB-10425",
== API-first і джерело правди ==
== API-first при впровадженні ERP ==
"job_id": "JOB-2026-0001",
Для Power BI API-first означає, що аналітичні інструменти отримує інформаційні дані через стабільний, контрольований шар.; }
Прямий доступ до бази обходить бізнес-логіку, права доступу, аудит і валідацію.; {| class="wikitable" style="width:100%;"
PUT /orders/145
]
* кількість запитів;
* час відповіді;
* кількість помилок;
* кількість 4xx;
* кількість 5xx;
* найповільніші endpoint-и;
* rate limit;
* використання API-ключів;
* кількість повторних спроб;
* кількість дублікатів;
* статуси інтеграцій.; Метод
== API-first і OpenAPI ==
=== Чим API-first відрізняється від code-first? ===
|-
| new
| Замовлення створене
|-
| confirmed
| Замовлення підтверджене
|-
| paid
| Оплата отримана
|-
| reserved
| Товар зарезервований
|-
| shipped
| Замовлення відвантажене
|-
| cancelled
| Замовлення скасоване
|}
=== Що таке API-контракт? ===
== API-first і персональні інформаційні дані ==
== Приклад retry ==
* формат дати;
* часову зону;
* формат дати й часу;
* правила зберігання;
* правила відображення;
* поведінку при переході між часовими зонами.; * систему-джерело;
* систему-приймач;
* endpoint;
* external_id;
* request_id;
* correlation_id;
* статус;
* помилку;
* час;
* повторні спроби;
* відповідального.; # Потім згадали про інтеграцію.; GET /api/v1/products/changes?updated_after=2026-05-15T10:00:00Z
"quantity": 0
Потрібно:
* сайт має змогу створювати замовлення, але не бачить зарплату;
* Power BI має змогу читати аналітичні інформаційні дані, але не змінює документи;
* WMS має змогу змінювати складські операції, але не фінансовий блок;
* AI-асистент бачить тільки дозволені користувачу інформаційні дані;
* банк-інтеграція функціонує тільки з платежами.;Інкрементальна синхронізація надає можливість отримувати тільки зміни після певного моменту.; як ілюстрація, при створенні платежу API має перевірити:
API-first і Service Desk== API-first і public API ==
<pre>
API-first добре поєднується з CI/CD.; Документація API — обов’язкова частина API-first.; {| class="wikitable" style="width:100%;"
GET /api/v1/products?cursor=abc123&limit=100
== API-first і статуси ==
|-
| order_id
| external_order_id
| Зовнішній номер замовлення
|-
| customer_phone
| customer.phone
| Пошук клієнта
|-
| sku
| items.sku
| Пошук товару
|-
| delivery_type
| delivery.service
| Служба доставки
|-
| paid
| payment_status
| Статус оплати
|}
API потрібно моніторити.; "items": [
== API-first і помилки ==
* швидші інтеграції;
* менше переробок;
* паралельна розробка програмного забезпечення;
* краща документація;
* стабільні контракти;
* простіше підключати партнерів;
* краща безпека;
* кращий контроль змін;
* простіше тестування;
* простіше масштабування;
* якісніша аналітичні інструменти;
* краща готовність до AI;
* простіший перехід з BAS у K2 ERP.;== Приклад bulk API ==
{
Потрібно уніфікувати відповіді.; Після зміни структури таблиць такі інтеграції без зайвих зусиль ламаються.; При заміні BAS API-first сприяє не переносити залежність від старих зовнішніх обробок.;== API-first і бізнес-команди ==
{| class="wikitable" style="width:100%;"
API-first і монолітКороткоРизики: API-first і інкрементальна синхронізаціяФінансові API мають бути особливо захищені.; | Підхід, коли API проєктують першим як контракт між системами.; "sku": "", Пов’язана сторінка: CRM для продажів
Для ERP особливо небезпечні:
} API governance — це правила керування API в компанії.; |} API-first і внутрішні команди503 Service Unavailable API-first і версіонуванняAPI Catalog — це каталог усіх API компанії.; POST /service-tickets Приклади сервісів:
order.shipped Приклад OpenAPI-фрагмента|-
| POST /orders
| 12 400
| 35
| 180 мс
|-
| GET /stock
| 48 000
| 12
| 95 мс
|-
| POST /payments
| 1 200
| 5
| 220 мс
|-
| GET /analytics/sales
| 320
| 0
| 900 мс
|}
GET /customers/15
== API-first і дата/час ==
API потрібно тестувати окремо.; Мапінг описує відповідність полів між системами.; | Відсутність документації, хаотичні endpoint-и, прямий доступ до бази, дублікати, слабка безпека й зламані інтеграції.;== API-first і MES ==
* рахунками;
* актами;
* договорами;
* PDF;
* фото;
* сертифікатами;
* накладними;
* документами доставки;
* вкладеннями Service Desk.; Окремо варто відзначити CRM, e-commerce, банківських інтеграцій, WMS, MES, Service Desk, мобільних застосунків, BI, Power BI, AI-асистентів, партнерських кабінетів і мікросервісної архітектури.; Його часто використовують разом зі Swagger.; Потрібні правила іменування.; API-first вирішує це через погоджений мапінг і контракт.; Контроль має змогу включати:
== API-first і ідемпотентність ==
POST /api/v1/customers/import
== Типові коди помилок API ==
}
Потрібно логувати:
[[Категорія:Power BI]]
== API-first і sandbox ==
Запит:
== API-first і карта інтеграцій ==
{
Для критичних операцій використовують idempotency key.; POST /orders
"details": []
Текст “Оплачено” можна відобразити в інтерфейсі, але API краще функціонує з кодами.; # Погодили статуси.; API
POST /stock-transfers } Це корисно для: Довгі операції краще виконувати асинхронно.; # API повертає відповідь.; Mock сприяє: Приклади об’єктів: '201':
API-first має одразу передбачати зовнішні ID для: API-first і deprecated API
організація хоче, щоб мобільний застосунок складу працював з ERP.;=== Що таке OpenAPI? === Карта інтеграцій описує, хто з ким обмінюється даними.; # API отримує запит.; Заборонено: API має змогу дозволяти: api_site Якщо об’єкт видалений або деактивований, API має передавати це зовнішнім системам.; # Викликає бізнес-сервіс.; Джерело правди |
; description: Validation error
|
Де застосовується?;
[[Категорія:OpenAPI]]
== Простий приклад API-first ==
[[Категорія:ERP]]
orders {
== Типові помилки в ERP API ==
"items": [
POST /api/v1/orders
Приклад:
API має змогу передавати персональні інформаційні дані, з цієї причини потрібен контроль.; як ілюстрація:
}
== API-first і мобільні застосунки ==
* отримати каталог;
* отримати ціни;
* отримати залишки;
* створити замовлення;
* передати оплату;
* отримати статус;
* створити повернення;
* отримати номер ТТН;
* оновити клієнта.; Потрібно продумати:
== API-first і тестування ==
Рекомендовано одразу погодити:
{
<pre>
Приклад успіху:
API-ключі, токени й секрети не можна зберігати в коді або відкритих файлах.; Краще не передавати суму без валюти, особливо якщо платформа функціонує з UAH, USD, EUR або іншими валютами.;=== Який результат правильного API-first підходу? ===
У великому бізнесі API-first стає частиною корпоративної архітектури.; Приклад:
{
{| class="wikitable" style="width:100%;"
Service Desk має змогу використовувати API для інтеграції із ERP, CRM, поштою, Telegram-ботом або порталом користувача.; Призначення
Error 500
=== Чому API-first важливий для ERP? ===
"customer": {
* авторизацію;
* автентифікацію;
* ролі;
* права доступу;
* API-ключі;
* OAuth;
* JWT;
* IP-обмеження;
* rate limiting;
* аудит;
* шифрування;
* логування;
* захист персональних даних;
* захист фінансових даних.;
API-first і логування помилок |
; DevOps у API-first відповідає за: | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GET | /api/v1/products | Отримати список товарів | |||||||||||||||||||||||||||||||||
| GET | /api/v1/products/{sku} | Отримати товар за артикулом | |||||||||||||||||||||||||||||||||
| POST | /api/v1/orders | Створити замовлення | |||||||||||||||||||||||||||||||||
| GET | /api/v1/orders/{id} | Отримати замовлення | |||||||||||||||||||||||||||||||||
| PATCH | /api/v1/orders/{id}/status | Оновити статус | |||||||||||||||||||||||||||||||||
| GET | /api/v1/stock | Отримати залишки |
!;== API-first і мапінг даних ==
API-first і права доступу
Rate limiting обмежує кількість запитів за певний час.; * бізнес-логіку;
- контракт;
- документацію;
- версіонування;
- помилки;
- підтримку;
- SLA;
- зміни;
- безпеку;
- відповідність процесу.;
API-first і база даних
API-first і події
- додати необов’язкове поле;
- додати новий endpoint;
- додати новий статус із документацією;
- розширити відповідь без видалення старих полів.; "event": "order.shipped",
Чим API-first відрізняється від code-first
number
- order.created;
- order.paid;
- order.shipped;
- payment.received;
- invoice.created;
- stock.changed;
- customer.updated;
- contract.expired;
- approval.completed;
- ticket.created.; API ERP
|- | REST | Простий і зрозумілий | ERP-інтеграції, CRUD, стандартні обміни |- | GraphQL | Гнучкий вибір полів | Складні фронтенди, багато різних клієнтів |- | Webhooks | Події в реальному часі | Статуси, сповіщення, інтеграції |- | Batch API | Масова передача | Міграція, синхронізація, великі довідники |}
API-first і retry-логіка
"active": true
"sku": "COFFEE-1KG",
- замовлення підтверджено;
- товар відвантажено;
- платіж отримано;
- статус доставки змінено;
- замовник заблокований;
- залишок змінився;
- документ погоджено.; Небезпечні зміни:
"payment_status": "paid",
"error_code": "SKU_EMPTY",
!; Напрям
Якщо джерело правди не визначене, системи починають перезаписувати одна одну.; Щоб API був зрозумілий, потрібен єдиний словник.; Навіть монолітна ERP має змогу мати API.;== Приклад зміни версії API ==
Команда ERP створила поле:
Mock API — це імітація API, яка функціонує ще до готової реалізації.; OpenAPI — це формат опису REST API, який надає можливість документувати endpoint-и, параметри, схеми даних, відповіді, помилки й авторизацію.; |- | Який результат?; !; |- | ERP → сайт | Товари | GET /products |- | ERP → сайт | Залишки | GET /stock |- | ERP → сайт | Ціни | GET /prices |- | Сайт → ERP | Замовлення | POST /orders |- | Сайт → ERP | Оплата | POST /payments |- | ERP → сайт | Статус | Webhook order.status_changed |}
"external_id": "BAS-CUST-00077",
== API-first і валідація ==
* CRM створює ліда;
* CRM передає клієнта в ERP;
* ERP повертає рахунок;
* ERP повертає статус оплати;
* ERP повертає дебіторку;
* CRM показує менеджеру статус відвантаження;
* ERP отримує прогноз продажів із CRM.; Відповідь:
Сортування має бути передбачене контрактом.; {
<pre>
!; Недоліки або складності:
== REST чи GraphQL ==
}
Зовнішній ID — це ідентифікатор об’єкта в іншій системі.; API краще передавати стабільні коди, а не локалізовані тексти.; * endpoint;
- метод;
- тіло запиту або безпечний фрагмент;
- код відповіді;
- error_code;
- користувача;
- external_id;
- correlation_id;
- час;
- IP;
- повторну спробу;
- результат.; API
- немає документації;
- endpoint-и названі хаотично;
- немає версій;
- помилки незрозумілі;
- немає зовнішніх ID;
- немає тестів;
- немає власника;
- API змінюється без попередження;
- інтеграції мають повні права;
- партнери отримують різні формати;
- Power BI читає інформаційні дані напряму з бази.; Код
Приклад статусів замовлення:
"quantity": 2,
]
Приклад:
[[Категорія:WMS]]
У staging перевіряють:
Пов’язана сторінка: [[API для ERP]]
"errors": [
== Приклад REST API для ERP ==
== API-first і Power BI ==
Пов’язана сторінка: [[Інтеграція з BAS]]
!; API-контракт — це характеристика endpoint-ів, методів, полів, форматів, відповідей, помилок, авторизації, статусів і прикладів використання API.; {
'''Джерело правди''' — це платформа, яка є собою головною для певних даних.; {
Журнал має містити:
* мобільних застосунків;
* BI;
* інтеграцій;
* мікросервісів;
* AI;
* автоматизації;
* Service Desk;
* розробки нових модулів.; delivery_street
== API-first і файли ==
"customer_id": "K2-CUST-00991",
</div>
<pre>
<pre>
"shipped_at": "2026-05-15T10:30:00"
"external_id": "BAS-T-077",
- бачити список методів;
- читати характеристика полів;
- тестувати запити;
- переглядати приклади;
- перевіряти відповіді;
- показувати API партнерам;
- швидше онбордити розробників.;== Для чого потрібен API-first ==
- документація;
- приклади;
- журнал змін;
- sandbox;
- тестові ключі;
- зрозумілі помилки;
- Service Desk;
- SLA;
- контакт технічної підтримки;
- статус-сторінка;
- контроль версій.;== Приклад міграції через API ==
- локальний агент синхронізації;
- кеш API;
- черга запитів;
- журнал інтеграцій;
- тестове середовище;
- mock API;
- міграційна база.;== API-first і асинхронні задачі ==
},
- contract tests;
- unit tests;
- integration tests;
- security tests;
- performance tests;
- regression tests;
- negative tests;
- load tests;
- end-to-end tests.; В API-first спочатку погоджують контракт API, поля, помилки, версії та правила обміну.;== API-first і webhooks ==
Для фінансових API потрібно чітко описувати валюту й суму.; | Керована цифрова технічна архітектура, стабільні обміни, швидші інтеграції й готовність до K2 ERP, BI та AI.;== FAQ ==
як ілюстрація, імпорт 100 000 товарів.; Під час паралельного запуску ERP API-first сприяє контролювати обмін між старою і новою системою.; * використовувати secret manager;
- обмежувати доступ;
- регулярно ротувати ключі;
- не логувати токени;
- розділяти ключі для середовищ;
- відкликати старі ключі;
- контролювати сервісні облікові записи.;
"error_code": "RATE_LIMIT_EXCEEDED",
Для інкрементального обміну об’єкти мають мати поля: |- | Що таке API-first?; "status": "paid"
Відповідь має показати, які записи успішні, а які з помилками.;== Приклад моніторингу API ==
Сайт відправив замовлення, але не отримав відповідь через збій мережі.; Головне. API-first — це підхід, коли інтеграції не додаються “потім якось прикрутимо”, а проєктуються одразу: з описом методів, форматів, статусів, помилок, прав доступу, версій, обмежень і прикладів запитів.;
Приклади:
користувач системи:
API-first і mock API
API-first і мікросервіси
} Потрібна пагінація.; Поле
- мобільний застосунок;
- сайт;
- CRM;
- WMS;
- Power BI;
- партнери;
- AI;
- міграційні інструменти;
- інтеграції без прямого доступу до бази.; | Endpoint-и, поля, формати, відповіді, помилки, авторизацію, версії, статуси й приклади.; Він відправляє замовлення ще раз.; client_id
істотно, щоб API не був без ускладнень “обгорткою над таблицями”.; }
"data": {
API-first не означає відкривати базу даних напряму.; '''істотно.''' API-first не означає “зробити багато endpoint-ів”.; Приклади:
== API-first і секрети ==
|-
| Code-first
| Спочатку пишуть код, потім описують API
| API має змогу вийти випадковим і незручним
|-
| API-first
| Спочатку описують API-контракт
| Потрібна дисципліна проєктування
|-
| Integration-last
| Інтеграції роблять наприкінці
| Високий ризик переробок
|-
| Contract-first
| Спочатку погоджують контракт
| Потрібна участь усіх сторін
|}
== API-first і майбутнє ERP ==
завдяки наявності API-first користувачі можуть синхронізувати CRM та ERP.; {| class="wikitable" style="width:100%;"
API-first — це підхід, коли спочатку проєктують API як контракт між системами, а вже потім реалізують код, інтерфейси, інтеграції та бізнес-логіку.; Staging — це середовище, максимально схоже на production.; платформа
Етапи:
{
Ще до готової ERP-логіки mock повертає відповідь:
}
}
[[Категорія:Впровадження ERP]]
як ілюстрація:
contact_external_id
|-
| 400
| Некоректний запит
| Не заповнене обов’язкове поле
|-
| 401
| Не авторизований
| Немає токена
|-
| 403
| Заборонено
| Немає прав на документ
|-
| 404
| Не знайдено
| Немає товару з таким SKU
|-
| 409
| Конфлікт
| Замовлення вже існує
|-
| 422
| Помилка валідації
| Сума має бути більшою за 0
|-
| 429
| Забагато запитів
| Перевищено ліміт
|-
| 500
| Внутрішня помилка
| Непередбачена помилка сервера
|}
[[Категорія:API для ERP]]
== API-first і partner API ==
<div style="border:3px solid #ef6c00; background:#fff3e0; padding:14px; margin:16px 0;">
* обов’язковий зовнішній ID;
* кількість більша за 0;
* ціна не від’ємна;
* валюта з довідника;
* замовник має телефон або ЄДРПОУ;
* SKU існує;
* договір активний;
* дата не в закритому періоді;
* користувач системи має право на дію.; Що означає
API має логувати важливі дії.; Потім замовник перевіряє статус:
* 200 — успішне читання;
* 201 — створено;
* 202 — прийнято в обробку;
* 204 — успішно без тіла відповіді;
* 400 — помилка запиту;
* 401 — не авторизовано;
* 403 — заборонено;
* 404 — не знайдено;
* 409 — конфлікт;
* 422 — помилка валідації;
* 500 — помилка сервера.; ERP-системи все більше стають платформами, а не окремими закритими програмами.;== API-first і заміна BAS ==
як ілюстрація, ERP має змогу надіслати повідомлення сайту:
<pre>
* дозволені документи;
* інформаційні дані по ролі користувача;
* аналітичні показники;
* регламенти;
* статуси задач;
* заявки;
* історію клієнта;
* залишки;
* платежі;
* договори.; '400':
'''Correlation ID''' — це ідентифікатор запиту або процесу, який сприяє відстежити ланцюг подій у різних системах.; Відповідь:
== API-first і ERP ==
* які інформаційні дані ще йдуть у стару систему;
* які інформаційні дані вже йдуть у K2 ERP;
* які API використовуються;
* які інтеграції дублюються;
* як рахуються контрольні суми;
* коли вимикаються старі обміни;
* хто відповідає за розбіжності.; | Для стабільних інтеграцій, паралельної розробки, документації, безпеки й меншої кількості переробок.;<pre>
* сайт → ERP;
* CRM → ERP;
* банк → обліковий облік;
* Power BI → звіти;
* мобільний застосунок → складський облік;
* Telegram-бот → заявки.; "name": "ТОВ замовник Плюс",
[[Категорія:Міграція даних]]
"price": 180.00
* описати всі системи;
* зробити карту інтеграцій;
* визначити джерела правди;
* описати API-контракти;
* погодити статуси;
* погодити довідники;
* визначити зовнішні ID;
* створити mock API;
* написати тести;
* налаштувати безпеку;
* запустити sandbox;
* провести інтеграційне тестування;
* увімкнути моніторинг.;== API-first і SLA ==
"field": "items [0].sku"
API-first і супровід
WMS-система потребує API для складу.;
Які заявки на оплату потрібно погодити сьогодні?; Endpoint
- створює два замовлення.; Під час заміни BAS або інтеграції з BAS API-first сприяє не переносити старий хаос у нову систему.;== Приклад контрольних сум API ==
Мінус має змогу означати сортування за спаданням.; # Погодили правила дублювання.;== API-first і changed_at ==
- frontend чекає контракт, а не готовий backend;
- backend реалізує контракт;
- QA пише тести по контракту;
- DevOps налаштовує gateway і моніторинг;
- бізнес-середовище погоджує поля й статуси;
- партнери отримують документацію;
- аналітики знають джерела даних.; Endpoint
|- | Endpoint | POST /api/v1/orders |- | Призначення | Створення замовлення клієнта |- | Авторизація | Bearer token |- | Обов’язкові поля | external_order_id, customer, items |- | Успішна відповідь | 201 Created |- | Типові помилки | PRODUCT_NOT_FOUND, DUPLICATE_ORDER, VALIDATION_ERROR |}
Метрики:
API — це інтерфейс, через який одна платформа взаємодіє з іншою.; інформаційні дані До розробки мобільного застосунку й ERP-модуля команди погоджують ці методи.;== API-first і bulk API ==
API-first і Swagger
- створити заявку;
- змінити статус;
- призначити відповідального;
- додати коментар;
- прикріпити файл;
- отримати SLA;
- знайти схожі заявки;
- передати інцидент у ERP;
- отримати інформаційні дані користувача.; * сайт;
- API Gateway;
- ERP;
- банк;
- WMS;
- журнал інтеграції;
- Service Desk.; Потрібно повідомити:
"error_code": "VALIDATION_ERROR",
API-first і idempotency key
* виробничі замовлення; * специфікації; * операції; * робочі центри; * матеріали; * випуск; * брак; * простої; * фактичні витрати; * статуси виробництва.; Якщо сайт двічі передасть одне замовлення: Під час впровадження ERP API-first потрібно включити в план проєкту.; А не: == Приклад зовнішнього ID == * кількість замовлень; * суму замовлень; * кількість оплат; * суму оплат; * кількість товарів; * залишки; * кількість помилок; * кількість зовнішніх ID; * кількість дублів; * кількість успішних webhook-ів.; |- | Для чого потрібен?; Для документообігу API-first важливий при роботі з договорами, актами, рахунками й підписами.; Payload: '''Webhook''' — це спосіб повідомити іншу систему про подію.; Приклад: == API-first і contract-first == == API-first і API Catalog == == Приклад тестів API == [[Категорія:Мікросервіси]] Internal API застосовується всередині компанії.; Потрібно визначити: ERP часто інтегрується із сайтом, CRM, банком, WMS, MES, Power BI, AI і зовнішніми сервісами.;== API-first і correlation ID == При bulk-операціях істотно підтримувати частковий успіх.;== API-first і моніторинг == У v1 замовлення має поле: Deprecated означає, що метод застарів, але ще тимчасово функціонує.; POST /payment-requests == API-first і безпека == "delivery_service": "courier" "name": "ТОВ Постачальник", GraphQL має змогу бути корисним, коли різним клієнтам потрібні різні набори полів.;== API-first і CRM == API-first надає можливість розробити мобільний застосунок незалежно від основного вебінтерфейсу ERP.;
Команда CRM використовує:
API-first і API Gateway
}
Для POST /orders потрібно перевірити:
Тіло запиту:
API-first у малому бізнесі
API повертає тільки ті заявки, які користувач системи має право бачити.; ERP Пов’язана сторінка: Міграція даних API не має повертати мільйони записів одним запитом.; API-first надає можливість ERP бути:
"status": "created"
"message": "Too many requests.; GET /api/v1/orders?sort=-created_at
Практичний приклад. Якщо інтернет-магазин має створювати замовлення в ERP, API-first означає, що ще до розробки інтеграції погоджують контракт: POST /orders, поля клієнта, товари, ціни, знижки, оплату, доставку, зовнішній ID, можливі помилки й відповідь ERP.; |-
| Що описує API-контракт?; Приклади валідації:
Пов’язана сторінка: ERP для документообігу
!; |- | Замовлення за день | 240 | 240 | Збігається |- | Сума оплат | 780 000 грн | 780 000 грн | Збігається |- | Дублі зовнішніх ID | 0 | 0 | Збігається |- | Помилки інтеграції | 12 | 12 | Потрібне виправлення |} API-first зменшує технічний борг, але тільки якщо його дотримуються.;<div style="border:3px solid #2e7d32; background:#e8f5e9; padding:14px; margin:16px 0;"> '''Ідемпотентність''' означає, що повторний однаковий запит не створює небажаних дублювань.; Обмін має змогу включати: == API-first і changelog == ],
Інтеграції мають вміти повторювати запити.;
Приклад:
- середовища;
- gateway;
- деплой;
- секрети;
- моніторинг;
- логування;
- CI/CD;
- сертифікати;
- rate limiting;
- масштабування;
- резервування;
- аварійне відновлення.; Помилок
* який endpoint застарів;
* чим його замінити;
* до якої дати він працюватиме;
* як перейти на нову версію;
* які ризики залишитися на старій версії.; # Погодили помилки.; {
!;<pre>
Приклади чутливих даних:
Пов’язана сторінка: [[Заміна BAS]]
Без цих полів інтеграції часто змушені щоразу забирати всі інформаційні дані.; {
}
query {
Це краще, ніж вивантажувати всі замовлення й фільтрувати на стороні клієнта.; description: Order created
=== Що таке ідемпотентність API? ===
- тестувати інтеграцію;
- створювати тестові замовлення;
- перевіряти помилки;
- тестувати авторизацію;
- перевіряти webhook-и;
- не псувати бойові інформаційні дані;
- готувати запуск.; Swagger сприяє:
"type": "supplier",
"tracking_number": "TTN-123456789",
API-first і WMS
Типи тестів: API-first часто пов’язаний із підходом contract-first.; } Впровадження API-first можна робити поетапно.; Changelog потрібен, щоб команди бачили зміни API.; Він звертається до API:
API-first і naming conventions
!;== API-first і словник термінів == } } == API-first і фільтри ==
- характеристика endpoint-ів;
- приклади запитів;
- приклади відповідей;
- коди помилок;
- правила авторизації;
- ліміти;
- версії;
- статуси;
- поля;
- типи даних;
- сценарії використання;
- changelog;
- контакт підтримки.;
!; Приклад API має перевіряти інформаційні дані до збереження.; Середній час
{{SEO