Project

General

Profile

APIForNG » History » Version 52

Denis Kildishev, 10/27/2023 11:34 AM

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