Project

General

Profile

APIForNG » History » Version 27

Denis Kildishev, 02/26/2021 10:05 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
24 2 Denis Kildishev
Без дополнительных параметров
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
        "type": "DocFolder",
44 1 Denis Kildishev
45 9 Denis Kildishev
      },
46
      {
47
        "uuid": "7a5374ee-eb7a-4731-997d-5f52f00ebc2e"
48
        "name": "Requirements",
49
        "type": "Requirement",
50
        "haveChildren":"true",
51
        "children": [
52
          {
53
            "uuid": "8ccd86e3-5689-43aa-9241-04728447e8f7",
54
            "name": "001",
55
            "type": "Requirement",
56
            "children": [],
57
          }
58
        ]
59
      },
60
      {
61
        "uuid": "ff42a6f4-f9ac-48c3-b41c-c36395df8a85",
62
        "name": "Reports",
63
        "type": "ReportFolder"
64
      }
65
    ],
66
  }
67 1 Denis Kildishev
}
68 9 Denis Kildishev
</code></pre>
69 1 Denis Kildishev
по умолчанию выдает все дерево с базовым набором из нескольких полей - уникального id uuid, отображаемого имени name, типа type и массива потомков children. 
70
поле haveChildren присутствует если у узла есть потомки и работает даже когда children не видны в режиме expandable для 2 уровня вложенности
71
при режиме [expandable] потомки выдаются до 1 уровня вложенности
72
73
3. Получение данных по поддереву
74
Method:
75
GET
76
Path:
77
http://localhost:9988/projects/{TEST}/hierarchy/ff42a6f4-f9ac-48c3-b41c-c36395df8a85[/expandable]
78
{TEST} - имя проекта
79
id после /hierarchy это id узла для которого получается поддерево, режим /expandable работает аналогично проекту
80
Без дополнительных параметров
81
Пример выдачи
82 9 Denis Kildishev
<pre><code class="javascript">
83 1 Denis Kildishev
{
84 9 Denis Kildishev
  "success": true, 
85
  "result": 
86
  {
87
    "uuid": "ff42a6f4-f9ac-48c3-b41c-c36395df8a85",
88
    "name": "Reports",
89
    "type": "ReportFolder",
90
    "parent": "ff42a6f4-f9ac-48c3-b41c-c36395df8a85"
91
  }
92 1 Denis Kildishev
}
93 9 Denis Kildishev
</code></pre>
94 1 Denis Kildishev
Содержимое result аналогично описанию одного узла и всех его потомков[или потомков 1 уровня вложенности для expandable] в выдаче проекта
95
96
4. Получение свойств узлов
97
Method:
98
POST
99
Path:
100
http://localhost:9988/projects/TEST/getattributes/
101
В теле запроса передаются все uuid ы узлов для которых нужно выдать свойства. Конкретная реализация пока уточняется, текущее предположение - просто передавать в текстовом виде с разделителем ;. Возможно будут передаваться в качестве массива по аналогии с передачей данных форм. Пример "4db0fbf4-f383-4740-9d72-891ef112f742;ff42a6f4-f9ac-48c3-b41c-c36395df8a85".
102
Пример выдачи
103 9 Denis Kildishev
<pre><code class="javascript">
104 1 Denis Kildishev
{
105 9 Denis Kildishev
  "success": true,
106
  "result": {
107
    "attributes": {
108
      "4db0fbf4-f383-4740-9d72-891ef112f742":{
109
        "Вид": {
110
          "value": "",
111
          "type": "STRING"
112
        },
113
        "_index": {
114
          "value": "1",
115
          "type": "STRING"
116
        },
117
        "_name": {
118
          "value": "Хронология",
119
          "type": "STRING"
120
        },
121
        "_type": {
122
          "value": "Requirement",
123
          "type": "STRING"
124
        },
125
        "_id": {
126
          "value": "001",
127
          "type": "STRING"
128
        },
129
        "ForeignID": {
130
          "value": "1",
131
          "type": "STRING"
132
        }
133
      },
134
      "9dffaddf-a55a-4fa1-a3bc-4a5fade4169f":{
135
        "Вид": {
136
          "value": "Заголовок",
137
          "enumName": "Вид",
138
          "valueType": "STRING",
139
          "type": "ENUM"
140
        },
141
        "_index": {
142
          "value": "1",
143
          "type": "STRING"
144
        },
145
        "_tags": {
146
          "value": [
147
            {
148
              "value": "section_Архитектура_ПО_Поток_управления"
149
            }
150
          ],
151
          "valuesType": "STRING",
152
          "type": "LIST"
153
        },
154
        "_type": {
155
          "value": "Requirement",
156
          "type": "STRING"
157
        },
158
        "_id": {
159
          "value": "Поток управления",
160
          "type": "STRING"
161
        },
162
        "_description": {
163
          "value": " ",
164
          "type": "HTML"
165
        },
166
        "ForeignID": {
167
          "value": "2",
168
          "type": "STRING"
169
        }
170
      }
171
    }
172
  }
173 3 Denis Kildishev
}
174 9 Denis Kildishev
</code></pre>
175 3 Denis Kildishev
176
В примере выдача свойств двух узлов. Они расположены в result в виде словаря где ключ это id а значение - набор свойств узла.
177
178
5. Метод для работы с ресурсами. Текущая реализация
179
Method:
180
GET
181
Path:
182
http://localhost:9988/projects/{TEST}/nodes/{n}/resources/{resFolder}/{res}
183
{Test} имя проекта
184
{n} - uuid узла
185
{resFolder} папка с ресурсами(внутри {node_id}_resources, например "images")
186 4 Denis Kildishev
{res} имя файла
187
Возвращает ответ типа APPLICATION_OCTET_STREAM включающий в себя содержимое нужного ресурса. В теле также передается имя файла.
188
Если ресурса нет то выдается ответ NOT_FOUND типа plain text
189
Если передано некорректное имя папки с ресурсами(включающее недопустимые символы) то выдается ответ INVALID FOLDER типа plain text
190
191 1 Denis Kildishev
Предположительно появится метод получения ресурсов по списку для множества узлов но потом
192
Возможный формат передачи данных - json пары
193 9 Denis Kildishev
<pre><code class="javascript">
194 1 Denis Kildishev
{"uuid":"resfolder/resname","uuid2":"resfolder2/resname2"}
195 9 Denis Kildishev
</code></pre>
196 1 Denis Kildishev
Возможный тип возвращаемого значения - multipart/mixed. Но при этом размер возвращаемых данных может оказаться значительным
197 11 Denis Kildishev
198
6. Метод для получения связей
199
Method:
200
POST
201
Path:
202
http://localhost:9988/projects/{TEST}/getlinks
203
В теле запроса передаются все uuid ы узлов для которых нужно выдать свойства. Текущее предположение - в текстовом виде с разделителем ';'. Пример "4db0fbf4-f383-4740-9d72-891ef112f742;ff42a6f4-f9ac-48c3-b41c-c36395df8a85".
204
Результат включает в себя аналог словаря uuid:{ссылки}. Если для узла ссылок нет то в выдачу он не попадает.
205
ссылки разбиты на 4 раздела
206
linkToRelations - исходящие ссылки по свойствам
207
linkedByRelations - входящие ссылки по свойствам
208
linkToTerms - связи от использования термина из другого узла к определению в данном узле
209
linkedByTerms - связи от использования термина из данного узла к определению в другом узле
210
Пример выдачи
211
<pre><code class="javascript">
212
{
213
  "success": true,
214
  "result": {
215
    "links": {
216
      "7a5374ee-eb7a-4731-997d-5f52f00ebc2e": {
217
        "linkToRelations": {
218
          "reg": [
219
            {
220
              "haveChildren": true,
221
              "name": "Архитектура ПО",
222
              "type": "Requirement",
223
              "parent": "7a5374ee-eb7a-4731-997d-5f52f00ebc2e",
224
              "externalId": "9",
225
              "uuid": "188f8992-12e1-4acc-bf5a-fd568b1a2161"
226
            }
227
          ],
228
        },
229
        "linkedByRelations": {
230
          "d": [
231
            {
232
              "haveChildren": true,
233
              "name": "если E = 2 k -1",
234
              "type": "Requirement",
235
              "project": "SQRT",
236
              "parent": "ba51211b-d1c6-46ae-9333-bdad409b1fdb",
237
              "uuid": "127bfded-ae30-4365-9274-c116201a4ac1"
238
            },
239
            {
240
              "name": "001",
241
              "type": "Requirement",
242
              "project": "SQRT",
243
              "parent": "ebc37a22-15c5-482d-9e4c-8c23461fca39",
244
              "uuid": "57b80f94-9011-43d8-844f-5bef23e37afb"
245
            },
246
            {
247
              "name": "002",
248
              "type": "Requirement",
249
              "project": "SQRT",
250
              "parent": "4b40ef1a-de18-4d71-8825-2ef16b502cd0",
251
              "uuid": "658b8768-55b8-45b5-99b3-f03ba252acb7"
252
            }
253
          ]
254
        }
255
      }
256
    }
257
  }
258
} 
259
</code></pre>
260 12 Denis Kildishev
261 23 Denis Kildishev
6.5. Получение единичного ресурса
262
Method:
263
GET
264
Paths:
265
http://localhost:9988/projects/someproject/resources/ed612ae4-ced3-408c-8d64-66d87981611f/subpath.xhtml
266
или
267
http://localhost:9988/projects/someproject/resources/ed612ae4-ced3-408c-8d64-66d87981611f/images/1.jpg
268
Содержат имя проекта {someproject}, uuid узла {ed612ae4-ced3-408c-8d64-66d87981611f} и путь к ресурсу относительно папки {nodeId}_resources.
269 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"]
270 23 Denis Kildishev
271 12 Denis Kildishev
7. Установка свойств
272
Method:
273 27 Denis Kildishev
PUT
274 12 Denis Kildishev
Datatype:
275 14 Denis Kildishev
multipart/form-data или application/json
276 12 Denis Kildishev
Path:
277 1 Denis Kildishev
http://localhost:9988/projects/{TEST}/nodes/{uuid_of_node}/attributes/
278 17 Denis Kildishev
В теле запроса передаются значения свойств которые требуется изменить. Пример запроса ниже. Значение свойств которые не переданы в запросе остаются неизмеными. Сами свойства передаются через application/json поле "input". Изображения передаются в виде прикрепленных файлов в поле images.//TODO добавить пример.
279 14 Denis Kildishev
При использовании типа application/json вместо multipart/form-data свойства передаются непосредственно в теле запроса
280 12 Denis Kildishev
<pre><code class="javascript">
281
{
282
  "attributes":
283
    {
284
      "test":
285
        {
286
          "value":"2"
287
        },
288
      "test2":
289
        {
290
          "value":"3", "type": "INT"
291
        }
292
    }
293
}
294
</code></pre>
295
Возвращает текущий набор видимых распологающихся в узле свойств
296
<pre><code class="javascript">
297
{
298
  "success": true,
299
  "result": {
300
    "attributes": {
301
      "test2": {
302
        "value": "3",
303
        "type": "INT"
304
      },
305
      "_index": {
306
        "value": "8",
307
        "type": "STRING"
308
      },
309
      "test": {
310
        "value": "2",
311
        "type": "STRING"
312
      },
313
      "_tags": {
314
        "valuesType": "STRING",
315
        "value": [
316
          {
317
            "value": "section_Архитектура_ПО"
318
          }
319
        ],
320
        "type": "LIST"
321
      },
322
      "_type": {
323
        "value": "Requirement",
324
        "type": "STRING"
325
      },
326
      "_id": {
327
        "value": "Архитектура ПО",
328
        "type": "STRING"
329
      }
330
    }
331
  }
332
}
333
</code></pre>
334 1 Denis Kildishev
335 27 Denis Kildishev
7b. Пример установки картинки
336
Запрос
337
http://127.0.0.1:9988/projects/TEST/nodes/4db0fbf4-f383-4740-9d72-891ef112f742/attributes
338
Метод
339
PUT
340
Тип значения
341
multipart/form-data
342
Два поля в содержимом
343
text part с именем input, тип application/json
344
{   "attributes":     {       "_description":         {         "type":"HTML",  "value":"2<img src='example.png'/>"          }     } }
345
file part с именем images, загружена картинка example.png
346
если нужно больше изображений то следует добавить еще полей с именем images.
347
348 12 Denis Kildishev
8. Замена свойств
349 27 Denis Kildishev
Аналогичен 7, отличается использованием метода POST. Удаляет все свойства которые не перечисленны в запросе
350 12 Denis Kildishev
351
9. Удаление свойств
352
Method:
353
DELETE
354
Path:
355
http://localhost:9988/projects/{TEST}/nodes/{n}/attributes/
356
{TEST} - имя проекта
357
{n} - uuid узла
358
В теле запроса передаются все имена свойств которые требуется удалить в текстовом виде с разделителем ';'. Пример
359
_name;attributeName
360
Результат включают в себя список оставшихся свойств. 
361
Пример выдачи
362
363
<pre><code class="javascript">
364
{
365 13 Denis Kildishev
  "success": true,
366
  "result": {
367
    "attributes": [
368
      "Вид",
369
      "Производное",
370
      "_index",
371
      "_tags",
372
      "_type",
373
      "_id",
374
      "ForeignID"
375
    ],
376
  }
377 1 Denis Kildishev
}
378
</code></pre>
379 14 Denis Kildishev
380 15 Denis Kildishev
10. Создание проекта
381
Method:
382
PUT
383
Path:
384
http://localhost:9988/projects/{new_name}
385
{new_name} - имя проекта
386
Возвращает 
387
<pre><code class="javascript">
388
{
389
  "success": true,
390
  "result": {}
391
}
392
</code></pre>
393
либо если проект уже существует 
394
<pre><code class="javascript">
395
{
396
  "success": false,
397
  "error": {
398
    "code": "project_exists",
399
    "message": "Specified project already exists",
400
    "extra": {}
401
  }
402
}
403
</code></pre>
404 16 Denis Kildishev
405
10. Удаление проекта
406
Method:
407
DELETE
408
Path:
409
http://localhost:9988/projects/{name}
410
{name} - имя проекта
411
Возвращает 
412
<pre><code class="javascript">
413
{
414
  "success": true,
415
  "result": {}
416
}
417
</code></pre>
418
либо если проект не найден
419
<pre><code class="javascript">
420
{
421
  "success": false,
422
  "error": {
423
    "code": "project_not_found",
424
    "message": "Specified project does not exists",
425
    "extra": {}
426
  }
427
}
428 1 Denis Kildishev
</code></pre>
429 17 Denis Kildishev
430
11. Создание узла
431
Method:
432
PUT
433
Path:
434
http://localhost:9988/projects/{project_name}/create
435
project_name - имя проекта
436
Datatype:
437 19 Denis Kildishev
multipart/form-data или application/json
438
Для multipart/form-data в теле содержится два поля - input содержит json с описанием узла, images содержит изображения.
439
Для application/json в теле содержится только json с описанием
440 17 Denis Kildishev
<pre><code class="javascript">
441
{
442
  "parent": "516bbbbc-babf-45d6-a146-61db334411be",
443
  "type":"Requirement",
444
  "id":"002",
445
  "attributes":{
446
    "test": {
447
      "value": "13d23",
448
      "type": "INT"
449
    },
450
    "_name": {
451
      "value": "{test} test 123"
452
    },
453
    "Ref": {
454
      "type": "REFERENCE",
455
      "value":"test"
456
    },
457
    "_description": {
458
      "value":"test desc <img src='strange.png' alt='strange.xcf'/>", "type":"HTML"
459
    }
460
  }
461
}
462
</code>
463
</pre>
464
id является опциональным, если его не указывать он будет формироваться автоматически
465
Пример возвращаемого значения
466
<pre><code class="javascript">
467
{
468
  "success": true,
469
  "result": {
470
    "name": "13d23 test 123",
471
    "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3",
472
    "parent": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
473
    "attributes": {
474
      "Ref": {
475
        "value": "*Missing(Ref): 'test'",
476
        "type": "REFERENCE"
477
      },
478
      "test": {
479
        "value": "13d23",
480
        "type": "INT"
481
      },
482
      "_name": {
483
        "value": "13d23 test 123",
484
        "type": "STRING"
485
      },
486
      "_type": {
487
        "value": "Requirement",
488
        "type": "STRING"
489
      },
490
      "_id": {
491
        "value": "002",
492
        "type": "STRING"
493
      },
494
      "_description": {
495
        "value": "test desc <img src='strange.png' alt='strange.xcf'/>",
496
        "type": "HTML"
497
      }
498
    }
499
  }
500
}
501
</code>
502
</pre>
503 18 Denis Kildishev
504 1 Denis Kildishev
12. Удаление узла
505 18 Denis Kildishev
Method:
506 19 Denis Kildishev
DELETE
507 18 Denis Kildishev
Path:
508
http://localhost:9988/projects/{project_name}/node
509
project_name - имя проекта
510
В теле в виде текста содержится идентефикатор узла, например UUID, но можно использовать и другие способы идентефикации
511
Пример
512
<pre><code class="javascript">
513
03745ff6-6f9f-4517-b011-c92ca6081a47
514
</code>
515
</pre>
516
Пример удачного удаления. Возвращается иерархия на уровне родителя удаленного узла
517
<pre><code class="javascript">
518
{
519
  "success": true,
520
  "result": {
521
    "haveChildren": true,
522
    "name": "Requirements",
523
    "type": "Requirement",
524
    "uuid": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
525
    "children": [
526
      {
527
        "name": "002",
528
        "type": "Requirement",
529
        "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3"
530
      },
531
      {
532
        "name": "004",
533
        "type": "Requirement",
534
        "uuid": "fb594248-0739-4b74-9c82-7c6d84e09e18"
535
      },
536
      {
537
        "name": "005",
538
        "type": "Requirement",
539
        "uuid": "90ae2683-d4c7-4a97-ae03-255f449f9318"
540
      },
541 1 Denis Kildishev
      {
542 20 Denis Kildishev
       "name": "006",
543
       "type": "Requirement",
544
       "uuid": "2ce727b8-0740-4344-988f-3155d7cea5f2"
545
      },
546
      {
547
        "name": "007",
548
        "type": "Requirement",
549
        "uuid": "40155667-942e-43a6-9861-3c5b05adccfb"
550
      },
551
    ],
552
  }
553
}
554 18 Denis Kildishev
</code>
555
</pre>
556
Пример с отсутствующим узлом
557
<pre><code class="javascript">
558
{
559
  "success": false,
560
  "error": {
561
    "code": "qid_not_found",
562
    "message": "Specified QID does not exists",
563
    "extra": {}
564
  }
565
}
566
</code>
567 1 Denis Kildishev
</pre>
568 20 Denis Kildishev
569
13. Перемещение узла
570
Method:
571
POST
572
Path:
573
http://localhost:9988/projects/{project_name}/nodes/{uuid}/move
574
project_name - имя проекта
575
uuid - идентефикатор узла который требуется переместить
576
В теле содержится json с описанием параметров переноса
577
Пример
578
<pre><code class="javascript">
579
{
580
  "parent":"2ce727b8-0740-4344-988f-3155d7cea5f2",
581
  "node":"90ae2683-d4c7-4a97-ae03-255f449f9318",
582
  "position":"1"
583
}
584
</code>
585
</pre>
586
parent - указание на нового родителя
587
node и position - опциональные поля для того чтобы переместить узел в определенное место, могут не включаться в запрос
588
node при указании задает узел относительно которого нужно определить новую позицию
589
position может принимать значение <0 или >=1. Если он <0 то узел будет перемещен на позицию до целевого узла, если >=0 то после.
590
Пример удачного удаления. Возвращается иерархия на уровне нового родителя узла
591
<pre><code class="javascript">
592
{
593
  "success": true,
594
  "result": {
595
    "haveChildren": true,
596
    "name": "Requirements",
597
    "type": "Requirement",
598
    "uuid": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
599
    "children": [
600
      {
601
        "name": "002",
602
        "type": "Requirement",
603
        "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3"
604
      },
605
      {
606
        "name": "004",
607
        "type": "Requirement",
608
        "uuid": "fb594248-0739-4b74-9c82-7c6d84e09e18"
609
      },
610
      {
611
        "name": "005",
612
        "type": "Requirement",
613
        "uuid": "90ae2683-d4c7-4a97-ae03-255f449f9318"
614
      },
615
      {
616
       "name": "006",
617
       "type": "Requirement",
618
       "uuid": "2ce727b8-0740-4344-988f-3155d7cea5f2"
619
      },
620
      {
621
        "name": "007",
622
        "type": "Requirement",
623
        "uuid": "40155667-942e-43a6-9861-3c5b05adccfb"
624
      },
625
    ],
626
  }
627
}
628 21 Denis Kildishev
</code>
629
</pre>
630 24 Denis Kildishev
631
14. Начало транзакции
632
Method:
633
POST
634
Path:
635
http://localhost:9988/projects/{project_name}/startTransaction
636
Тело содержить имя транзакиции в виде plaint текста, обычно включает имя проекта
637
project_name - имя проекта
638
Начинает транзакцию с набором действий которые впоследствии можно отменить
639
640
15. Коммит транзакции
641
Method:
642
POST
643
Path:
644
http://localhost:9988/projects/{project_name}/commitTransaction
645
project_name - имя проекта
646
Применяет транзакцию
647
648
16. Откат транзакции
649
Method:
650
POST
651
Path:
652
http://localhost:9988/projects/{project_name}/rollbackTransaction
653
project_name - имя проекта
654
Отменяет действие транзакции и возвращает все в состояние до начала транзакции
655
656
17. Отмена прошлой транзакции
657
Method:
658 25 Denis Kildishev
GET
659 24 Denis Kildishev
Path:
660 25 Denis Kildishev
http://localhost:9988/projects/undo
661
Отменяет предидущую транзакцию.
662 1 Denis Kildishev
663
18. Возврат отмененной транзакции
664
Method:
665 25 Denis Kildishev
GET
666 1 Denis Kildishev
Path:
667 25 Denis Kildishev
http://localhost:9988/projects/redo
668
Возвращает отмененную транзакцию.
669
670
19. Список действий к отмене
671
Method:
672
GET
673
Path:
674
http://localhost:9988/projects/undoactions
675
Получение списка действий которые можно отменить.
676
Пример ответа
677
{
678
  "success" : true,
679
  "result" : {
680
    "transactions" : [ "Move Element", "Move Element" ]
681
  }
682
}
683
684
20. Список действий к возвращению
685
Method:
686
GET
687
Path:
688
http://localhost:9988/projects/redoactions
689
Получение списка действий которые можно вернуть.
690
Пример ответа
691
{
692
  "success" : true,
693
  "result" : {
694
    "transactions" : [ "Move Element", "Move Element" ]
695
  }
696
}