Project

General

Profile

APIForNG » History » Version 28

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