Project

General

Profile

APIForNG » History » Version 50

Denis Kildishev, 10/09/2023 01:18 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 50 Denis Kildishev
6.6. Получение списка ресурсов для узла
319
Method:
320
GET
321
Path:
322
http://localhost:9988/projects/someproject/ed612ae4-ced3-408c-8d64-66d87981611f/resources
323
Возвращает полный список ресурсов связанных с узлом с указанием на подпапки в которых они лежат
324
Пример
325
{
326
  "success": true,
327
  "result": {
328
    "resources": [
329
      "_description/325472601571f31e1bf00674c368d335.gif"
330
    ]
331
  }
332
}
333
334
6.7. Удаление отдельного ресурса
335
Method:
336
DELETE
337
Path:
338
http://localhost:9988/projects/someproject/ed612ae4-ced3-408c-8d64-66d87981611f/resources/{resFolder}/{resName}
339
или
340
http://localhost:9988/projects/someproject/ed612ae4-ced3-408c-8d64-66d87981611f/resources/{resName}
341
Удаляет ресурс и возвращает ответ 200 если удаление завершено успешно или 404 если ресурс не обнаружен
342
343
6.8. Удаление набора ресурсов
344
Method:
345
DELETE
346
Path:
347
http://localhost:9988/projects/someproject/ed612ae4-ced3-408c-8d64-66d87981611f/resources/
348
В теле запроса разделенные ; указаны пути к ресурсам которые требуется удалить. Например, "_description/325472601571f31e1bf00674c368d335.gif;_description/325472601571f31e1bf00674c368d335.png". Допускается оборачивание путей в ' или ". В результате запроса будет произведена попытка удалить указанные ресурсы.
349
Возвращает списки удаленных и не обнаруженных ресурсов. Пример
350
{
351
  "success": true,
352
  "result": {
353
    "deleted": {
354
      "resources": [
355
        "_description/633d183b020d2072b6b43d0782781032.jpeg"
356
      ]
357
    },
358
    "notfound": {
359
      "resources": [
360
        "_description/non-exists.png"
361
      ]
362
    }
363
  }
364
}
365
366 45 Denis Kildishev
7. Установка свойств (updated 1.4)
367 12 Denis Kildishev
Method:
368 27 Denis Kildishev
PUT
369 1 Denis Kildishev
Datatype:
370 12 Denis Kildishev
multipart/form-data или application/json
371 14 Denis Kildishev
Path:
372 12 Denis Kildishev
http://localhost:9988/projects/{TEST}/nodes/{uuid_of_node}/attributes/
373 1 Denis Kildishev
В теле запроса передаются значения свойств которые требуется изменить. Пример запроса ниже. Значение свойств которые не переданы в запросе остаются неизмеными. Сами свойства передаются через application/json поле "input". Изображения передаются в виде прикрепленных файлов в поле images.//TODO добавить пример.
374 17 Denis Kildishev
При использовании типа application/json вместо multipart/form-data свойства передаются непосредственно в теле запроса
375 45 Denis Kildishev
Стоит отметить, что устанавливается значение соответсвующее выдаче rawValue, то есть с использованием конструкций вида {val}. Если установить значения после подстановки, то в результате эти данные будут утеряны
376 12 Denis Kildishev
<pre><code class="javascript">
377
{
378
  "attributes":
379
    {
380
      "test":
381
        {
382
          "value":"2"
383
        },
384
      "test2":
385
        {
386
          "value":"3", "type": "INT"
387
        }
388
    }
389
}
390
</code></pre>
391
Возвращает текущий набор видимых распологающихся в узле свойств
392
<pre><code class="javascript">
393
{
394
  "success": true,
395
  "result": {
396
    "attributes": {
397
      "test2": {
398
        "value": "3",
399
        "type": "INT"
400
      },
401
      "_index": {
402
        "value": "8",
403
        "type": "STRING"
404
      },
405
      "test": {
406
        "value": "2",
407
        "type": "STRING"
408
      },
409
      "_tags": {
410
        "valuesType": "STRING",
411
        "value": [
412
          {
413
            "value": "section_Архитектура_ПО"
414
          }
415
        ],
416
        "type": "LIST"
417
      },
418
      "_type": {
419
        "value": "Requirement",
420
        "type": "STRING"
421
      },
422
      "_id": {
423
        "value": "Архитектура ПО",
424
        "type": "STRING"
425
      }
426
    }
427
  }
428
}
429
</code></pre>
430 1 Denis Kildishev
431 27 Denis Kildishev
7b. Пример установки картинки
432
Запрос
433
http://127.0.0.1:9988/projects/TEST/nodes/4db0fbf4-f383-4740-9d72-891ef112f742/attributes
434
Метод
435
PUT
436
Тип значения
437
multipart/form-data
438
Два поля в содержимом
439
text part с именем input, тип application/json
440
{   "attributes":     {       "_description":         {         "type":"HTML",  "value":"2<img src='example.png'/>"          }     } }
441
file part с именем images, загружена картинка example.png
442
если нужно больше изображений то следует добавить еще полей с именем images.
443
444 12 Denis Kildishev
8. Замена свойств
445 27 Denis Kildishev
Аналогичен 7, отличается использованием метода POST. Удаляет все свойства которые не перечисленны в запросе
446 12 Denis Kildishev
447
9. Удаление свойств
448
Method:
449
DELETE
450
Path:
451
http://localhost:9988/projects/{TEST}/nodes/{n}/attributes/
452
{TEST} - имя проекта
453
{n} - uuid узла
454
В теле запроса передаются все имена свойств которые требуется удалить в текстовом виде с разделителем ';'. Пример
455
_name;attributeName
456
Результат включают в себя список оставшихся свойств. 
457
Пример выдачи
458
459
<pre><code class="javascript">
460
{
461 13 Denis Kildishev
  "success": true,
462
  "result": {
463
    "attributes": [
464
      "Вид",
465
      "Производное",
466
      "_index",
467
      "_tags",
468
      "_type",
469
      "_id",
470
      "ForeignID"
471
    ],
472
  }
473 1 Denis Kildishev
}
474
</code></pre>
475 14 Denis Kildishev
476 15 Denis Kildishev
10. Создание проекта
477
Method:
478
PUT
479
Path:
480
http://localhost:9988/projects/{new_name}
481
{new_name} - имя проекта
482
Возвращает 
483
<pre><code class="javascript">
484
{
485
  "success": true,
486
  "result": {}
487
}
488
</code></pre>
489
либо если проект уже существует 
490
<pre><code class="javascript">
491
{
492
  "success": false,
493
  "error": {
494
    "code": "project_exists",
495
    "message": "Specified project already exists",
496
    "extra": {}
497
  }
498
}
499
</code></pre>
500 16 Denis Kildishev
501
10. Удаление проекта
502
Method:
503
DELETE
504
Path:
505
http://localhost:9988/projects/{name}
506
{name} - имя проекта
507
Возвращает 
508
<pre><code class="javascript">
509
{
510
  "success": true,
511
  "result": {}
512
}
513
</code></pre>
514
либо если проект не найден
515
<pre><code class="javascript">
516
{
517
  "success": false,
518
  "error": {
519
    "code": "project_not_found",
520
    "message": "Specified project does not exists",
521
    "extra": {}
522
  }
523
}
524 1 Denis Kildishev
</code></pre>
525 17 Denis Kildishev
526
11. Создание узла
527
Method:
528
PUT
529
Path:
530
http://localhost:9988/projects/{project_name}/create
531
project_name - имя проекта
532
Datatype:
533 19 Denis Kildishev
multipart/form-data или application/json
534
Для multipart/form-data в теле содержится два поля - input содержит json с описанием узла, images содержит изображения.
535
Для application/json в теле содержится только json с описанием
536 17 Denis Kildishev
<pre><code class="javascript">
537
{
538
  "parent": "516bbbbc-babf-45d6-a146-61db334411be",
539
  "type":"Requirement",
540
  "id":"002",
541
  "attributes":{
542
    "test": {
543
      "value": "13d23",
544
      "type": "INT"
545
    },
546
    "_name": {
547
      "value": "{test} test 123"
548
    },
549
    "Ref": {
550
      "type": "REFERENCE",
551
      "value":"test"
552
    },
553
    "_description": {
554
      "value":"test desc <img src='strange.png' alt='strange.xcf'/>", "type":"HTML"
555
    }
556
  }
557
}
558
</code>
559
</pre>
560
id является опциональным, если его не указывать он будет формироваться автоматически
561
Пример возвращаемого значения
562
<pre><code class="javascript">
563
{
564
  "success": true,
565
  "result": {
566 1 Denis Kildishev
    "name": "13d23 test 123",
567 32 Denis Kildishev
    "id": "002",
568 17 Denis Kildishev
    "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3",
569
    "parent": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
570
    "attributes": {
571
      "Ref": {
572
        "value": "*Missing(Ref): 'test'",
573
        "type": "REFERENCE"
574
      },
575
      "test": {
576
        "value": "13d23",
577
        "type": "INT"
578
      },
579
      "_name": {
580
        "value": "13d23 test 123",
581
        "type": "STRING"
582
      },
583
      "_type": {
584
        "value": "Requirement",
585
        "type": "STRING"
586
      },
587
      "_id": {
588
        "value": "002",
589
        "type": "STRING"
590
      },
591
      "_description": {
592
        "value": "test desc <img src='strange.png' alt='strange.xcf'/>",
593
        "type": "HTML"
594
      }
595
    }
596
  }
597
}
598
</code>
599
</pre>
600 18 Denis Kildishev
601 1 Denis Kildishev
12. Удаление узла
602 18 Denis Kildishev
Method:
603 19 Denis Kildishev
DELETE
604 18 Denis Kildishev
Path:
605
http://localhost:9988/projects/{project_name}/node
606
project_name - имя проекта
607
В теле в виде текста содержится идентефикатор узла, например UUID, но можно использовать и другие способы идентефикации
608
Пример
609
<pre><code class="javascript">
610
03745ff6-6f9f-4517-b011-c92ca6081a47
611
</code>
612
</pre>
613
Пример удачного удаления. Возвращается иерархия на уровне родителя удаленного узла
614
<pre><code class="javascript">
615
{
616
  "success": true,
617
  "result": {
618
    "haveChildren": true,
619 1 Denis Kildishev
    "name": "Requirements",
620 32 Denis Kildishev
    "id": "Requirements",
621 18 Denis Kildishev
    "type": "Requirement",
622
    "uuid": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
623
    "children": [
624
      {
625 1 Denis Kildishev
        "name": "002",
626 32 Denis Kildishev
        "id": "002",
627 18 Denis Kildishev
        "type": "Requirement",
628
        "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3"
629
      },
630
      {
631 1 Denis Kildishev
        "name": "004",
632 32 Denis Kildishev
        "id": "004",
633 18 Denis Kildishev
        "type": "Requirement",
634
        "uuid": "fb594248-0739-4b74-9c82-7c6d84e09e18"
635
      },
636
      {
637 1 Denis Kildishev
        "name": "005",
638 32 Denis Kildishev
        "id": "005",
639 18 Denis Kildishev
        "type": "Requirement",
640
        "uuid": "90ae2683-d4c7-4a97-ae03-255f449f9318"
641
      },
642 1 Denis Kildishev
      {
643
       "name": "006",
644 32 Denis Kildishev
       "id": "006",
645 20 Denis Kildishev
       "type": "Requirement",
646
       "uuid": "2ce727b8-0740-4344-988f-3155d7cea5f2"
647
      },
648
      {
649 1 Denis Kildishev
        "name": "007",
650 32 Denis Kildishev
        "id": "007",
651 20 Denis Kildishev
        "type": "Requirement",
652
        "uuid": "40155667-942e-43a6-9861-3c5b05adccfb"
653
      },
654
    ],
655
  }
656
}
657 18 Denis Kildishev
</code>
658
</pre>
659
Пример с отсутствующим узлом
660
<pre><code class="javascript">
661
{
662
  "success": false,
663
  "error": {
664
    "code": "qid_not_found",
665
    "message": "Specified QID does not exists",
666
    "extra": {}
667
  }
668
}
669
</code>
670 1 Denis Kildishev
</pre>
671 20 Denis Kildishev
672
13. Перемещение узла
673
Method:
674
POST
675
Path:
676
http://localhost:9988/projects/{project_name}/nodes/{uuid}/move
677
project_name - имя проекта
678
uuid - идентефикатор узла который требуется переместить
679
В теле содержится json с описанием параметров переноса
680
Пример
681
<pre><code class="javascript">
682
{
683
  "parent":"2ce727b8-0740-4344-988f-3155d7cea5f2",
684
  "node":"90ae2683-d4c7-4a97-ae03-255f449f9318",
685
  "position":"1"
686
}
687
</code>
688
</pre>
689
parent - указание на нового родителя
690
node и position - опциональные поля для того чтобы переместить узел в определенное место, могут не включаться в запрос
691
node при указании задает узел относительно которого нужно определить новую позицию
692
position может принимать значение <0 или >=1. Если он <0 то узел будет перемещен на позицию до целевого узла, если >=0 то после.
693
Пример удачного удаления. Возвращается иерархия на уровне нового родителя узла
694
<pre><code class="javascript">
695
{
696
  "success": true,
697
  "result": {
698
    "haveChildren": true,
699 1 Denis Kildishev
    "name": "Requirements",
700 32 Denis Kildishev
    "id": "Requirements",
701 20 Denis Kildishev
    "type": "Requirement",
702
    "uuid": "1f6e9e4f-4f63-446b-bddd-15838c15c212",
703
    "children": [
704
      {
705 1 Denis Kildishev
        "name": "002",
706 32 Denis Kildishev
        "id": "002",
707 20 Denis Kildishev
        "type": "Requirement",
708
        "uuid": "fbc83670-6993-4baf-8c8c-0b98aaab8ab3"
709
      },
710
      {
711 1 Denis Kildishev
        "name": "004",
712 32 Denis Kildishev
        "id": "004",
713 20 Denis Kildishev
        "type": "Requirement",
714
        "uuid": "fb594248-0739-4b74-9c82-7c6d84e09e18"
715
      },
716
      {
717 1 Denis Kildishev
        "name": "005",
718 32 Denis Kildishev
        "id": "005",
719 20 Denis Kildishev
        "type": "Requirement",
720
        "uuid": "90ae2683-d4c7-4a97-ae03-255f449f9318"
721
      },
722
      {
723 1 Denis Kildishev
       "name": "006",
724 32 Denis Kildishev
       "id": "006",
725 20 Denis Kildishev
       "type": "Requirement",
726
       "uuid": "2ce727b8-0740-4344-988f-3155d7cea5f2"
727
      },
728
      {
729 1 Denis Kildishev
        "name": "007",
730 32 Denis Kildishev
        "id": "007",
731 20 Denis Kildishev
        "type": "Requirement",
732
        "uuid": "40155667-942e-43a6-9861-3c5b05adccfb"
733
      },
734
    ],
735
  }
736
}
737 21 Denis Kildishev
</code>
738
</pre>
739 24 Denis Kildishev
740
14. Начало транзакции
741
Method:
742
POST
743
Path:
744
http://localhost:9988/projects/{project_name}/startTransaction
745
Тело содержить имя транзакиции в виде plaint текста, обычно включает имя проекта
746
project_name - имя проекта
747
Начинает транзакцию с набором действий которые впоследствии можно отменить
748
749
15. Коммит транзакции
750
Method:
751
POST
752
Path:
753
http://localhost:9988/projects/{project_name}/commitTransaction
754
project_name - имя проекта
755
Применяет транзакцию
756
757
16. Откат транзакции
758
Method:
759
POST
760
Path:
761
http://localhost:9988/projects/{project_name}/rollbackTransaction
762
project_name - имя проекта
763
Отменяет действие транзакции и возвращает все в состояние до начала транзакции
764
765
17. Отмена прошлой транзакции
766
Method:
767 25 Denis Kildishev
GET
768 24 Denis Kildishev
Path:
769 25 Denis Kildishev
http://localhost:9988/projects/undo
770
Отменяет предидущую транзакцию.
771 1 Denis Kildishev
772
18. Возврат отмененной транзакции
773
Method:
774 25 Denis Kildishev
GET
775 1 Denis Kildishev
Path:
776 25 Denis Kildishev
http://localhost:9988/projects/redo
777
Возвращает отмененную транзакцию.
778
779
19. Список действий к отмене
780
Method:
781
GET
782
Path:
783
http://localhost:9988/projects/undoactions
784 1 Denis Kildishev
Получение списка действий которые можно отменить.
785 25 Denis Kildishev
Пример ответа
786 28 Denis Kildishev
<pre><code class="javascript">
787 25 Denis Kildishev
{
788
  "success" : true,
789
  "result" : {
790
    "transactions" : [ "Move Element", "Move Element" ]
791 1 Denis Kildishev
  }
792
}
793 28 Denis Kildishev
</code>
794
</pre>
795 25 Denis Kildishev
796
20. Список действий к возвращению
797
Method:
798
GET
799
Path:
800
http://localhost:9988/projects/redoactions
801 1 Denis Kildishev
Получение списка действий которые можно вернуть.
802 25 Denis Kildishev
Пример ответа
803 28 Denis Kildishev
<pre><code class="javascript">
804 25 Denis Kildishev
{
805
  "success" : true,
806
  "result" : {
807
    "transactions" : [ "Move Element", "Move Element" ]
808 1 Denis Kildishev
  }
809
}
810 28 Denis Kildishev
</code>
811
</pre>
812
813 30 Denis Kildishev
21. Получение связей для узлов
814
Method:
815
POST
816
Path:
817
http://localhost:9988/projects/{project_name}/getlinks
818
project_name - имя проекта
819
В теле запроса список идентификаторов узлов для которых требуется получить связи разделенный ;(например uuid ов)
820
Возвращает список связей и узлов если связи удачно разрешились. Пример возвращаемого значения для узла 99bf5072-822a-41a8-bb54-eb4755773e84.
821
<pre><code class="javascript">
822
{
823
  "success": true,
824
  "result": {
825
    "links": {
826
      "99bf5072-822a-41a8-bb54-eb4755773e84": {
827
        "linkedByTerms": {
828
          "uintptr_t": [
829
            {
830 1 Denis Kildishev
              "name": "JetConfigTreeGet_UINTPTR",
831 32 Denis Kildishev
              "id": "001",
832 30 Denis Kildishev
              "type": "TextNode",
833
              "parent": "c4ffcef4-2926-4c50-9d63-b5fe5ecf142f",
834
              "externalId": "3326",
835
              "uuid": "cda13be2-e8f5-4f28-9662-d4a83d2280d2"
836
            }
837
          ],
838
        },
839
        "linkedByRelations": {
840
          "term-uintptr_t": [
841
            {
842 1 Denis Kildishev
              "name": "JetConfigTreeGet_UINTPTR",
843 32 Denis Kildishev
              "id": "005",
844 30 Denis Kildishev
              "type": "TextNode",
845
              "parent": "c4ffcef4-2926-4c50-9d63-b5fe5ecf142f",
846
              "externalId": "3326",
847
              "uuid": "cda13be2-e8f5-4f28-9662-d4a83d2280d2"
848
            }
849
          ],
850
        }
851
      }
852
    }
853
  }
854
}
855
</code>
856
</pre>
857
Возвращаемое значение представляет собой объект links в котором расположен словарь uuid->связи. Информация о связях заключена в 4 подгруппах. Префикс linkTo обозначают исходящие ссылки, linkedBy входящие
858
linkToTerms
859
linkedByTerms
860
linkToRelations
861
linkedByRelations
862
Суффиксы обозначают вид связи - связь по свойствам Relations и связь по определению и использованию терминов Terms.
863
Подробнее про термины можно прочитать в доках http://requality.org/ru/glossary.ru.html#glossary_term
864
865 31 Denis Kildishev
22. Получить список определений перечисляемцых типов
866
Method:
867
GET
868
Path:
869
http://localhost:9988/projects/{project_name}/enumDefinitions
870
project_name - имя проекта
871
Возвращает для выбранного проекта список доступных определений перечисляемых типов в формате 
872
enumDefinitions:{словарь имя_перечисления->опредление}
873
где определение это {valuesType:тив,value:[значения]}
874
значения - набор пар {value:значение, comment:комментарий}
875
значение имеет тип определенный в valuesType. На данный момент поддерживаются только перечислимые типы со строками
876
комментарий - строка дополнительно описывающая значение. При этом на данный момент обычно пуста(null в выдаче на данный момент)
877
Пример выдачи значений
878
<pre><code class="javascript">
879
{
880
  "success": true,
881
  "result": {
882
    "enumDefinitions": {
883
      "Test": {
884
        "valuesType": "STRING",
885
        "values": [
886
          {
887
            "value": "val01",
888
            "comment": null
889
          },
890
          {
891
            "value": "val02",
892
            "comment": null
893
          }
894
        ]
895
      },
896
      "Test2": {
897
        "valuesType": "STRING",
898
        "values": [
899
          {
900
            "value": "val",
901
            "comment": null
902
          }
903
        ]
904
      }
905
    }
906
  }
907
}
908
</code>
909
</pre>
910 30 Denis Kildishev
911 33 Denis Kildishev
23. Поиск узлов по строке
912
Method:
913
POST
914
Path:
915
http://localhost:9988/projects/{project_name}/search
916
project_name - имя проекта
917 34 Denis Kildishev
В теле запроса передается следующее.
918
<pre><code class="javascript">
919
{
920
	"request":"A",
921
	"attributes":[],
922 35 Denis Kildishev
        "caseSensitive":"false",
923 34 Denis Kildishev
	"rootNode":"/Requirements"
924
}
925
</code>
926 1 Denis Kildishev
</pre>
927 35 Denis Kildishev
request - сам запрос, в attributes передается список имен свойств, в rootNode - корень поиска,
928
caseSensitive - запрос на строгий поиск по регистру при true
929 33 Denis Kildishev
Возвращает для выбранного проекта узлы для которых указанная подстрока есть в одном из публичных свойств. 
930
Пример выдачи значений
931
<pre><code class="javascript">
932
{
933
  "success": true,
934
  "result": {
935
    "nodes": [
936
      {
937
        "name": "test",
938
        "uuid": "c4ffcef4-2926-4c50-9d63-b5fe5ecf142f",
939
        "sequentialId": "11040"
940
      },
941
      {
942
        "name": "test2",
943
        "uuid": "cda13be2-e8f5-4f28-9662-d4a83d2280d2",
944
        "sequentialId": "11041"
945
      }
946
    }
947
  }
948
}
949
</code>
950
</pre>
951
952 36 Denis Kildishev
Отчеты.
953
 Получение настроек генерации отчетов
