Как создать новую страницу в Confluence с помощью REST API?

Мне нужен рабочий пример создания новой вики-страницы в слиянии, используя rest 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-страницей, в котором говорилось, что страница не существует или страница существует, но у вас нет разрешения. Я подтвердил, что у меня есть доступ к вики wiki и я могу создать новую wiki, используя мои учетные данные.

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

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

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

Ответ 1

Мое подозрение в том, что вы не используете новую версию Confluence. API REST для создания новой страницы был представлен в 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 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 будет создана новая страница.

ИЗМЕНИТЬ ДОБАВИТЬ:

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

Ответ 2

Не 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' \...