Project

General

Profile

APIForNG » History » Version 41

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