Project

General

Profile

APIForNG » History » Version 54

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