Project

General

Profile

APIForNG » History » Version 49

Denis Kildishev, 06/26/2023 06:12 PM

1 1 Denis Kildishev
h1. APIForNG
2 4 Denis Kildishev
3 1 Denis Kildishev
По текущей модели предполагается использование следующих методов:
4 2 Denis Kildishev
Для всех методов по умолчанию используется один заголовочный параметр
5
Authorization со значением Bearer 36AC0A0F7F271314B72986EB54DB2343
6 1 Denis Kildishev
7 45 Denis Kildishev
1.Получение списка проектов (updated 1.4)
8 1 Denis Kildishev
Method:
9
GET
10
Path:
11
http://localhost:9988/projects
12 45 Denis Kildishev
Без дополнительных параметров.
13
Возвращает пары "имя хранимое: имя представления"
14
Пример "some-local-project:project". При этом первое используется для обращения к определенному проекту, в том числе при помощи API вызовов, а второе - для ссылок на артефакты проекта в других проектах. Например, так можно представить другой проек в котором будет ссылка вида project::Requirements.
15 2 Denis Kildishev
Пример выдачи
16 1 Denis Kildishev
<pre><code class="javascript">
17
{
18
  "success" : true,
19
  "result" : {
20 45 Denis Kildishev
    "projects" : [ "Example":"Example", "з1":"з1", "someos-arch":"arch", "somestpo":"stpo"],
21 10 Denis Kildishev
    "count" : 4
22 1 Denis Kildishev
  }
23
}
24 8 Alexey Khoroshilov
</code></pre>
25 1 Denis Kildishev
26 2 Denis Kildishev
2. Получение содержимого проекта(иерархия), для expandable - ограниченное 1м уровнем 
27 1 Denis Kildishev
Method:
28
GET
29
Path:
30 2 Denis Kildishev
http://localhost:9988/projects/{arch}[/expandable]
31
Здесь {arch} - имя проекта, на данный момент регистрозависимо
32
Без дополнительных параметров
33
Пример выдачи
34 9 Denis Kildishev
<pre><code class="javascript">
35 1 Denis Kildishev
{
36 9 Denis Kildishev
  "success": true,
37
  "result": {
38
    "name": "arch",
39
    "nodes": [
40
      {
41
        "uuid": "243f4afe-1d28-4652-80b9-4ad123b415a4"
42
        "name": "Documents",
43 32 Denis Kildishev
        "id": "Documents",
44 9 Denis Kildishev
        "type": "DocFolder",
45 1 Denis Kildishev
46 9 Denis Kildishev
      },
47
      {
48
        "uuid": "7a5374ee-eb7a-4731-997d-5f52f00ebc2e"
49
        "name": "Requirements",
50 32 Denis Kildishev
        "id": "Requirements",
51 9 Denis Kildishev
        "type": "Requirement",
52
        "haveChildren":"true",
53
        "children": [
54
          {
55
            "uuid": "8ccd86e3-5689-43aa-9241-04728447e8f7",
56
            "name": "001",
57 32 Denis Kildishev
            "id": "001",
58 9 Denis Kildishev
            "type": "Requirement",
59
            "children": [],
60
          }
61
        ]
62
      },
63
      {
64
        "uuid": "ff42a6f4-f9ac-48c3-b41c-c36395df8a85",
65
        "name": "Reports",
66 32 Denis Kildishev
        "id": "Reports",
67 9 Denis Kildishev
        "type": "ReportFolder"
68
      }
69
    ],
70 1 Denis Kildishev
  }
71 9 Denis Kildishev
}
72 1 Denis Kildishev
</code></pre>
73 32 Denis Kildishev
по умолчанию выдает все дерево с базовым набором из нескольких полей - уникального id uuid, идентефикатора id, являющегося фактически именем json представления на диске, отображаемого имени name, типа type и массива потомков children. 
74 1 Denis Kildishev
поле haveChildren присутствует если у узла есть потомки и работает даже когда children не видны в режиме expandable для 2 уровня вложенности
75
при режиме [expandable] потомки выдаются до 1 уровня вложенности
76 29 Denis Kildishev
В случае отсутствия проекта выдаст ошибку E1.
77 1 Denis Kildishev
78
3. Получение данных по поддереву
79
Method:
80
GET
81
Path:
82
http://localhost:9988/projects/{TEST}/hierarchy/ff42a6f4-f9ac-48c3-b41c-c36395df8a85[/expandable]
83
{TEST} - имя проекта
84
id после /hierarchy это id узла для которого получается поддерево, режим /expandable работает аналогично проекту
85
Без дополнительных параметров
86
Пример выдачи
87 9 Denis Kildishev
<pre><code class="javascript">
88 1 Denis Kildishev
{
89 9 Denis Kildishev
  "success": true, 
90
  "result": 
91
  {
92
    "uuid": "ff42a6f4-f9ac-48c3-b41c-c36395df8a85",
93 1 Denis Kildishev
    "name": "Reports",
94 32 Denis Kildishev
    "id": "Reports",
95 9 Denis Kildishev
    "type": "ReportFolder",
96
    "parent": "ff42a6f4-f9ac-48c3-b41c-c36395df8a85"
97
  }
98 1 Denis Kildishev
}
99
</code></pre>
100
Содержимое result аналогично описанию одного узла и всех его потомков[или потомков 1 уровня вложенности для expandable] в выдаче проекта
101 29 Denis Kildishev
В случае отсутствия проекта выдаст ошибку E1.
102
В случае отсутствия узла для которого выдается поддерева возвращает ошибку E2.
103 1 Denis Kildishev
104 45 Denis Kildishev
4. Получение свойств узлов (updated 1.4)
105 1 Denis Kildishev
Method:
106
POST
107
Path:
108
http://localhost:9988/projects/TEST/getattributes/
109
В теле запроса передаются все uuid ы узлов для которых нужно выдать свойства. Конкретная реализация пока уточняется, текущее предположение - просто передавать в текстовом виде с разделителем ;. Возможно будут передаваться в качестве массива по аналогии с передачей данных форм. Пример "4db0fbf4-f383-4740-9d72-891ef112f742;ff42a6f4-f9ac-48c3-b41c-c36395df8a85".
110
Пример выдачи
111 9 Denis Kildishev
<pre><code class="javascript">
112 1 Denis Kildishev
{
113 9 Denis Kildishev
  "success": true,
114
  "result": {
115 1 Denis Kildishev
    "attributes": {
116 9 Denis Kildishev
      "4db0fbf4-f383-4740-9d72-891ef112f742":{
117
        "Вид": {
118
          "value": "",
119 45 Denis Kildishev
          "rawValue": "",
120 1 Denis Kildishev
          "type": "STRING"
121 9 Denis Kildishev
        },
122
        "_index": {
123
          "value": "1",
124 45 Denis Kildishev
          "rawValue": "1",
125 1 Denis Kildishev
          "type": "STRING"
126 9 Denis Kildishev
        },
127
        "_name": {
128
          "value": "Хронология",
129 45 Denis Kildishev
          "rawValue": "Хронология",
130 1 Denis Kildishev
          "type": "STRING"
131 9 Denis Kildishev
        },
132
        "_type": {
133
          "value": "Requirement",
134 45 Denis Kildishev
          "rawValue": "Requirement",
135 1 Denis Kildishev
          "type": "STRING"
136 9 Denis Kildishev
        },
137
        "_id": {
138
          "value": "001",
139 45 Denis Kildishev
          "rawValue": "001",
140 1 Denis Kildishev
          "type": "STRING"
141 9 Denis Kildishev
        },
142
        "ForeignID": {
143
          "value": "1",
144 45 Denis Kildishev
          "rawValue": "1",
145 9 Denis Kildishev
          "type": "STRING"
146
        }
147
      },
148
      "9dffaddf-a55a-4fa1-a3bc-4a5fade4169f":{
149 1 Denis Kildishev
        "Вид": {
150 9 Denis Kildishev
          "value": "Заголовок",
151
          "enumName": "Вид",
152
          "valueType": "STRING",
153 45 Denis Kildishev
          "rawValue": "Заголовок",
154 1 Denis Kildishev
          "type": "ENUM"
155 9 Denis Kildishev
        },
156
        "_index": {
157
          "value": "1",
158 45 Denis Kildishev
          "rawValue": "1",
159 1 Denis Kildishev
          "type": "STRING"
160
        },
161 9 Denis Kildishev
        "_tags": {
162
          "value": [
163
            {
164 45 Denis Kildishev
              "value": "section_Архитектура_ПО_Поток_управления",
165
              "rawValue": "section_Архитектура_ПО"
166 9 Denis Kildishev
            }
167
          ],
168 1 Denis Kildishev
          "valuesType": "STRING",
169 9 Denis Kildishev
          "type": "LIST"
170
        },
171
        "_type": {
172
          "value": "Requirement",
173 45 Denis Kildishev
          "rawValue": "Requirement",
174 9 Denis Kildishev
          "type": "STRING"
175
        },
176
        "_id": {
177
          "value": "Поток управления",
178 45 Denis Kildishev
          "rawValue": "Поток управления",
179 9 Denis Kildishev
          "type": "STRING"
180
        },
181 1 Denis Kildishev
        "_description": {
182
          "value": " ",
183 45 Denis Kildishev
          "rawValue": " ",
184 1 Denis Kildishev
          "type": "HTML"
185
        },
186 45 Denis Kildishev
        "exampleNotLocal": {
187
          "value": " ",
188
          "rawValue": " ",
189
          "scope": "SUBTREE",
190
          "origin": "0b4f4643-fab6-48c6-b694-b8256fc79e0a",
191
          "type": "HTML"
192
        },
193
        "exampleLocal": {
194
          "value": " ",
195
          "rawValue": " ",
196
          "scope": "SUBTREE",
197
          "type": "HTML"
198
        },
199
        "exampleLocal2": {
200
          "value": " ",
201
          "rawValue": " ",
202
          "scope": "DIRECT_CHILDREN",
203
          "type": "HTML"
204
        },
205 9 Denis Kildishev
        "ForeignID": {
206
          "value": "2",
207 45 Denis Kildishev
          "rawValue": "2",
208 9 Denis Kildishev
          "type": "STRING"
209
        }
210
      }
211
    }
212 1 Denis Kildishev
  }
213
}
214
</code></pre>
215 9 Denis Kildishev
216 3 Denis Kildishev
В примере выдача свойств двух узлов. Они расположены в result в виде словаря где ключ это id а значение - набор свойств узла.
217 45 Denis Kildishev
Свойства включают rawValue - базовое значение свойство которое непосредственно редактируется в инструменте и value - результат подстановки выражений вида {val} позволяющих использовать значения других переменных в текущей.
218
Также может встречаться "scope" указывающий на область доступности текущего свойства. Большая часть свойств имеют scope равный LOCAL и их значения доступны только на текущем узле. При видимости DIRECT_CHILDREN свойство также доступно в потомках узла в котором оно было определено, а SUBTREE позволяет обеспечить доступность свойства во всем поддереве потомков.
219
Также стоит отметить origin указывающий на место определения свойства в ситуации когда оно было определено в другом узле. То есть, если в узле присутствует scope и origin одновременно - это означает что это свойство было определено в другом узле. Если есть только scope - это свойство определено в текущем узле но доступно и в его потомках.
220 3 Denis Kildishev
221
5. Метод для работы с ресурсами. Текущая реализация
222
Method:
223
GET
224
Path:
225
http://localhost:9988/projects/{TEST}/nodes/{n}/resources/{resFolder}/{res}
226
{Test} имя проекта
227
{n} - uuid узла
228
{resFolder} папка с ресурсами(внутри {node_id}_resources, например "images")
229 4 Denis Kildishev
{res} имя файла
230
Возвращает ответ типа APPLICATION_OCTET_STREAM включающий в себя содержимое нужного ресурса. В теле также передается имя файла.
231
Если ресурса нет то выдается ответ NOT_FOUND типа plain text
232
Если передано некорректное имя папки с ресурсами(включающее недопустимые символы) то выдается ответ INVALID FOLDER типа plain text
233
234 1 Denis Kildishev
Предположительно появится метод получения ресурсов по списку для множества узлов но потом
235
Возможный формат передачи данных - json пары
236 9 Denis Kildishev
<pre><code class="javascript">
237 1 Denis Kildishev
{"uuid":"resfolder/resname","uuid2":"resfolder2/resname2"}
238 9 Denis Kildishev
</code></pre>
239 1 Denis Kildishev
Возможный тип возвращаемого значения - multipart/mixed. Но при этом размер возвращаемых данных может оказаться значительным
240 11 Denis Kildishev
241
6. Метод для получения связей
242
Method:
243
POST
244
Path:
245
http://localhost:9988/projects/{TEST}/getlinks
246
В теле запроса передаются все uuid ы узлов для которых нужно выдать свойства. Текущее предположение - в текстовом виде с разделителем ';'. Пример "4db0fbf4-f383-4740-9d72-891ef112f742;ff42a6f4-f9ac-48c3-b41c-c36395df8a85".
247
Результат включает в себя аналог словаря uuid:{ссылки}. Если для узла ссылок нет то в выдачу он не попадает.
248
ссылки разбиты на 4 раздела
249
linkToRelations - исходящие ссылки по свойствам
250
linkedByRelations - входящие ссылки по свойствам
251
linkToTerms - связи от использования термина из другого узла к определению в данном узле
252
linkedByTerms - связи от использования термина из данного узла к определению в другом узле
253
Пример выдачи
254
<pre><code class="javascript">
255
{
256
  "success": true,
257
  "result": {
258
    "links": {
259
      "7a5374ee-eb7a-4731-997d-5f52f00ebc2e": {
260
        "linkToRelations": {
261
          "reg": [
262
            {
263
              "haveChildren": true,
264 1 Denis Kildishev
              "name": "Архитектура ПО",
265 32 Denis Kildishev
              "id": "Архитектура ПО",
266 11 Denis Kildishev
              "type": "Requirement",
267
              "parent": "7a5374ee-eb7a-4731-997d-5f52f00ebc2e",
268
              "externalId": "9",
269
              "uuid": "188f8992-12e1-4acc-bf5a-fd568b1a2161"
270
            }
271
          ],
272
        },
273
        "linkedByRelations": {
274
          "d": [
275
            {
276 1 Denis Kildishev
              "haveChildren": true,
277 32 Denis Kildishev
              "name": "если E = 2 k -1",
278 11 Denis Kildishev
              "id": "if01",
279
              "type": "Requirement",
280
              "project": "SQRT",
281
              "parent": "ba51211b-d1c6-46ae-9333-bdad409b1fdb",
282
              "uuid": "127bfded-ae30-4365-9274-c116201a4ac1"
283
            },
284 1 Denis Kildishev
            {
285 32 Denis Kildishev
              "name": "001",
286 11 Denis Kildishev
              "id": "001",
287
              "type": "Requirement",
288
              "project": "SQRT",
289
              "parent": "ebc37a22-15c5-482d-9e4c-8c23461fca39",
290
              "uuid": "57b80f94-9011-43d8-844f-5bef23e37afb"
291
            },
292 1 Denis Kildishev
            {
293 32 Denis Kildishev
              "name": "002",
294 11 Denis Kildishev
              "id": "002",
295
              "type": "Requirement",
296
              "project": "SQRT",
297
              "parent": "4b40ef1a-de18-4d71-8825-2ef16b502cd0",
298
              "uuid": "658b8768-55b8-45b5-99b3-f03ba252acb7"
299
            }
300
          ]
301
        }
302
      }
303
    }
304
  }
305
} 
306 12 Denis Kildishev
</code></pre>
307 23 Denis Kildishev
308
6.5. Получение единичного ресурса
309
Method:
310
GET
311
Paths:
312 1 Denis Kildishev
http://localhost:9988/projects/someproject/resources/ed612ae4-ced3-408c-8d64-66d87981611f/subpath.xhtml
313 23 Denis Kildishev
или
314
http://localhost:9988/projects/someproject/resources/ed612ae4-ced3-408c-8d64-66d87981611f/images/1.jpg
315
Содержат имя проекта {someproject}, uuid узла {ed612ae4-ced3-408c-8d64-66d87981611f} и путь к ресурсу относительно папки {nodeId}_resources.
316 26 Denis Kildishev
Стоит отметить что если в описании присутствует конструкция вида {node.resURL}/{img}[пример src="{node.resURL}/RTOS_cf.png"] то для _description путь к картинке фактически будет составлять {nodeId}_resources/_description/{img}[src="...RTOS_CONTROL_FLOW_resources\_description\RTOS_cf.png"]
317 23 Denis Kildishev
318 45 Denis Kildishev
7. Установка свойств (updated 1.4)
319 12 Denis Kildishev
Method:
320 27 Denis Kildishev
PUT
321 1 Denis Kildishev
Datatype:
322 12 Denis Kildishev
multipart/form-data или application/json
323 14 Denis Kildishev
Path:
324 12 Denis Kildishev
http://localhost:9988/projects/{TEST}/nodes/{uuid_of_node}/attributes/
325 1 Denis Kildishev
В теле запроса передаются значения свойств которые требуется изменить. Пример запроса ниже. Значение свойств которые не переданы в запросе остаются неизмеными. Сами свойства передаются через application/json поле "input". Изображения передаются в виде прикрепленных файлов в поле images.//TODO добавить пример.
326 17 Denis Kildishev
При использовании типа application/json вместо multipart/form-data свойства передаются непосредственно в теле запроса
327 45 Denis Kildishev
Стоит отметить, что устанавливается значение соответсвующее выдаче rawValue, то есть с использованием конструкций вида {val}. Если установить значения после подстановки, то в результате эти данные будут утеряны
328 12 Denis Kildishev
<pre><code class="javascript">
329
{
330
  "attributes":
331
    {
332
      "test":
333
        {
334
          "value":"2"
335
        },
336
      "test2":
337
        {
338
          "value":"3", "type": "INT"
339
        }
340
    }
341
}
342
</code></pre>
343
Возвращает текущий набор видимых распологающихся в узле свойств
344
<pre><code class="javascript">
345
{
346
  "success": true,
347
  "result": {
348
    "attributes": {
349
      "test2": {
350
        "value": "3",
351
        "type": "INT"
352
      },
353
      "_index": {
354
        "value": "8",
355
        "type": "STRING"
356
      },
357
      "test": {
358
        "value": "2",
359
        "type": "STRING"
360
      },
361
      "_tags": {
362
        "valuesType": "STRING",
363
        "value": [
364
          {
365
            "value": "section_Архитектура_ПО"
366
          }
367
        ],
368
        "type": "LIST"
369
      },
370
      "_type": {
371
        "value": "Requirement",
372
        "type": "STRING"
373
      },
374
      "_id": {
375
        "value": "Архитектура ПО",
376
        "type": "STRING"
377
      }
378
    }
379
  }
380
}
381
</code></pre>
382 1 Denis Kildishev
383 27 Denis Kildishev
7b. Пример установки картинки
384
Запрос
385
http://127.0.0.1:9988/projects/TEST/nodes/4db0fbf4-f383-4740-9d72-891ef112f742/attributes
386
Метод
387
PUT
388
Тип значения
389
multipart/form-data
390
Два поля в содержимом
391
text part с именем input, тип application/json
392
{   "attributes":     {       "_description":         {         "type":"HTML",  "value":"2<img src='example.png'/>"          }     } }
393
file part с именем images, загружена картинка example.png
394
если нужно больше изображений то следует добавить еще полей с именем images.
395
396 12 Denis Kildishev
8. Замена свойств
397 27 Denis Kildishev
Аналогичен 7, отличается использованием метода POST. Удаляет все свойства которые не перечисленны в запросе
398 12 Denis Kildishev
399
9. Удаление свойств
400
Method:
401
DELETE
402
Path:
403
http://localhost:9988/projects/{TEST}/nodes/{n}/attributes/
404
{TEST} - имя проекта
405
{n} - uuid узла
406
В теле запроса передаются все имена свойств которые требуется удалить в текстовом виде с разделителем ';'. Пример
407
_name;attributeName
408
Результат включают в себя список оставшихся свойств. 
409
Пример выдачи
410
411
<pre><code class="javascript">
412
{
413 13 Denis Kildishev
  "success": true,
414
  "result": {
415
    "attributes": [
416
      "Вид",
417
      "Производное",
418
      "_index",
419
      "_tags",
420
      "_type",
421
      "_id",
422
      "ForeignID"
423
    ],
424
  }
425 1 Denis Kildishev
}
426
</code></pre>
427 14 Denis Kildishev
428 15 Denis Kildishev
10. Создание проекта
429
Method:
430
PUT
431
Path:
432
http://localhost:9988/projects/{new_name}
433
{new_name} - имя проекта
434
Возвращает 
435
<pre><code class="javascript">
436
{
437
  "success": true,
438
  "result": {}
439
}
440
</code></pre>
441
либо если проект уже существует 
442
<pre><code class="javascript">
443
{
444
  "success": false,
445
  "error": {
446
    "code": "project_exists",
447
    "message": "Specified project already exists",
448
    "extra": {}
449
  }
450
}
451
</code></pre>
452 16 Denis Kildishev
453
10. Удаление проекта
454
Method:
455
DELETE
456
Path:
457
http://localhost:9988/projects/{name}
458
{name} - имя проекта
459
Возвращает 
460
<pre><code class="javascript">
461
{
462
  "success": true,
463
  "result": {}
464
}
465
</code></pre>
466
либо если проект не найден
467
<pre><code class="javascript">
468
{
469
  "success": false,
470
  "error": {
471
    "code": "project_not_found",
472
    "message": "Specified project does not exists",
473
    "extra": {}
474
  }
475
}
476 1 Denis Kildishev
</code></pre>
477 17 Denis Kildishev
478
11. Создание узла
479
Method:
480
PUT
481
Path:
482
http://localhost:9988/projects/{project_name}/create
483
project_name - имя проекта
484
Datatype:
485 19 Denis Kildishev
multipart/form-data или application/json
486
Для multipart/form-data в теле содержится два поля - input содержит json с описанием узла, images содержит изображения.
487
Для application/json в теле содержится только json с описанием
488 17 Denis Kildishev
<pre><code class="javascript">
489
{
490
  "parent": "516bbbbc-babf-45d6-a146-61db334411be",
491
  "type":"Requirement",
492
  "id":"002",
493
  "attributes":{
494
    "test": {
495
      "value": "13d23",
496
      "type": "INT"
497
    },
498
    "_name": {
499
      "value": "{test} test 123"
500
    },
501
    "Ref": {
502
      "type": "REFERENCE",
503
      "value":"test"
504
    },
505
    "_description": {
506
      "value":"test desc <img src='strange.png' alt='strange.xcf'/>", "type":"HTML"
507
    }
508
  }
509
}
510
</code>
511
</pre>
512
id является опциональным, если его не указывать он будет формироваться автоматически
513
Пример возвращаемого значения
514
<pre><code class="javascript">
515
{
516
  "success": true,
517
  "result": {
518 1 Denis Kildishev
    "name": "13d23 test 123",
519 32 Denis Kildishev
    "id": "002",
520 17 Denis Kildishev
    "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3",
521
    "parent": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
522
    "attributes": {
523
      "Ref": {
524
        "value": "*Missing(Ref): 'test'",
525
        "type": "REFERENCE"
526
      },
527
      "test": {
528
        "value": "13d23",
529
        "type": "INT"
530
      },
531
      "_name": {
532
        "value": "13d23 test 123",
533
        "type": "STRING"
534
      },
535
      "_type": {
536
        "value": "Requirement",
537
        "type": "STRING"
538
      },
539
      "_id": {
540
        "value": "002",
541
        "type": "STRING"
542
      },
543
      "_description": {
544
        "value": "test desc <img src='strange.png' alt='strange.xcf'/>",
545
        "type": "HTML"
546
      }
547
    }
548
  }
549
}
550
</code>
551
</pre>
552 18 Denis Kildishev
553 1 Denis Kildishev
12. Удаление узла
554 18 Denis Kildishev
Method:
555 19 Denis Kildishev
DELETE
556 18 Denis Kildishev
Path:
557
http://localhost:9988/projects/{project_name}/node
558
project_name - имя проекта
559
В теле в виде текста содержится идентефикатор узла, например UUID, но можно использовать и другие способы идентефикации
560
Пример
561
<pre><code class="javascript">
562
03745ff6-6f9f-4517-b011-c92ca6081a47
563
</code>
564
</pre>
565
Пример удачного удаления. Возвращается иерархия на уровне родителя удаленного узла
566
<pre><code class="javascript">
567
{
568
  "success": true,
569
  "result": {
570
    "haveChildren": true,
571 1 Denis Kildishev
    "name": "Requirements",
572 32 Denis Kildishev
    "id": "Requirements",
573 18 Denis Kildishev
    "type": "Requirement",
574
    "uuid": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
575
    "children": [
576
      {
577 1 Denis Kildishev
        "name": "002",
578 32 Denis Kildishev
        "id": "002",
579 18 Denis Kildishev
        "type": "Requirement",
580
        "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3"
581
      },
582
      {
583 1 Denis Kildishev
        "name": "004",
584 32 Denis Kildishev
        "id": "004",
585 18 Denis Kildishev
        "type": "Requirement",
586
        "uuid": "fb594248-0739-4b74-9c82-7c6d84e09e18"
587
      },
588
      {
589 1 Denis Kildishev
        "name": "005",
590 32 Denis Kildishev
        "id": "005",
591 18 Denis Kildishev
        "type": "Requirement",
592
        "uuid": "90ae2683-d4c7-4a97-ae03-255f449f9318"
593
      },
594 1 Denis Kildishev
      {
595
       "name": "006",
596 32 Denis Kildishev
       "id": "006",
597 20 Denis Kildishev
       "type": "Requirement",
598
       "uuid": "2ce727b8-0740-4344-988f-3155d7cea5f2"
599
      },
600
      {
601 1 Denis Kildishev
        "name": "007",
602 32 Denis Kildishev
        "id": "007",
603 20 Denis Kildishev
        "type": "Requirement",
604
        "uuid": "40155667-942e-43a6-9861-3c5b05adccfb"
605
      },
606
    ],
607
  }
608
}
609 18 Denis Kildishev
</code>
610
</pre>
611
Пример с отсутствующим узлом
612
<pre><code class="javascript">
613
{
614
  "success": false,
615
  "error": {
616
    "code": "qid_not_found",
617
    "message": "Specified QID does not exists",
618
    "extra": {}
619
  }
620
}
621
</code>
622 1 Denis Kildishev
</pre>
623 20 Denis Kildishev
624
13. Перемещение узла
625
Method:
626
POST
627
Path:
628
http://localhost:9988/projects/{project_name}/nodes/{uuid}/move
629
project_name - имя проекта
630
uuid - идентефикатор узла который требуется переместить
631
В теле содержится json с описанием параметров переноса
632
Пример
633
<pre><code class="javascript">
634
{
635
  "parent":"2ce727b8-0740-4344-988f-3155d7cea5f2",
636
  "node":"90ae2683-d4c7-4a97-ae03-255f449f9318",
637
  "position":"1"
638
}
639
</code>
640
</pre>
641
parent - указание на нового родителя
642
node и position - опциональные поля для того чтобы переместить узел в определенное место, могут не включаться в запрос
643
node при указании задает узел относительно которого нужно определить новую позицию
644
position может принимать значение <0 или >=1. Если он <0 то узел будет перемещен на позицию до целевого узла, если >=0 то после.
645
Пример удачного удаления. Возвращается иерархия на уровне нового родителя узла
646
<pre><code class="javascript">
647
{
648
  "success": true,
649
  "result": {
650
    "haveChildren": true,
651 1 Denis Kildishev
    "name": "Requirements",
652 32 Denis Kildishev
    "id": "Requirements",
653 20 Denis Kildishev
    "type": "Requirement",
654
    "uuid": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
655
    "children": [
656
      {
657 1 Denis Kildishev
        "name": "002",
658 32 Denis Kildishev
        "id": "002",
659 20 Denis Kildishev
        "type": "Requirement",
660
        "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3"
661
      },
662
      {
663 1 Denis Kildishev
        "name": "004",
664 32 Denis Kildishev
        "id": "004",
665 20 Denis Kildishev
        "type": "Requirement",
666
        "uuid": "fb594248-0739-4b74-9c82-7c6d84e09e18"
667
      },
668
      {
669 1 Denis Kildishev
        "name": "005",
670 32 Denis Kildishev
        "id": "005",
671 20 Denis Kildishev
        "type": "Requirement",
672
        "uuid": "90ae2683-d4c7-4a97-ae03-255f449f9318"
673
      },
674
      {
675 1 Denis Kildishev
       "name": "006",
676 32 Denis Kildishev
       "id": "006",
677 20 Denis Kildishev
       "type": "Requirement",
678
       "uuid": "2ce727b8-0740-4344-988f-3155d7cea5f2"
679
      },
680
      {
681 1 Denis Kildishev
        "name": "007",
682 32 Denis Kildishev
        "id": "007",
683 20 Denis Kildishev
        "type": "Requirement",
684
        "uuid": "40155667-942e-43a6-9861-3c5b05adccfb"
685
      },
686
    ],
687
  }
688
}
689 21 Denis Kildishev
</code>
690
</pre>
691 24 Denis Kildishev
692
14. Начало транзакции
693
Method:
694
POST
695
Path:
696
http://localhost:9988/projects/{project_name}/startTransaction
697
Тело содержить имя транзакиции в виде plaint текста, обычно включает имя проекта
698
project_name - имя проекта
699
Начинает транзакцию с набором действий которые впоследствии можно отменить
700
701
15. Коммит транзакции
702
Method:
703
POST
704
Path:
705
http://localhost:9988/projects/{project_name}/commitTransaction
706
project_name - имя проекта
707
Применяет транзакцию
708
709
16. Откат транзакции
710
Method:
711
POST
712
Path:
713
http://localhost:9988/projects/{project_name}/rollbackTransaction
714
project_name - имя проекта
715
Отменяет действие транзакции и возвращает все в состояние до начала транзакции
716
717
17. Отмена прошлой транзакции
718
Method:
719 25 Denis Kildishev
GET
720 24 Denis Kildishev
Path:
721 25 Denis Kildishev
http://localhost:9988/projects/undo
722
Отменяет предидущую транзакцию.
723 1 Denis Kildishev
724
18. Возврат отмененной транзакции
725
Method:
726 25 Denis Kildishev
GET
727 1 Denis Kildishev
Path:
728 25 Denis Kildishev
http://localhost:9988/projects/redo
729
Возвращает отмененную транзакцию.
730
731
19. Список действий к отмене
732
Method:
733
GET
734
Path:
735
http://localhost:9988/projects/undoactions
736 1 Denis Kildishev
Получение списка действий которые можно отменить.
737 25 Denis Kildishev
Пример ответа
738 28 Denis Kildishev
<pre><code class="javascript">
739 25 Denis Kildishev
{
740
  "success" : true,
741
  "result" : {
742
    "transactions" : [ "Move Element", "Move Element" ]
743 1 Denis Kildishev
  }
744
}
745 28 Denis Kildishev
</code>
746
</pre>
747 25 Denis Kildishev
748
20. Список действий к возвращению
749
Method:
750
GET
751
Path:
752
http://localhost:9988/projects/redoactions
753 1 Denis Kildishev
Получение списка действий которые можно вернуть.
754 25 Denis Kildishev
Пример ответа
755 28 Denis Kildishev
<pre><code class="javascript">
756 25 Denis Kildishev
{
757
  "success" : true,
758
  "result" : {
759
    "transactions" : [ "Move Element", "Move Element" ]
760 1 Denis Kildishev
  }
761
}
762 28 Denis Kildishev
</code>
763
</pre>
764
765 30 Denis Kildishev
21. Получение связей для узлов
766
Method:
767
POST
768
Path:
769
http://localhost:9988/projects/{project_name}/getlinks
770
project_name - имя проекта
771
В теле запроса список идентификаторов узлов для которых требуется получить связи разделенный ;(например uuid ов)
772
Возвращает список связей и узлов если связи удачно разрешились. Пример возвращаемого значения для узла 99bf5072-822a-41a8-bb54-eb4755773e84.
773
<pre><code class="javascript">
774
{
775
  "success": true,
776
  "result": {
777
    "links": {
778
      "99bf5072-822a-41a8-bb54-eb4755773e84": {
779
        "linkedByTerms": {
780
          "uintptr_t": [
781
            {
782 1 Denis Kildishev
              "name": "JetConfigTreeGet_UINTPTR",
783 32 Denis Kildishev
              "id": "001",
784 30 Denis Kildishev
              "type": "TextNode",
785
              "parent": "c4ffcef4-2926-4c50-9d63-b5fe5ecf142f",
786
              "externalId": "3326",
787
              "uuid": "cda13be2-e8f5-4f28-9662-d4a83d2280d2"
788
            }
789
          ],
790
        },
791
        "linkedByRelations": {
792
          "term-uintptr_t": [
793
            {
794 1 Denis Kildishev
              "name": "JetConfigTreeGet_UINTPTR",
795 32 Denis Kildishev
              "id": "005",
796 30 Denis Kildishev
              "type": "TextNode",
797
              "parent": "c4ffcef4-2926-4c50-9d63-b5fe5ecf142f",
798
              "externalId": "3326",
799
              "uuid": "cda13be2-e8f5-4f28-9662-d4a83d2280d2"
800
            }
801
          ],
802
        }
803
      }
804
    }
805
  }
806
}
807
</code>
808
</pre>
809
Возвращаемое значение представляет собой объект links в котором расположен словарь uuid->связи. Информация о связях заключена в 4 подгруппах. Префикс linkTo обозначают исходящие ссылки, linkedBy входящие
810
linkToTerms
811
linkedByTerms
812
linkToRelations
813
linkedByRelations
814
Суффиксы обозначают вид связи - связь по свойствам Relations и связь по определению и использованию терминов Terms.
815
Подробнее про термины можно прочитать в доках http://requality.org/ru/glossary.ru.html#glossary_term
816
817 31 Denis Kildishev
22. Получить список определений перечисляемцых типов
818
Method:
819
GET
820
Path:
821
http://localhost:9988/projects/{project_name}/enumDefinitions
822
project_name - имя проекта
823
Возвращает для выбранного проекта список доступных определений перечисляемых типов в формате 
824
enumDefinitions:{словарь имя_перечисления->опредление}
825
где определение это {valuesType:тив,value:[значения]}
826
значения - набор пар {value:значение, comment:комментарий}
827
значение имеет тип определенный в valuesType. На данный момент поддерживаются только перечислимые типы со строками
828
комментарий - строка дополнительно описывающая значение. При этом на данный момент обычно пуста(null в выдаче на данный момент)
829
Пример выдачи значений
830
<pre><code class="javascript">
831
{
832
  "success": true,
833
  "result": {
834
    "enumDefinitions": {
835
      "Test": {
836
        "valuesType": "STRING",
837
        "values": [
838
          {
839
            "value": "val01",
840
            "comment": null
841
          },
842
          {
843
            "value": "val02",
844
            "comment": null
845
          }
846
        ]
847
      },
848
      "Test2": {
849
        "valuesType": "STRING",
850
        "values": [
851
          {
852
            "value": "val",
853
            "comment": null
854
          }
855
        ]
856
      }
857
    }
858
  }
859
}
860
</code>
861
</pre>
862 30 Denis Kildishev
863 33 Denis Kildishev
23. Поиск узлов по строке
864
Method:
865
POST
866
Path:
867
http://localhost:9988/projects/{project_name}/search
868
project_name - имя проекта
869 34 Denis Kildishev
В теле запроса передается следующее.
870
<pre><code class="javascript">
871
{
872
	"request":"A",
873
	"attributes":[],
874 35 Denis Kildishev
        "caseSensitive":"false",
875 34 Denis Kildishev
	"rootNode":"/Requirements"
876
}
877
</code>
878 1 Denis Kildishev
</pre>
879 35 Denis Kildishev
request - сам запрос, в attributes передается список имен свойств, в rootNode - корень поиска,
880
caseSensitive - запрос на строгий поиск по регистру при true
881 33 Denis Kildishev
Возвращает для выбранного проекта узлы для которых указанная подстрока есть в одном из публичных свойств. 
882
Пример выдачи значений
883
<pre><code class="javascript">
884
{
885
  "success": true,
886
  "result": {
887
    "nodes": [
888
      {
889
        "name": "test",
890
        "uuid": "c4ffcef4-2926-4c50-9d63-b5fe5ecf142f",
891
        "sequentialId": "11040"
892
      },
893
      {
894
        "name": "test2",
895
        "uuid": "cda13be2-e8f5-4f28-9662-d4a83d2280d2",
896
        "sequentialId": "11041"
897
      }
898
    }
899
  }
900
}
901
</code>
902
</pre>
903
904 36 Denis Kildishev
Отчеты.
905
 Получение настроек генерации отчетов
