REST API

Полная документация по REST API доступна в разделе "Справочник разработчика"

В справочнике разработчика выберите интересующую сущность и на дополнительной панели справа будет представлен полный перечень атрибутов, с их характеристиками, примеры запросов REST API, пример возвращаемых данных, объектная модель и примеры написания PHP-скриптов для автоматизации.

Аутентификация

Для использования REST API в каждом запросе необходимо передавать HTTP-заголовок с ключом:

'Devprom-Auth-Key': 'a806f6e2af139ea856db981c20278865'

Для получения ключа необходимо открыть профиль пользователя (меню на аватарке пользователя) и перейти в раздел "Ключи".

Примеры использования

Из консоли

# curl -X POST -H "Devprom-Auth-Key: a806f6e2af139ea856db981c20278865" -H "Content-Type:application/json" https://demo.myalm.ru/pm/support/api/v1/issues -d '{"Caption":"test123"}'

Под Windows:

# curl -X POST -H "Devprom-Auth-Key: a806f6e2af139ea856db981c20278865" -H "Content-Type:application/json" https://demo.myalm.ru/pm/support/api/v1/issues -d "{\"Caption\":\"test123\"}"

JavaScript

Если вы хотите отправлять заявки пользователей при помощи собственной Web-формы, то вам пригодится следующий пример, который отправляет тестовую заявку в проект поддержки. Перед использованием этого примера вам необходимо:

  1. Создать проект поддержки (или использовать любой существующий проект), из адресной строки браузера скопировать путь к разделам проекта, например, https://demo.myalm.ru/pm/support
  2. Получить ключ для использования API, позволяющий только сохранять заявки, но не разрешающий читать остальные заявки. Для этого нужно перейти по ссылке аналогичной для вашего проекта, например, https://demo.myalm.ru/pm/support/api/key-writeonly Полученный ключ необходимо подставить в заголовок Devprom-Auth-Key.
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <script src="https://code.jquery.com/jquery-1.11.3.min.js" type="text/javascript"></script>
 </head>
 <body>
 <script type="text/javascript">
     $(document).ready(function() {
         $.ajax({
             dataType: 'json',
             type: 'POST',
             url: 'https://demo.myalm.ru/pm/support/api/latest/issues',
             data: JSON.stringify({
                 'Caption':'Test',
                 'Author': 'somebody@mail.ru'
             }),
             headers: {
                 'Devprom-Auth-Key': 'a806f6e2af139ea856db981c20278865',
             },
             success: function(data) {
                 $('body').append('div').html('Issue id = ' + data.Id);
             }
         });
     });
 </script>
 </body>
 </html>

PHP

<?php
 $appUrl = 'https://demo.myalm.ru';
 $projectCode = 'kanban';
 $authKey = '974ccef5dd367cc448b8c1d1a9bdb2fd';
 
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
 curl_setopt($curl, CURLOPT_HEADER, false);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($curl, CURLOPT_TIMEOUT, 60);
 curl_setopt($curl, CURLOPT_HTTPHEADER,
 	array(
 		"Content-Type: application/json",
 		"Devprom-Auth-Key: ".$authKey
 	)
 );
 
 // get all issues
 curl_setopt($curl, CURLOPT_URL, $appUrl.'/pm/'.$projectCode.'/api/latest/issues');
 curl_setopt($curl, CURLOPT_HTTPGET, true);
 $result = curl_exec($curl);
 var_export(json_decode($result, true));
 
 // create a new issue
 curl_setopt($curl, CURLOPT_URL, $appUrl.'/pm/'.$projectCode.'/api/latest/issues');
 curl_setopt($curl, CURLOPT_POST, true);
 curl_setopt($curl, CURLOPT_HTTPGET, false);
 curl_setopt($curl, CURLOPT_POSTFIELDS, 
 	json_encode(
 		array(
 			'Caption' => 'Issue title',
 			'Description' => 'Issue description'
 		)
 	)
 );
 $result = curl_exec($curl);
 var_export(json_decode($result, true));
 
 curl_close($curl);

C

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Net;
 using System.IO;
 using System.Web.Script.Serialization;
 
 class DevpromRestService
 {
 	public void updateIssue()
 	{
 		// Получим список пожеланий в проекте
 		List<Issue> wasIssues = new JavaScriptSerializer().Deserialize<List<Issue>>(
 				makeRequest("GET", "issues")
 		);
 		
 		// Создаем новое пожелание
 		Issue newIssue = new JavaScriptSerializer().Deserialize<Issue>(
 				makeRequest("POST", "issues", new JavaScriptSerializer().Serialize(
 						new Issue
 						{
 							Caption = "Название нового пожелания",
 							Description = "Описание нового пожелания",
 							Priority = "2"
 						}
 				))
 		);
 
 		// Редактируем ранее созданное пожелание
 		makeRequest("PUT", "issues/" + newIssue.Id, new JavaScriptSerializer().Serialize(
 				new Issue
 				{
 					Description = "Изменненное название пожелания",
 					Priority = "1"
 				}
 		));
 
 		// Удалим созданное пожелание
 		makeRequest("DELETE", "issues/" + newIssue.Id);
 	}
 
 	public string makeRequest(string method, string route, string data = "")
 	{
 		HttpWebRequest request = (HttpWebRequest) WebRequest.Create(
 				TestHelper.appHostUrl + "/pm/<project-code>/api/v1/" + route
 		);
 
 		request.Method = method;
 
 		request.ContentLength = 0;
 		request.ContentType = "application/json";
 
 		request.Headers.Add(
 				"Authorization", 
 				"Basic " + Convert.ToBase64String(
 								Encoding.ASCII.GetBytes(
 										<логин-пользователя> + ":" + <пароль-пользователя>
 								)
 						   )
 		);
 
 		var bytes = Encoding.GetEncoding("windows-1251").GetBytes(data);
 
 		request.ContentLength = bytes.Length;
 
 		if (!String.IsNullOrEmpty(data))
 		{
 			using (var writeStream = request.GetRequestStream())
 			{
 				writeStream.Write(bytes, 0, bytes.Length);
 			}
 		}
 
 		HttpWebResponse response = (HttpWebResponse) request.GetResponse();
 		
 		if (response.StatusCode != HttpStatusCode.OK)
 		{
 			throw new ApplicationException(
 					String.Format("Request failed. Received HTTP {0}", response.StatusCode)
 			);
 		}
 
 		return (new StreamReader(response.GetResponseStream(), Encoding.UTF8)).ReadToEnd();
 	}
 }

Создание проекта

Для создания проекта программным путем необходимо отправить POST запрос:

curl -H "Content-Type: application/x-www-form-urlencoded" -X POST -d "Caption=Test1&CodeName=test1&Template=44&DemoData=N" http://<адерс_сервера>/projects/new?appkey=<ключ>
Название параметра Назначение параметра
Caption Название проекта
CodeName Кодовое имя проекта, используемое в адресной строке ссылок на проектные артефакты
Template Идентификатор процесса, который должен быть использован для создания проекта
DemoData N - не использовать демонстрационные данные
appkey Ключ для аутентификации, который можно получить на странице профиля участника (Ключи - Авторизация по URL), от имени которого будет создаваться проект. Данный пользователь автоматически становится координатором (руководителем) проекта.