Project

General

Profile

APIForNG » History » Version 53

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