906
В рамках работы инструмента возможно генерировать отчеты по одному из доступных шаблонов.
907
Для этого сначала создается объект с настройками генерации а затем по нему становится возможным генерировать экземпляры отчетов
908
Для настроек генерации можно задавать свойсва также как с другими узлами
909
910
911 37 Denis Kildishev
24. Вызов генерации отчета (!внимание - генерируется только 1 отчет за раз)
912 36 Denis Kildishev
Method:
913
POST
914
Path:
915 1 Denis Kildishev
http://localhost:9988/projects/{project}/reportSettings/{r}/generate
916
{r}-uuid настроек генерации
917 37 Denis Kildishev
Возвращает ссылку на новый экземпляр отчета по шаблону, процесс генерации запускается
918 41 Denis Kildishev
919
<pre><code class="javascript">
920 1 Denis Kildishev
{
921
  "success": true,
922
  "result": {
923 36 Denis Kildishev
    "id": {
924 1 Denis Kildishev
      "qid": "/Reports/001(2021-10-13_22-41-23)",
925 36 Denis Kildishev
      "uuid": "aab07d4f-a79a-45f8-ba95-32cddc6b58f8",
926
      "uv": "Reports/001(2021-10-13_22-41-23)"
927
    },
928
    "href": null
929
  }
930
}
931 41 Denis Kildishev
</code></pre>
932 36 Denis Kildishev
933 49 Denis Kildishev
24.5 Получение идентефикатора последнего сгенерированного\генерируемого отчета
934
Method:
935
GET
936
Path:
937
http://localhost:9988/projects/{project}/reportSettings/{r}/lastGeneratedState
938
Позволяет получить идентефикатор генерируемого(или последнего сгенерированного) отчета если генерация была запущена в пределах текущего запуска сервера.
939
Если генерация не была запущена возвращает ошибку "Cannot get generation status because it was not started on current application session"
940
<pre><code class="javascript">
941
{
942
  "success": true,
943
  "result": {
944
    "id": {
945
      "qid": "/Reports/001(2021-10-13_22-41-23)",
946
      "uuid": "aab07d4f-a79a-45f8-ba95-32cddc6b58f8",
947
      "uv": "Reports/001(2021-10-13_22-41-23)"
948
    },
949
    "href": null
950
  }
951
}
952
</code></pre>
953
954 37 Denis Kildishev
25. Проверка статуса генерации отчета
955 36 Denis Kildishev
Method:
956 37 Denis Kildishev
POST
957 36 Denis Kildishev
Path:
958 37 Denis Kildishev
http://localhost:9988/projects/{project}/reports/{r}/generationStatus
959
Возвращает состояние генерации отчета
960 41 Denis Kildishev
<pre><code class="javascript">
961 36 Denis Kildishev
{
962
  "success": true,
963
  "result": {
964 37 Denis Kildishev
    "percentage": 0,
965
    "task": "init main generation - arch"
966
  }
967
}
968 41 Denis Kildishev
</code></pre>
969 37 Denis Kildishev
task имя выполняемой задачи
970
percentage - примерный общий процент
971
Если генерация отчета завершена в task записывается "generation over"
972 36 Denis Kildishev
973 37 Denis Kildishev
26. Получение полного содержимого отчета в виде zip архива(после генерации)
974 36 Denis Kildishev
Method:
975
GET
976
Path:
977
http://localhost:9988/projects/{project}/reports/{r}/export
978
Возвращает multipart/mixed
979
В теле записана длина архива и зип архив с содержимым отчета
980
981 37 Denis Kildishev
27. Просмотр содержимого отчета без ресурсов(после генерации)
982 36 Denis Kildishev
Method:
983
GET
984
Path:
985
http://localhost:9988/projects/{project}/reports/{r}
986
Возвращает html
987
988 38 Denis Kildishev
28. Получение списка шаблонов отчетов и их групп
989
Method:
990
GET
991
Path:
992
http://localhost:9988/projects/{project}/reportSettings/templates
993
Возвращает в формате
994
<pre><code class="javascript">
995
{
996
  "success": true,
997
  "result": [
998
    {
999
      "id": "typical",
1000
      "type": "group",
1001
      "name": "Отчёты для решения типовых задач",
1002
      "description": "Отчеты для решения типовых задач.",
1003
      "children": [
1004
        {
1005
          "id": "typical:com.unitesk.requality.reports.tableview",
1006
          "type": "template",
1007
          "name": "Чтение требований",
1008
          "description": "",
1009
          "children": null
1010
        },...
1011
      ]
1012
    },...
1013
  ]
1014
}
1015
</code></pre>
1016
id - id группы шаблонов или шаблона, id шаблона включает id группы
1017
type: template или group, шаблон или группа
1018
name - отображаемое имя группы или шаблона
1019
description - описание группы или шаблона
1020
children - список потомков
1021
1022
29. Получение информации по используемым в определенном шаблоне параметам
1023
Method:
1024
GET
1025
Path:
1026
http://localhost:9988/projects/{project}/reportSettings/templates/{templateId}
1027
Возвращает информацию об определенном шаблоне и используемых в нем параметрах. Пример для шаблона com.unitesk.requality.reports.revision
1028 40 Denis Kildishev
1029
<pre><code class="javascript">
1030 38 Denis Kildishev
{
1031
  "success" : true,
1032
  "result" : [ {
1033
    "name" : "simplifiedAttrs",
1034
    "description" : "Use siplified notation for attribtues",
1035
    "type" : "BOOL",
1036
    "defValue" : "true",
1037
    "paramDataSource" : null,
1038
    "attributes" : null
1039
  }, {
1040
    "name" : "isHTML",
1041
    "description" : "If true display html instead of raw markup",
1042
    "type" : "BOOL",
1043
    "defValue" : "true",
1044
    "paramDataSource" : null,
1045
    "attributes" : null
1046
  }, {
1047
    "name" : "sideBySide",
1048
    "description" : "If true enables special mode for comparation - shows version before and after near side by site in a single row.",
1049
    "type" : "BOOL",
1050
    "defValue" : "false",
1051
    "paramDataSource" : null,
1052
    "attributes" : null
1053
  }, {
1054
    "name" : "revisonPrev",
1055
    "description" : "Previous revision for comparation. Needs to be more recent than revisionCur. Also may be HEAD or '' for workspace.",
1056
    "type" : "REVISION,STRING",
1057
    "defValue" : "HEAD",
1058
    "paramDataSource" : "_repoTreePagedVersion",
1059
    "attributes" : null
1060
  }, {
1061
    "name" : "revisonCur",
1062
    "description" : "Next revision for comparation. Empty value is workspace version. Needs to be older than revisionPrev. Also may be HEAD or '' for workspace.",
1063
    "type" : "REVISION,STRING",
1064
    "defValue" : "",
1065
    "paramDataSource" : "_repoTreePagedVersion",
1066
    "attributes" : null
1067
  } ]
1068 1 Denis Kildishev
}
1069 40 Denis Kildishev
</code></pre>
1070
1071 38 Denis Kildishev
result содержит информацию по используемым в шаблоне параметрам. name - имя параметра, description - описание параметра, type - описание типов с разделителем в виде ",". Последний из типов всегда является одним из стандартных типов AttributeType(STRING, LIST и т.д.). При этом LIST использует нотацию LIST[TYPE], например LIST[STRING] или LIST[LIST[STRING]]. Для не стадартных типов могут быть созданы отдельные редакторы и обработчики. Для REVISION, например, предпологается использование источника данных _repoTreePagedVersion и представляет собой выбор ревизии из списка доступных.
1072
defValue - значение по умолчанию, имеет стандартный тип из type(самый правый)
1073
paramDataSource - источник данных для параметра, можно получить данные по запросу
1074
attributes - описание атрибутов в виде которых хранится параметр. При этом по умочанию параметр хранится как атрибут с именем, типом и значением аналогичным параметру
1075
1076
30.
1077
Method:
1078 42 Denis Kildishev
POST
1079 38 Denis Kildishev
Path:
1080
http://localhost:9988/projects/{project}/nodes/{node}/dataSources/{dataSourceId}
1081
dataSourceId - id источника данных, например _repoTreePagedVersion
1082
node - uuid определенного узла, например, настроек генерации отчета
1083
project - имя проекта
1084
Возвращается список значений по источнику данных
1085 1 Denis Kildishev
Например, для _repoTreePagedVersion
1086 40 Denis Kildishev
1087
<pre><code class="javascript">
1088 38 Denis Kildishev
{
1089
  "success": true,
1090
  "result": {
1091
    "values": {
1092
      "value": [
1093
        {
1094
          "value": {
1095
            "branch": {
1096
              "value": "refs/heads/master"
1097
            },
1098
            "parents": {
1099
              "value": "069d87f22753296191fa44821a26e6d0a33e7a88"
1100
            }
1101
          },
1102
          "valuesType": "STRING"
1103
        },
1104
        {
1105
          "value": {
1106
            "author": {
1107 39 Denis Kildishev
              "value": "name [email]"
1108 38 Denis Kildishev
            },
1109
            "branch": {
1110
              "value": "refs/heads/master"
1111
            },
1112
            "date": {
1113
              "value": "2022-01-16 01:59:06"
1114
            },
1115
            "fullMessage": {
1116
              "value": "[#2209][#101]Descr.\n\n"
1117
            },
1118
            "parents": {
1119
              "value": "8b9f27d089faa5afefdb1dff21f14d1d43746a19"
1120
            },
1121
            "revision": {
1122
              "value": "069d87f22753296191fa44821a26e6d0a33e7a88"
1123
            },
1124
            "shortMessage": {
1125
              "value": "[#2209][#101] Short message..."
1126
            }
1127
          },
1128
          "valuesType": "STRING"
1129
        },...
1130
      ],
1131
      "valuesType": "MAP"
1132
    }
1133
  }
1134 1 Denis Kildishev
}
1135 40 Denis Kildishev
</code></pre>
1136 38 Denis Kildishev
values содержит описание значений по источнику данных, в примере они имеют тип MAP со значениями типа STRING
1137
поддерживается также режим постраничной выдачи
1138
http://localhost:9988/projects/{project}/nodes/{node}/dataSources/{dataSourceId}/page10_0
1139
в нотации page10_0 10 - количество записей на странице, 0 - номер старницы
1140 36 Denis Kildishev
1141 43 Denis Kildishev
31.
1142
Method:
1143
GET
1144
Path:
1145
http://localhost:9988/resources/getApplicationSession
1146
Возвращает строку, идентефикатор сессии сервера
1147
1148
32.
1149
Method:
1150
GET
1151
Path:
1152
http://localhost:9988/resources/listWebSocketProviders
1153
Возвращает json объект с состоянием веб сокетов для разных применений. Пример выдачи ниже     
1154
{
1155
  "success": true,
1156
  "result": "[{\"port\":\"9920\",\"name\":\"markup\",\"status\":\"STARTED\"},{\"port\":\"9922\",\"name\":\"reportView\",\"status\":\"STARTED\"},{\"port\":\"9924\",\"name\":\"review\",\"status\":\"STARTED\"},{\"port\":\"9923\",\"name\":\"moduleeditor\",\"status\":\"STARTED\"},{\"port\":\"9921\",\"name\":\"unieditor\",\"status\":\"STARTED\"}]"
1157
}
1158
port - занятый порт, name - имя, статус - состояние связанного объекта
1159
1160
33.
1161
Method:
1162
GET
1163
Path:
1164
http://localhost:9988/resources/getResourcesProviderStatus
1165
Возвращает json описывающий состояние сервера ресурсов от которого можно получить содержимое документов, отчетов, редактора требований, связанные ресурсы
1166
Пример выдачи
1167
{
1168
  "success": true,
1169
  "result": "{\"port\":\"9807\",\"status\":\"STARTED\"}"
1170
}
1171
1172
34.
1173
Method:
1174
GET
1175
Path:
1176
http://localhost:9988/resources/startSession/{project}:{doc}:{port}
1177
Начинает новую сессию взаимодействия с одним из серверов веб сокетов. project - имя проекта, doc - UUID документа, port - номер порта сервера 
1178
Возвращает строку - номер сессии 
1179
1180
35.
1181
Method:
1182
GET
1183
Path:
1184
http://localhost:9988/resources/stopSession/{session}
1185
Используется чтобы закрыть открытую на 34. сессию и освободить ресурсы
1186 36 Denis Kildishev
1187 44 Denis Kildishev
36.
1188
Method:
1189
GET
1190
Path:
1191
http://localhost:9988/projects/{project}/descendantsUUIDs/
1192
Возвращает список всех потомков узла /Requirements
1193
Пример выдачи
1194
{
1195
  "success" : true,
1196
  "result" : {
1197
    "nodes" : [ UUID1, ... ]
1198
}
1199
1200
37.
1201
Method:
1202
GET
1203
Path:
1204
http://localhost:9988/projects/{project}/descendantsUUIDs/{node}
1205
Возвращает список всех потомков узла с UUID node
1206
Пример выдачи
1207
{
1208
  "success" : true,
1209
  "result" : {
1210
    "nodes" : [ UUID1, ... ]
1211
}
1212 46 Denis Kildishev
1213
38.
1214
Method:
1215
GET
1216
Path: /projects/{project}/nodes/{uuid}/source
1217
Возвращает представление соответствующего узла на диске в формате json.
1218
Предпологается использование в справочных целях или для отладки. Для получения данных и последующего редактирования узлов следует использовать соотвествующие средства API
1219
1220
39.
1221
Method: POST
1222
Path: /projects/{project}/nextNodeId/
1223
В теле запроса передаются:
1224
{"parent":~parent~, "type":~type~}
1225
parent - uuid узла, в котором требуется узнать следующий id для нового узла (обязательный параметр)
1226
type - тип создаваемого узла (необязательный)
1227
Возвращается следующий id для создаваемого потомка нужного типа (или, если тип явно не указан, типа узла родителя)
1228
1229 47 Denis Kildishev
40.
1230
Method: GET
1231
Path: /projects/{project}/nodes/{uuid}/relatedLocations
1232
Возвращает список связанных фрагментов и документов(или требований) при вызове на требовании\текстовом узле(документе) соотвественно
1233 48 Denis Kildishev
Пример выдачи для документа
1234
{
1235
  "success": true,
1236
  "result": [
1237
    {
1238
      "uuid": "74a3945c-e412-48f3-9af0-265363d2276e",
1239
      "type": "Location",
1240
      "uvid": "Documents/article_gerl_kild_khor_fallback.xhtml/74a3945c-e412-48f3-9af0-265363d2276e",
1241
      "qid": "/Documents/article_gerl_kild_khor_fallback.xhtml/74a3945c-e412-48f3-9af0-265363d2276e",
1242
      "label": "003#1",
1243
      "related": [
1244
        {
1245
          "uuid": "1853a87f-068c-44c3-ab44-60b8dc421d20",
1246
          "type": "Requirement",
1247
          "uvid": "003",
1248
          "qid": "/Requirements/003",
1249
          "label": "003"
1250
        }
1251
      ]
1252
    },
1253
    {
1254
      "uuid": "301e164c-59b7-47a0-92e3-e8a9b0ac141a",
1255
      "type": "Location",
1256
      "uvid": "Documents/article_gerl_kild_khor_fallback.xhtml/301e164c-59b7-47a0-92e3-e8a9b0ac141a",
1257
      "qid": "/Documents/article_gerl_kild_khor_fallback.xhtml/301e164c-59b7-47a0-92e3-e8a9b0ac141a",
1258
      "label": "003#2",
1259
      "related": [
1260
        {
1261
          "uuid": "1853a87f-068c-44c3-ab44-60b8dc421d20",
1262
          "type": "Requirement",
1263
          "uvid": "003",
1264
          "qid": "/Requirements/003",
1265
          "label": "003"
1266
        }
1267
      ]
1268
    }
1269
  ]
1270
}
1271 46 Denis Kildishev
1272 28 Denis Kildishev
E1. 
1273
Ошибка - проект не найден
1274
<pre><code class="javascript">
1275
{
1276
  "success": false,
1277
  "error": {
1278
    "code": "project_not_found",
1279
    "message": "Specified project does not exists",
1280
    "extra": {}
1281
  }
1282
}
1283
</code>
1284
</pre>
1285
1286
E2. 
1287
Ошибка - узел не найден
1288
<pre><code class="javascript">
1289
{
1290
  "success": false,
1291
  "error": {
1292
    "code": "node_not_found",
1293
    "message": "Specified node does not exists",
1294
    "extra": {}
1295
  }
1296
}
1297
</code>
1298
</pre>