954
В рамках работы инструмента возможно генерировать отчеты по одному из доступных шаблонов.
955
Для этого сначала создается объект с настройками генерации а затем по нему становится возможным генерировать экземпляры отчетов
956
Для настроек генерации можно задавать свойсва также как с другими узлами
957
958
959 37 Denis Kildishev
24. Вызов генерации отчета (!внимание - генерируется только 1 отчет за раз)
960 36 Denis Kildishev
Method:
961
POST
962
Path:
963 1 Denis Kildishev
http://localhost:9988/projects/{project}/reportSettings/{r}/generate
964
{r}-uuid настроек генерации
965 37 Denis Kildishev
Возвращает ссылку на новый экземпляр отчета по шаблону, процесс генерации запускается
966 41 Denis Kildishev
967
<pre><code class="javascript">
968 1 Denis Kildishev
{
969
  "success": true,
970
  "result": {
971 36 Denis Kildishev
    "id": {
972 1 Denis Kildishev
      "qid": "/Reports/001(2021-10-13_22-41-23)",
973 36 Denis Kildishev
      "uuid": "aab07d4f-a79a-45f8-ba95-32cddc6b58f8",
974
      "uv": "Reports/001(2021-10-13_22-41-23)"
975
    },
976
    "href": null
977
  }
978
}
979 41 Denis Kildishev
</code></pre>
980 36 Denis Kildishev
981 49 Denis Kildishev
24.5 Получение идентефикатора последнего сгенерированного\генерируемого отчета
982
Method:
983
GET
984
Path:
985
http://localhost:9988/projects/{project}/reportSettings/{r}/lastGeneratedState
986
Позволяет получить идентефикатор генерируемого(или последнего сгенерированного) отчета если генерация была запущена в пределах текущего запуска сервера.
987
Если генерация не была запущена возвращает ошибку "Cannot get generation status because it was not started on current application session"
988
<pre><code class="javascript">
989
{
990
  "success": true,
991
  "result": {
992
    "id": {
993
      "qid": "/Reports/001(2021-10-13_22-41-23)",
994
      "uuid": "aab07d4f-a79a-45f8-ba95-32cddc6b58f8",
995
      "uv": "Reports/001(2021-10-13_22-41-23)"
996
    },
997
    "href": null
998
  }
999
}
1000
</code></pre>
1001
1002 37 Denis Kildishev
25. Проверка статуса генерации отчета
1003 36 Denis Kildishev
Method:
1004 37 Denis Kildishev
POST
1005 36 Denis Kildishev
Path:
1006 37 Denis Kildishev
http://localhost:9988/projects/{project}/reports/{r}/generationStatus
1007
Возвращает состояние генерации отчета
1008 41 Denis Kildishev
<pre><code class="javascript">
1009 36 Denis Kildishev
{
1010
  "success": true,
1011
  "result": {
1012 37 Denis Kildishev
    "percentage": 0,
1013
    "task": "init main generation - arch"
1014
  }
1015
}
1016 41 Denis Kildishev
</code></pre>
1017 37 Denis Kildishev
task имя выполняемой задачи
1018
percentage - примерный общий процент
1019
Если генерация отчета завершена в task записывается "generation over"
1020 36 Denis Kildishev
1021 37 Denis Kildishev
26. Получение полного содержимого отчета в виде zip архива(после генерации)
1022 36 Denis Kildishev
Method:
1023
GET
1024
Path:
1025
http://localhost:9988/projects/{project}/reports/{r}/export
1026
Возвращает multipart/mixed
1027
В теле записана длина архива и зип архив с содержимым отчета
1028
1029 37 Denis Kildishev
27. Просмотр содержимого отчета без ресурсов(после генерации)
1030 36 Denis Kildishev
Method:
1031
GET
1032
Path:
1033
http://localhost:9988/projects/{project}/reports/{r}
1034
Возвращает html
1035
1036 38 Denis Kildishev
28. Получение списка шаблонов отчетов и их групп
1037
Method:
1038
GET
1039
Path:
1040
http://localhost:9988/projects/{project}/reportSettings/templates
1041
Возвращает в формате
1042
<pre><code class="javascript">
1043
{
1044
  "success": true,
1045
  "result": [
1046
    {
1047
      "id": "typical",
1048
      "type": "group",
1049
      "name": "Отчёты для решения типовых задач",
1050
      "description": "Отчеты для решения типовых задач.",
1051
      "children": [
1052
        {
1053
          "id": "typical:com.unitesk.requality.reports.tableview",
1054
          "type": "template",
1055
          "name": "Чтение требований",
1056
          "description": "",
1057
          "children": null
1058
        },...
1059
      ]
1060
    },...
1061
  ]
1062
}
1063
</code></pre>
1064
id - id группы шаблонов или шаблона, id шаблона включает id группы
1065
type: template или group, шаблон или группа
1066
name - отображаемое имя группы или шаблона
1067
description - описание группы или шаблона
1068
children - список потомков
1069
1070
29. Получение информации по используемым в определенном шаблоне параметам
1071
Method:
1072
GET
1073
Path:
1074
http://localhost:9988/projects/{project}/reportSettings/templates/{templateId}
1075
Возвращает информацию об определенном шаблоне и используемых в нем параметрах. Пример для шаблона com.unitesk.requality.reports.revision
1076 40 Denis Kildishev
1077
<pre><code class="javascript">
1078 38 Denis Kildishev
{
1079
  "success" : true,
1080
  "result" : [ {
1081
    "name" : "simplifiedAttrs",
1082
    "description" : "Use siplified notation for attribtues",
1083
    "type" : "BOOL",
1084
    "defValue" : "true",
1085
    "paramDataSource" : null,
1086
    "attributes" : null
1087
  }, {
1088
    "name" : "isHTML",
1089
    "description" : "If true display html instead of raw markup",
1090
    "type" : "BOOL",
1091
    "defValue" : "true",
1092
    "paramDataSource" : null,
1093
    "attributes" : null
1094
  }, {
1095
    "name" : "sideBySide",
1096
    "description" : "If true enables special mode for comparation - shows version before and after near side by site in a single row.",
1097
    "type" : "BOOL",
1098
    "defValue" : "false",
1099
    "paramDataSource" : null,
1100
    "attributes" : null
1101
  }, {
1102
    "name" : "revisonPrev",
1103
    "description" : "Previous revision for comparation. Needs to be more recent than revisionCur. Also may be HEAD or '' for workspace.",
1104
    "type" : "REVISION,STRING",
1105
    "defValue" : "HEAD",
1106
    "paramDataSource" : "_repoTreePagedVersion",
1107
    "attributes" : null
1108
  }, {
1109
    "name" : "revisonCur",
1110
    "description" : "Next revision for comparation. Empty value is workspace version. Needs to be older than revisionPrev. Also may be HEAD or '' for workspace.",
1111
    "type" : "REVISION,STRING",
1112
    "defValue" : "",
1113
    "paramDataSource" : "_repoTreePagedVersion",
1114
    "attributes" : null
1115
  } ]
1116 1 Denis Kildishev
}
1117 40 Denis Kildishev
</code></pre>
1118
1119 38 Denis Kildishev
result содержит информацию по используемым в шаблоне параметрам. name - имя параметра, description - описание параметра, type - описание типов с разделителем в виде ",". Последний из типов всегда является одним из стандартных типов AttributeType(STRING, LIST и т.д.). При этом LIST использует нотацию LIST[TYPE], например LIST[STRING] или LIST[LIST[STRING]]. Для не стадартных типов могут быть созданы отдельные редакторы и обработчики. Для REVISION, например, предпологается использование источника данных _repoTreePagedVersion и представляет собой выбор ревизии из списка доступных.
1120
defValue - значение по умолчанию, имеет стандартный тип из type(самый правый)
1121
paramDataSource - источник данных для параметра, можно получить данные по запросу
1122
attributes - описание атрибутов в виде которых хранится параметр. При этом по умочанию параметр хранится как атрибут с именем, типом и значением аналогичным параметру
1123
1124
30.
1125
Method:
1126 42 Denis Kildishev
POST
1127 38 Denis Kildishev
Path:
1128
http://localhost:9988/projects/{project}/nodes/{node}/dataSources/{dataSourceId}
1129
dataSourceId - id источника данных, например _repoTreePagedVersion
1130
node - uuid определенного узла, например, настроек генерации отчета
1131
project - имя проекта
1132
Возвращается список значений по источнику данных
1133 1 Denis Kildishev
Например, для _repoTreePagedVersion
1134 40 Denis Kildishev
1135
<pre><code class="javascript">
1136 38 Denis Kildishev
{
1137
  "success": true,
1138
  "result": {
1139
    "values": {
1140
      "value": [
1141
        {
1142
          "value": {
1143
            "branch": {
1144
              "value": "refs/heads/master"
1145
            },
1146
            "parents": {
1147
              "value": "069d87f22753296191fa44821a26e6d0a33e7a88"
1148
            }
1149
          },
1150
          "valuesType": "STRING"
1151
        },
1152
        {
1153
          "value": {
1154
            "author": {
1155 39 Denis Kildishev
              "value": "name [email]"
1156 38 Denis Kildishev
            },
1157
            "branch": {
1158
              "value": "refs/heads/master"
1159
            },
1160
            "date": {
1161
              "value": "2022-01-16 01:59:06"
1162
            },
1163
            "fullMessage": {
1164
              "value": "[#2209][#101]Descr.\n\n"
1165
            },
1166
            "parents": {
1167
              "value": "8b9f27d089faa5afefdb1dff21f14d1d43746a19"
1168
            },
1169
            "revision": {
1170
              "value": "069d87f22753296191fa44821a26e6d0a33e7a88"
1171
            },
1172
            "shortMessage": {
1173
              "value": "[#2209][#101] Short message..."
1174
            }
1175
          },
1176
          "valuesType": "STRING"
1177
        },...
1178
      ],
1179
      "valuesType": "MAP"
1180
    }
1181
  }
1182 1 Denis Kildishev
}
1183 40 Denis Kildishev
</code></pre>
1184 38 Denis Kildishev
values содержит описание значений по источнику данных, в примере они имеют тип MAP со значениями типа STRING
1185
поддерживается также режим постраничной выдачи
1186
http://localhost:9988/projects/{project}/nodes/{node}/dataSources/{dataSourceId}/page10_0
1187
в нотации page10_0 10 - количество записей на странице, 0 - номер старницы
1188 36 Denis Kildishev
1189 43 Denis Kildishev
31.
1190
Method:
1191
GET
1192
Path:
1193
http://localhost:9988/resources/getApplicationSession
1194
Возвращает строку, идентефикатор сессии сервера
1195
1196
32.
1197
Method:
1198
GET
1199
Path:
1200
http://localhost:9988/resources/listWebSocketProviders
1201
Возвращает json объект с состоянием веб сокетов для разных применений. Пример выдачи ниже     
1202
{
1203
  "success": true,
1204
  "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\"}]"
1205
}
1206
port - занятый порт, name - имя, статус - состояние связанного объекта
1207
1208
33.
1209
Method:
1210
GET
1211
Path:
1212
http://localhost:9988/resources/getResourcesProviderStatus
1213
Возвращает json описывающий состояние сервера ресурсов от которого можно получить содержимое документов, отчетов, редактора требований, связанные ресурсы
1214
Пример выдачи
1215
{
1216
  "success": true,
1217
  "result": "{\"port\":\"9807\",\"status\":\"STARTED\"}"
1218
}
1219
1220
34.
1221
Method:
1222
GET
1223
Path:
1224
http://localhost:9988/resources/startSession/{project}:{doc}:{port}
1225
Начинает новую сессию взаимодействия с одним из серверов веб сокетов. project - имя проекта, doc - UUID документа, port - номер порта сервера 
1226
Возвращает строку - номер сессии 
1227
1228
35.
1229
Method:
1230
GET
1231
Path:
1232
http://localhost:9988/resources/stopSession/{session}
1233
Используется чтобы закрыть открытую на 34. сессию и освободить ресурсы
1234 36 Denis Kildishev
1235 44 Denis Kildishev
36.
1236
Method:
1237
GET
1238
Path:
1239
http://localhost:9988/projects/{project}/descendantsUUIDs/
1240
Возвращает список всех потомков узла /Requirements
1241
Пример выдачи
1242
{
1243
  "success" : true,
1244
  "result" : {
1245
    "nodes" : [ UUID1, ... ]
1246
}
1247
1248
37.
1249
Method:
1250
GET
1251
Path:
1252
http://localhost:9988/projects/{project}/descendantsUUIDs/{node}
1253
Возвращает список всех потомков узла с UUID node
1254
Пример выдачи
1255
{
1256
  "success" : true,
1257
  "result" : {
1258
    "nodes" : [ UUID1, ... ]
1259
}
1260 46 Denis Kildishev
1261
38.
1262
Method:
1263
GET
1264
Path: /projects/{project}/nodes/{uuid}/source
1265
Возвращает представление соответствующего узла на диске в формате json.
1266
Предпологается использование в справочных целях или для отладки. Для получения данных и последующего редактирования узлов следует использовать соотвествующие средства API
1267
1268
39.
1269
Method: POST
1270
Path: /projects/{project}/nextNodeId/
1271
В теле запроса передаются:
1272
{"parent":~parent~, "type":~type~}
1273
parent - uuid узла, в котором требуется узнать следующий id для нового узла (обязательный параметр)
1274
type - тип создаваемого узла (необязательный)
1275
Возвращается следующий id для создаваемого потомка нужного типа (или, если тип явно не указан, типа узла родителя)
1276
1277 47 Denis Kildishev
40.
1278
Method: GET
1279
Path: /projects/{project}/nodes/{uuid}/relatedLocations
1280
Возвращает список связанных фрагментов и документов(или требований) при вызове на требовании\текстовом узле(документе) соотвественно
1281 48 Denis Kildishev
Пример выдачи для документа
1282
{
1283
  "success": true,
1284
  "result": [
1285
    {
1286
      "uuid": "74a3945c-e412-48f3-9af0-265363d2276e",
1287
      "type": "Location",
1288
      "uvid": "Documents/article_gerl_kild_khor_fallback.xhtml/74a3945c-e412-48f3-9af0-265363d2276e",
1289
      "qid": "/Documents/article_gerl_kild_khor_fallback.xhtml/74a3945c-e412-48f3-9af0-265363d2276e",
1290
      "label": "003#1",
1291
      "related": [
1292
        {
1293
          "uuid": "1853a87f-068c-44c3-ab44-60b8dc421d20",
1294
          "type": "Requirement",
1295
          "uvid": "003",
1296
          "qid": "/Requirements/003",
1297
          "label": "003"
1298
        }
1299
      ]
1300
    },
1301
    {
1302
      "uuid": "301e164c-59b7-47a0-92e3-e8a9b0ac141a",
1303
      "type": "Location",
1304
      "uvid": "Documents/article_gerl_kild_khor_fallback.xhtml/301e164c-59b7-47a0-92e3-e8a9b0ac141a",
1305
      "qid": "/Documents/article_gerl_kild_khor_fallback.xhtml/301e164c-59b7-47a0-92e3-e8a9b0ac141a",
1306
      "label": "003#2",
1307
      "related": [
1308
        {
1309
          "uuid": "1853a87f-068c-44c3-ab44-60b8dc421d20",
1310
          "type": "Requirement",
1311
          "uvid": "003",
1312
          "qid": "/Requirements/003",
1313
          "label": "003"
1314
        }
1315
      ]
1316
    }
1317
  ]
1318
}
1319 46 Denis Kildishev
1320 28 Denis Kildishev
E1. 
1321
Ошибка - проект не найден
1322
<pre><code class="javascript">
1323
{
1324
  "success": false,
1325
  "error": {
1326
    "code": "project_not_found",
1327
    "message": "Specified project does not exists",
1328
    "extra": {}
1329
  }
1330
}
1331
</code>
1332
</pre>
1333
1334
E2. 
1335
Ошибка - узел не найден
1336
<pre><code class="javascript">
1337
{
1338
  "success": false,
1339
  "error": {
1340
    "code": "node_not_found",
1341
    "message": "Specified node does not exists",
1342
    "extra": {}
1343
  }
1344
}
1345
</code>
1346
</pre>