Как создать новую страницу в Confluence, используя их REST API?

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

Вот пример у них на сайте

curl -u admin:admin -X POST -H 'Content-Type: application/json' -d'{"type":"page","title":"new page","space":{"key":"TST"},"body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}' http://localhost:8080/confluence/rest/api/content/ | python -mjson.tool

Я попробовал выше с моим именем пространства, новым заголовком и изменил URL-адрес на mysite/rest/api/content, и возвращенный контент был в основном html-страницей, говорящей, что страница не существует или страница существует, но у вас нет разрешения. Я подтвердил, что у меня есть доступ к вики-сайту confluence, и я могу создавать новые вики, используя свои учетные данные.

Что тоже непонятно, так это то, как в приведенном выше примере вызывается конкретный API, создающий страницу? Это не имеет смысла.

аналогичный вопрос был задан на их форуме, но нет разумного ответа https://answers.atlassian.com/questions/149561/simple-confluence-rest-api-usage-what-am-i-missing

(Я предполагаю, что моя конечная цель - иметь возможность автоматически создавать новую вики-страницу в слиянии). Я могу отказаться от REST API слияния в пользу другого решения, если это необходимо.


person DoodleKana    schedule 07.05.2014    source источник
comment
Старый, но актуальный вопрос, вот их спецификация: developer.atlassian .com/cloud/confluence/rest/ Также есть примеры на нескольких языках, от curl, nodejs и т. д.   -  person frank_108    schedule 13.03.2020


Ответы (2)


Я подозреваю, что вы не используете достаточно новую версию Confluence. REST API для создания новой страницы был представлен в Confluence 5.5 (который вышел 8 дней назад). Документация по API имеет версии, и вы всегда должны использовать версию, соответствующую вашему выпуску Confluence. Документы по 5.5 API включают необходимый вам API для создания страниц, но в более ранних версиях его нет. Вы можете изменить версию в приведенном выше URL-адресе, чтобы получить версию API, соответствующую вашему выпуску Confluence.

Confluence 5.4 и более ранние версии также использовали другой корневой префикс для REST API (/rest/prototype/1/content), что является одной из возможных причин появления ошибки «страница не найдена».

Пример на сайте Atlassian также сбивает с толку, потому что он включает в URL-адрес дополнительный «/confluence», который вам понадобится, только если Confluence настроен с контекстным путем. Это также может привести к ошибке «страница не найдена», если вы используете Confluence 5.5+ (хотя ваш пост предполагает, что вы уже исправили это).

Кроме того, вам необходимо сообщить Confluence, что вы используете базовый метод аутентификации, с помощью добавление специального параметра запроса os_authType.

Следующий пример работает для меня в Confluence 5.5 (не забудьте изменить порт и клавишу пробела по мере необходимости).

Для безопасности я также добавил соответствующий тип контента в заголовок Accept, хотя на практике это, похоже, не нужно.

curl -v -u admin:admin -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d'{"type":"page","title":"new page","space":{"key":"ATTACH"},"body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}' "http://localhost:8090/rest/api/content/?os_authType=basic"

Чтобы ответить на ваш последний вопрос, конкретный API, который создает страницу, определяется самим URL-адресом и методом запроса. Например, при выполнении GET для «/rest/api/content» будет получена существующая страница (с учетом соответствующих параметров запроса), а при выполнении POST будет создана новая страница.

ОТРЕДАКТИРОВАНО ДОБАВИТЬ:

См. также мой комментарий ниже о том, как создать страницу как дочернюю для другой существующей страницы, а не просто на верхнем уровне пространства.

person Scott Dudley    schedule 07.05.2014
comment
Спасибо за быстрый ответ. Ваш ответ проясняет многие вопросы, которые у меня были. Да, я использовал более старую версию Confluence. Я также не включил настройку удаленного API в Confluence. После включения этой опции и использования 5.5 предложенное вами решение заработает. Теперь я, возможно, прошу слишком многого, но с этим новым API для отдыха я могу использовать файл вместо передачи необработанного html в команде. Также вы можете указать идентификатор родительских страниц? В документации его не было. Может быть, потому что ему всего 8 дней :) - person DoodleKana; 08.05.2014
comment
Включение Remote API также является хорошим советом. Это полностью недокументировано (YMMV с будущими версиями), но вы можете указать родительскую страницу через свойство предков в 5.5. Это работает для меня, чтобы создать дочерний элемент страницы № 1048582: curl -v -u admin:admin -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d'{"type":"page","ancestors":[{"type":"page","id":1048582}],"title":"third new child page","space":{"key":"ATTACH"},"body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}' "http://localhost:8090/rest/api/content/?os_authType=basic" - person Scott Dudley; 08.05.2014
comment
Я пробовал выше, и это работает. Теперь я могу создать новую страницу под любой другой страницей. Я также немного изменил настройку curl, чтобы он мог читать новое содержимое страницы из файла с помощью -d @filename.json. Это может пригодиться, когда ваша новая страница может содержать много контента. - person DoodleKana; 08.05.2014
comment
Мне не удалось распотрошить функциональность обновления, чтобы она работала должным образом. При обновлении существующей вложенной страницы она либо станет потерянной (используя пример curl, приведенный в документации Confluence API), либо станет дочерней по отношению к домашней странице пространства. Зарегистрирована проблема с Atlassian CR-487. - person Xabs; 12.12.2014
comment
Можно ли использовать этот API для создания страниц в экземпляре Confluence, размещенном в Atlassian? - person ericpeters0n; 14.07.2016

Не REST API, а обходной путь, который я собрал. Попробуй это:

Чтобы переместить страницу как дочернюю страницу

curl -X GET \
'<your-confluence-URL>/pages/movepage.action?pageId=<page-to-be-moved-pageId>&spaceKey=<target-space-key>&targetTitle=<target-title-of-parent-page>&position=append' \
-H 'authorization: Basic <encoded-username-password>' \ 
-H 'x-atlassian-token: no-check'

Чтобы переместить страницу как страницу верхнего уровня в пространстве

curl -X GET \
'<your-confluence-base-URL>/pages/movepage.action?pageId=<page-to-be-moved-pageId>&spaceKey=<target-space-key>&position=topLevel' \...
person Arjun Shukla    schedule 19.05.2017