Перейти к содержимому

Compare Object

POST
/v1/objects/{object_id}/compare
curl --request POST \
--url https://api.cloud.agentums.ru/v1/objects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/compare \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "other_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "version": 1 }'

Что изменилось: файл против другого файла ИЛИ против своей прошлой версии.

Сравнение идёт по абзацам; регистр и лишние пробелы правкой не считаются (см. services/compare). Файл в запросе — ПРАВАЯ сторона («что стало»), источник из тела — левая («что было»), поэтому «добавлено» читается относительно текущего состояния файла.

Без тела берётся последняя ревизия — частый вопрос «что изменилось с прошлого раза». other_id проходит ту же проверку владения и тот же PIN скрытой зоны, что и сам файл: иначе сравнение стало бы обходным чтением чужого (и скрытого) содержимого.

404 — файла/версии нет либо истории ещё нет. 422 — заданы оба источника разом, или сравнивать нечего (нераспознанный скан, картинка, файл ещё в обработке).

object_id
required
Object Id
string format: uuid
x-hidden-token
Any of:
string
Media typeapplication/json
CompareRequest

С чем сравнивать файл. Ровно ОДИН источник: другой файл либо своя прошлая версия.

Оба поля разом — ошибка клиента, а не повод молча выбрать один: «сравни с версией 3» и «сравни с этим файлом» — разные вопросы, и угадывать, какой из них имелся в виду, значит показать человеку не тот диф. Ни одного — берём последнюю ревизию (частый случай «что изменилось с прошлого раза»).

object
other_id
Any of:
string format: uuid
version
Any of:
integer
>= 1
Examplegenerated
{
"other_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"version": 1
}

Successful Response

Media typeapplication/json
CompareOut

Результат сравнения: расхождения + сводка по ВСЕМУ тексту.

blocks обрезается потолком показа, счётчики — нет: «изменено 3» при трёх сотнях правок ввело бы в заблуждение сильнее, чем длинный список. truncated про это и говорит. similarity — доля совпавших абзацев (0..1).

object
added
Added
integer
0
blocks
Blocks
Array<object>
DiffBlockOut

Одно расхождение. Номера абзацев 1-based, 0 — «на той стороне такого абзаца нет».

object
left
Left
string
""
left_no
Left No
integer
0
op
required
Op
string
Allowed values: added removed changed
right
Right
string
""
right_no
Right No
integer
0
changed
Changed
integer
0
identical
Identical
boolean
left_label
required
Left Label
string
removed
Removed
integer
0
right_label
required
Right Label
string
similarity
Similarity
number
0
truncated
Truncated
boolean
unchanged
Unchanged
integer
0
Example
{
"added": 0,
"blocks": [
{
"left": "",
"left_no": 0,
"op": "added",
"right": "",
"right_no": 0
}
],
"changed": 0,
"identical": false,
"removed": 0,
"similarity": 0,
"truncated": false,
"unchanged": 0
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
ctx
Context
object
input
Input
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
Examplegenerated
{
"detail": [
{
"ctx": {},
"input": "example",
"loc": [
"example"
],
"msg": "example",
"type": "example"
}
]
}