Формати запитів для HTTP-методів
HTTP метод GET: Доступ до списку елементів типу Entity
1. Шаблон HTTP запиту: /api/v1/{domain}/{entity}.{format}?query
Елемент | Опис | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
entity | Ім'я ресурсу (тип сутності) | ||||||||||||
format | Формат, в якому буде представлений відповідь. варіанти:
|
||||||||||||
query |
|
2. Заголовки запиту
Заголовок | Допустиме значення |
---|---|
Authorization | Basic Autorization |
global_unique_id | Унікальний ідентифікатор запиту. |
system | Код зовнішньої системи для ідентифікації, наприклад = ‘300’ |
Content-type | application/json |
Accept | application/json |
If-Modified-Since | HTTP Date, наприклад Tue, 22 Sep 2020 09:21:24 GMT |
3. заголовки відповіді
Заголовок | Допустиме значення |
---|---|
Last-Modified | HTTP Date, наприклад Tue, 22 Sep 2020 09:21:24 GMT |
HTTP метод GET: Доступ до певного Елементу типу Entity
1. Шаблон HTTP запиту: /api/v1/{domain}/{entity}/{Id}.{format}
Елемент | Опис | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
entity | Ім'я ресурсу (тип сутності) | ||||||||||||
format |
Формат, в якому буде представлений відповідь. варіанти:
|
||||||||||||
query |
Підзапит до списку елементів. Все що слід після знаку "?" (Знак питання) вважається запитом
|
2. Заголовки запиту
Заголовок | Допустиме значення |
---|---|
Authorization | Basic Autorization |
global_unique_id | Унікальний ідентифікатор запиту. |
system | Код зовнішньої системи для ідентифікації, наприклад = ‘300’ |
Content-type | Application/json |
Accept | application/json |
If-Modified-Since | HTTP Date, наприклад Tue, 22 Sep 2020 09:21:24 GMT |
3. заголовки відповіді
Заголовок | Допустиме значення |
---|---|
Last-Modified | HTTP Date, наприклад Tue, 22 Sep 2020 09:21:24 GMT |
HTTP метод PUT: Редагування елемента типу Entity
1. Шаблон HTTP запиту: /api/v1/{domain}/{entity}/{Id}.{format}?query
Елемент | Опис | ||||||
---|---|---|---|---|---|---|---|
entity | Ім'я ресурсу (тип сутності) | ||||||
id | Ідентифікатор для редагування запису | ||||||
format | Необов'язковий параметр. Формат, в якому буде представлений відповідь, за замовчуванням json. варіанти:
|
||||||
query | Підзапит до списку елементів. Все що слід після знаку "?" (Знак питання) вважається запитом
|
2. Заголовки запиту
Заголовок | Допустиме значення |
---|---|
global_unique_id | Унікальний ідентифікатор запиту. |
Authorization | Basic Autorization |
Content-type | Application/json |
system | Код зовнішньої системи для ідентифікації, наприклад = ‘300’ |
Accept | application/json |
3. тіло запиту
Назва поля | Тип | Опис |
---|---|---|
AttributesNames: AttributesValue |
Пара Ключ: Значення |
Масив атрибутів сутності Entities |
HTTP метод POST: Створення нового елемента типу Entity
1. Шаблон HTTP запиту: /api/v1/{domain}/{Entity}.{format}?query
Елемент | Опис | ||||||
---|---|---|---|---|---|---|---|
entity | Ім'я ресурсу (тип сутності) | ||||||
format | Необов'язковий параметр. Формат, в якому буде представлений відповідь, за замовчуванням json. варіанти:
|
||||||
query |
Необов'язковий параметр. Підзапит до списку елементів. Все що слід після знаку "?" (Знак питання) вважається запитом
|
2. Заголовки запиту
Заголовок | Допустиме значення |
---|---|
global_unique_id | Унікальний ідентифікатор запиту. |
Authorization | Basic Autorization |
Content-type | Application/json |
system | Код зовнішньої системи для ідентифікації, наприклад = ‘300’ |
Accept | application/json |
3. тіло запиту
Назва поля | Тип | Опис |
---|---|---|
AttributesNames: AttributesValue |
Пара Ключ: Значення |
Масив атрибутів сутності Entities |
HTTP метод POST: Виконання дії для елемента типу Entity
1. Шаблон HTTP запиту: /api/v1/{domain}/{Entity}/action/{Action}.{format}?query
Елемент | Опис | ||||||
---|---|---|---|---|---|---|---|
entity | Ім'я ресурсу (тип сутності) | ||||||
Action | Назва действия (операции над сущностью) | ||||||
format | Необов'язковий параметр. Формат, в якому буде представлений відповідь, за замовчуванням json. варіанти:
|
||||||
query |
Необов'язковий параметр. Підзапит до списку елементів. Все що слід після знаку "?" (Знак питання) вважається запитом
|
2. Заголовки запиту
Заголовок | Допустиме значення |
---|---|
global_unique_id | Унікальний ідентифікатор запиту. |
Authorization | Basic Autorization |
Authorization | Application/json |
system | Код зовнішньої системи для ідентифікації, наприклад = ‘300’ |
Accept | application/json |
3. тіло запиту
Назва поля | Тип | Опис |
---|---|---|
AttributesNames: AttributesValue |
Пара Ключ: Значення |
Массив атрибутов сущности Entities |
HTTP метод POST: Створення нового елемента типу Sub-Entity
1. Шаблон HTTP запиту: /api/v1/{domain}/{entity}/{ParentId}/{sub-entity}.{format}?query
Елемент | Опис | ||||||
---|---|---|---|---|---|---|---|
entity | Ім'я ресурсу (тип сутності) | ||||||
sub-entity | Ім'я ресурсу (тип підпорядкованої сутності) | ||||||
ParentId | Ідентифікатор вищестоящої сутності | ||||||
format |
Необов'язковий параметр. Формат, в якому буде представлений відповідь, за замовчуванням json. варіанти:
|
||||||
query |
Необов'язковий параметр. Підзапит до списку елементів. Все що слід після знаку "?" (Знак питання) вважається запитом
|
2 Заголовки запиту
Заголовок | Допустиме значення |
---|---|
global_unique_id | Унікальний ідентифікатор запиту. |
Authorization | Basic Autorization |
system | Код зовнішньої системи для ідентифікації, наприклад = ‘300’ |
Content-type | Application/json |
Accept | application/json |
3. тіло запиту
Назва поля | Тип | Опис |
---|---|---|
AttributesNames: AttributesValue |
Пара Ключ: Значення |
Масив атрибутів сутності Entities |
HTTP метод DELETE: Видалення елемента типу Entity
5.2 Шаблон HTTP запиту: /api/v1/{domain}/{entity}/{Id}.{format}?query
Елемент | Опис | ||||||
---|---|---|---|---|---|---|---|
entity | Ім'я ресурсу (тип сутності) | ||||||
id | Ідентифікатор ресурсу (сутності) | ||||||
format | Необов'язковий параметр. Формат, в якому буде представлений відповідь, за замовчуванням json. варіанти:
|
||||||
query |
Необов'язковий параметр. Підзапит до списку елементів. Все що слід після знаку "?" (Знак питання) вважається запитом
|
5.3 Заголовки запиту
Заголовок | Допустиме значення |
---|---|
Authorization | Basic Autorization |
global_unique_id | Унікальний ідентифікатор запиту. |
Content-type | Application/json |
system | Код зовнішньої системи для ідентифікації, наприклад значение = ‘300’ |
Accept | application/json |
HTTP метод PATCH (зарезервировано): Часткове Редагування елемента типу Entity
1. Шаблон HTTP запиту: /api/v1/{domain}/{entity}/{Id}.{format}?query
Елемент | Опис | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
entity | Ім'я ресурсу (тип сутності) | |||||||||
format | Формат, в якому буде представлений відповідь. варіанти:
|
|||||||||
query |
Підзапит до списку елементів. Все що слід після знаку "?" (Знак питання) вважається запитом
|
2. Заголовки запиту
Заголовок | Допустиме значення |
---|---|
global_unique_id | Унікальний ідентифікатор запиту. |
Authorization | Basic Autorization |
Content-type | Application/json |
system | Код зовнішньої системи для ідентифікації, наприклад = ‘300’ |
Accept | application/json |
3. тіло запиту
Назва | Тип | Опис |
---|---|---|
AttributesNames: AttributesValue |
Пара Ключ: Значення |
Масив атрибутів сутності Entities |
Обробка помилок при виклику HTTP методів
На загальному рівні HTTP взаємодії передбачається наступна логіка обробки помилок через статус коди HTTP:
2xx (Success) - успіх, повторювати запит сенсу немає, статус коди можуть бути деталізовані:
- 200 OK (успіх) – якщо PUT виконаний без помилок
- 201 Created (Запис доданий) – якщо POST виконаний без помилок
4хх (Client error responses) - помилка формування запиту, повторювати сенсу немає, крім окремих кодів 408 (негайний повтор) та 409 (відкладений повтор), для інших кодів помилок потрібно змінити формат запиту перед повторним виконанням або вирішити питання з авторизацією, статус коди можуть бути деталізовані:
- 404 Not Found (Дані не знайдено) - якщо невірний URL запиту
- 400 Bad Request (Невірний запит) - якщо вказана невірна сутність API
- 401 Unauthorized (Неавторизований доступ) - якщо зазначена пара логін / пароль невірні
- 403 Forbidden (Доступ заборонений) - якщо немає доступу до сутностей
- 408 (Request Timeout) - потрібно повторити запит негайно
- 409 (Conflict) - вказує, что запит не може буть оброблений через конфлікт, например, конфлікт Паралельно запиту - зазвичай є наслідком неправильного (занадто короткого) таймаута на очікування відповіді або виконання команди. Потрібно повторити запит через деякий час!
5хх (Server error responses) - логічна помилка на стороні сервера, повторювати сенсу немає, крім окремого коду 503 (Service unavailable) - дана помилка вимагає відкладеного повторення поза часом, визначеним у відповіді запиту. Статус коди деталізовані нижче:
- 500 Internal Server Error (Внутрішня помилка сервера) - помилка бізнес-логіки, детальне Опис приведено в тегах Message і Data
- 501 Not implemented (Не виконано) - якщо спробувати викликати DELETE
- 503 Service unavailable - якщо не маєте доступу API до пов'язаним БД або параметри авторизації самого сервера застаріли (не пов'язані з авторизацією API - технічна обліковий запис заблоковано і т.д.)
ВАЖЛИВО! Невірна конфігурації таймаутів для АПИ при інтеграції між системами може привести до зациклення помилок 408 і 409 - в цьому випадку потрібно виконати узгодження значень таймаутів боку-ініціатора запиту і сторони-виконавця запитів, а саме - затримку читання на стороні ініціатора завжди повинен бути строго більше, ніж таймаут на виконання запиту на стороні-виконавця.
Нижче наведено Опис структури відповіді повідомлення про помилку рівня сутностей (зазвичай для кодів 5хх і 4хх, крім помилок авторизації і помилок сервера IIS):
Назва поля | Обов'язковість | Опис |
---|---|---|
LevelMessage | так | об'єкт |
ErrNumber | так | об'єкт |
Message | так | Детальний Опис помилки |
State | так | Error State |
HelpLink | ні | Посилання на документацію, яка розширює інформацію щодо помилки |
Xml | ні | Номер ErrNumber найпершої помилки-причини, що міститься в Data |
Data | об'єкт | помилка-причина для поточної помилки (іншими словами вкладена помилка) в тій же структурі, для прикладу нижче в форматі XML:
|
ResolveUrl | Посилання на веб-додаток, що дозволяє виправити дані, що впливають на факт появи помилки |
Важливо розуміти, що тег Data містить помилки аналогічної структури - тим самим помилки можуть бути вкладеними - тобто коли одна помилка стає причиною для іншого, більш верхнеуровневой, то тоді обидві помилки приходять у відповіді, при це перша помилка міститься в тезі «Data». Для зручності обробки помилок, найперше значення ErrNumber з першої помилки-причини приведено в тезі Xml. Приклад помилкового відповіді з вкладеними помилками-причинами наведено нижче Error Responses
Приклади викликів HTTP>
Request format
Приклад запиту GET для отримання записів Customers з ім'ям НАТЕК:
accept: application/json
system: 300
global_unique_id: 6d07332c-2e63-4d49-91d2-ee01e600f7ff
Authorization: Basic YXBpX3VzZXI6V2lkZWNvdXAx
Content-Type: application/json
Host: servername:port
Content-Length: 0
Приклад запиту GET для отримання запису Customers по ID з передачею If-Modified-Since:
GET http://servername:port/api/v1/Bss/customers/1041838.json HTTP/1.1
accept: application/json
if-modified-since: Tue, 22 Sep 2020 09:21:24 GMT
system: 300
global_unique_id: 6d07332c-2e63-4d49-91d2-ee01e600f7ff
Authorization: Basic YXBpX3VzZXI6V2lkZWNvdXAx
Content-Type: application/json
Host: servername:port
Content-Length: 0
Приклад запиту POST для створення клієнта Фізичної особи
POST http://servername:port/api/v1/Bss/customers HTTP/1.1
Authorization: Basic ZGVtbzpkZW1v
Content-Type: application/json
global_unique_id: 6b80d0f6-62df-4507-b115-e5245c0b340c
Connection: Keep-Alive
{
"IDType":1,
"ProfileType":1
"ParentID":1,
"Name":"Порошенко Петро",
"Customer_FirstName":"Петро",
"Customer_MiddleName":"Порошенко",
"Customer_SearchName":"Порошенко П.О.",
"CustomerLanguageId":1,
"StatusId":2,
"CustomerDate":"2019-05-08T11:55:39.9285053+03:00",
"GroupID":1,
"LocationID":1
}
Приклад запиту POST для створення клієнта Юридичної особи з Асоціації
POST http://servername:port/api/v1/Bss/associations/1042338/customers HTTP/1.1
Authorization: Basic ZGVtbzpkZW1v
Content-Type: application/json
global_unique_id: 6b80d0f6-62df-4507-b115-e5245c0b350c
Connection: Keep-Alive
{
"IDType":1,
"ProfileType":2,
"Name":"Товариство з обмеженою відповідальністю Первомайський Гірничо-збагачувальний комбінат",
"Customer_SearchName":"Первомайський ГЗК ТОВ",
"CustomerLanguageId":1,
"StatusId":2,
"CustomerDate":"2019-05-08T11:55:39+03:00",
"GroupID":1,
"LocationID":1
}
Приклад запиту PUT для редагування ПІБ клієнта с ID=1041838
PUT http://servername:port/api/v1/Bss/customers?id=1041838 HTTP/1.1
Authorization: Basic ZGVtbzpkZW1v
Content-Type: application/json
global_unique_id: ac6495d1-5118-494a-a737-844f6c76ba46
Host: servername:port
{
"IDType":1,
"ProfileType":1
"ParentID":1,
"Name":"Зеленський",
"Customer_FirstName":"Володимир",
"Customer_MiddleName":"Олександрович",
"Customer_SearchName":"Зеленський В.О.",
"CustomerLanguageId":1,
"StatusId":2,
"CustomerDate":"2019-05-08T11:55:39+03:00",
"GroupID":1,
"LocationID":1
}
Response format
Приклад відповіді GET для отримання записів Customers по ID:
HTTP/1.1 200 OK
Content-Length: 78597
Content-Type: aplication/json
Last-Modified: Tue, 22 Sep 2020 09:21:24 GMT
Server: Microsoft-IIS/10.0
cache-scenario: scenario.1
X-Powered-By: ASP.NET
Date: Sun, 27 Sep 2020 11:18:51 GMT
{
"data":[
{
"abn_Balance":0.000000,
"abn_CreateDate":"2019-10-31T17:58:35.697",
"abn_Date":"2019-11-01T00:00:00",
"abn_Employe_Export_ID":"",
"abn_Employee_ID":"",
"abn_ExternalID":8836891,
"abn_FirstName":"",
"abn_Guid":"b75d56c7-1b84-4571-8e6c-09a3aeffc0a1",
"abn_HasNotEmptyPrepaid":0,
"abn_ID":165,
"abn_ID_Boss":164,
"abn_IsExistAD":0,
"abn_IsGuest":0,
"abn_LastName":"ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ \"НАТЕК СЕРВІС\"",
"abn_Login":"",
"abn_MiddleName":"",
"abn_ModifiedBy":"IVR_V.BORSHCHEVSKA_35683",
"abn_ModifiedDate":"2019-10-31T17:58:35.75",
"abn_ModifiedFrom":"BIS",
"abn_NestedSets_Left":398155,
"abn_NestedSets_Right":398156,
"abn_Password":"09B0B566-2570-4447-BDF5-5304813834B8",
"abn_PositionCode":"",
"abn_ShowPhoneDirectory":0,
"abn_WorkPlace":"01234567890",
"abonentFullName":"ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ \"НАТЕК СЕРВІС\"",
"acnt_ID":86,
"acnt_ID_count":1,
"acnt_IsPersonal":0,
"acnt_Number":"8132725",
"acnt_Number_Personal":"",
"actp_ID":21,
"actpd_Name":"ГКО",
"actpd_Name_Personal":"",
"aut_ID_count":0,
"aut_NameAuthCode":"",
"aut_NumberAts":0,
"bossFullName":"ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ \"НАТЕК СЕРВІС {01234567890}",
"cntr_ID_count":0,
"cntr_Name":"",
"com_Id":1,
"dep_ID":202,
"ext_ExtNum":"",
"ext_ID_count":0,
"grp_ID":100,
"grp_Name":"ByDefault",
"isEditAllow":1,
"isEditWorkPlace":0,
"lng_ID":1,
"loc_Name":"ГО КС(КС)",
"location_ID":7,
"ntw_ID":1000,
"pbx_networkName":"United",
"profileType":2,
"rptURL":"",
"subsCount":0,
"tnst_ExternalID":2,
"tnst_ID":10,
"tnt_AccountMandatory":1,
"tnt_ID":130,
"total":52,
"treeNodeType":"Customer",
"trf_ID":2
}
]
}
Error Responses
Приклад помилкової авторизації
HTTP/1.1 401 Unauthorized
Content-Type: application/problem+json; charset=utf-8
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
Proxy-Support: Session-Based-Authentication
{
"type":"https://tools.ietf.org/html/rfc7235#section-3.1",
"title":"Unauthorized",
"status":401,
"traceId":"0HLM1RANTI6TH:00000001"
}
Приклад спрацювання перевірки на ідемпотентність
{
"headerId": "1892ae73-f1db-47e0-9084-35e8aef993f3",
"idempotent": {
"status": "IsCompleted",
"dateModify": "2019-06-09T15:53:18.5599139Z",
"data": {
"id": 100000257,
"lang": "uk ",
"idType": 1
} }
Приклад помилки рівня БД
{
"LevelMessage":"17",
"ErrNumber":"50240",
"Message":"Помилка установки підключеного шаблона тарифного плану (RepresentationTariffPlanBind)",
"State":"1",
"HelpLink":"",
"Xml":"50248",
"Data":{
"LevelMessage":"17",
"ErrNumber":"50271",
"Message":"Помилка створення підписки на сервіс: ",
"State":"1",
"HelpLink":"",
"Xml":"50248",
"Data":{
"LevelMessage":"17",
"ErrNumber":"50248",
"Message":"Помилка зміни статусу послуги: невірний srs_id=12345",
"State":"1",
"HelpLink":"",
"Xml":"50248",
"Data": null,
"ResolveUrl":""
},
"ResolveUrl":""
},
"ResolveUrl":""
}
Перелік помилок, пов'язаних з CRUD операціями кожної REST суті наведено в специфікації REST API Specs в розділі Errors Mapping