API багзиллы для внешних систем

From Wiki4Intranet
Jump to: navigation, search

В процессе работ по TN-ERP встала необходимость получения из Bugzilla следующих данных:

По набору багов получить ряд полей

(Имена полей, идентификаторы багов) → (множество значений полей)

Проще всего дёрнуть урл вида:

http://bugs.office.custis.ru/bugs/show_bug.cgi?id=<ID1>&id=<ID2>&ctype=xml&includefield=<FIELD1>&includefield=<FIELD2>&includefield=<FIELD3>

То есть параметры следующие:

  1. ID багов передаются как id=1&id=2&id=3&…
  2. Параметр ctype=xml
  3. Имена полей передаются как includefield=field1&includefield=field2&…

Получить все продукты по имени классификации

Например, «TradeNets». (Имя классификации) → множество (ID продуктов, имена продуктов)

Метод: Product.get_products_by_classification(classification=Имя_классификации)
Ответ:
<status>ok</status><products><i><id>ID продукта</id><name>Имя продукта</name></i>...</products>

Создать/изменить/удалить задачу WBS

(Имя задачи, sortkey, add) → статус {ok, alreadyexists}

Метод: Field.add_value(field=cf_wbs&value=Имя_задачи&sortkey=Сорткей)
Ответ: <status>ok</status><id>ID созданного значения</id>
Ответ: <status>value_already_exists</status>

(Старое имя задачи, Новое имя задачи, новый sortkey, update) → статус {ok, notexists}

При переименовании переименовывается значение во всех багах.

Метод: Field.update_value(field=cf_wbs&old_value=Старое_имя&new_value=Новое_имя&sortkey=Новый_сорткей)
Ответ: <status>value_not_found</status>
Ответ: <status>value_already_exists</status> (если то, во что переименовываем, уже существует)
Ответ: <status>ok</status><id>ID обновлённого значения</id>

(Имя задачи, delete) → статус {ok, notexists, hasbugs}

Удаление разрешается только если нет багов с этой задачей.

Метод: Field.update_value(field=cf_wbs&old_value=Старое_имя&new_value=Новое_имя&sortkey=Новый_сорткей)
Ответ: <status>value_not_found</status>
Ответ: <status>fieldvalue_still_has_bugs</status> (если ещё есть баги с этой задачей)
Ответ: <status>ok</status>

Изменить привязку задачи WBS к продуктам

Добавить/удалить задачу WBS к продукту

(Имя задачи, ID продуктов) → статус {ok, wbsnotexists, productnotexists, nochanges}

То есть ok=добавлена/удалена, nochanges=уже добавлена/удалена, wbsnotexists=задачи нет, productnotexists=продукта нет

Метод: Field.set_visibility_values(field=cf_wbs&value=Имя_задачи&ids=ID_продукта&ids=ID_продукта&…)
Ответ: <status>value_not_found</status>
Ответ: <status>ok</status><ids><i>Установленный в результате ID продукта</i><i>ещё ID</i>...</ids>

Для заданного продукта и задачи WBS запретить/разрешить изменять баг

(ID продукта, имя задачи, действие = {permit, deny}) → статус {ok, wbsnotexists, productnotexists, nochanges}

Получить информацию о пользователе/пользователях

  • (ID пользователя)(ID пользователя, Login, Имя),
  • (Login пользователя)(ID пользователя, Login, Имя).
Метод: User.get(ids=ID1&ids=ID2&… или names=Емайл1&names=Емайл2&…)
Ответ:
<status>ok</status>
<users>
 <i>
  <real_name>Фомин Стас</real_name>
  <email>stas@custis.ru</email>
  <email_enabled>1</email_enabled>
  <name>stas@custis.ru</name>
  <id>2</id>
  <can_login>1</can_login>
  <login_denied_text />
 </i>
 ...
</users>

Интерфейс

Интерфейс выбран REST (просто параметры запроса) в сторону Bugzilla, простой ответный XML-формат обратно. XML-RPC, уже присутствовавший в Bugzilla, отвергнут из-за проблем с обработкой ошибок — сделать нормально можно, но полностью ломается совместимость со штатным XML-RPC, что нехорошо (его у нас используют). Запрос отправляется на URL http://bugs.office.custis.ru/bugs/xml.cgi?method=Сервис.метод. Формат ответа:

  • Корневой элемент <response>, содержать может всё что угодно, но как минимум содержит элемент <status> со строковым значением (статус операции).
  • В случае любой ошибкий status принимает значение, соответствующее её названию.
  • Все значения передаются внутри элементов с соответствующим именем.
  • Если значение — хеш (ключ => значение), то в XML это будет последовательность элементов вида <ключ>значение</ключ>.
  • Если значение — массив, то в XML это будет последовательность элементов вида <i>значение</i>.
  • Если значение — не дай бог, объект (хотя такого в основном встречаться не должно) — то это хеш (поля объекта и их значения), заключённый в элемент <object class="Класс::Объекта">...</object>
  • Соответственно все вложенные значения сериализуются так же.

Авторизация

TN-ERP будет ходить под своим пользователем, и будет должна сохранять и в последующих запросах передавать Cookie, устанавливаемую в ответ на запрос:

Метод: User.login( login=Емайл&password=Пароль&remember=1 )
Ответ: <status>ok</status><id>ID текущего пользователя</id>

Также надо будет встроиться в систему единой авторизации.

Глобальная авторизация в веб-системах, URL сервера авторизации Bugzilla http://bugs.office.custis.ru/bugs/globalauth.cgi.

Категория:Bugzilla


Статья реплицируется в Wiki4IntraNet.