web-dev-qa-db-ja.com

REST APIを使用してConfluenceで新しいページを作成する方法は?

REST APIを使用して、合流で新しいWikiページを作成する作業例を必要とします。特定のスペースと特定のページの下に新しいページを作成することを好みます。私は彼らの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 wikiにアクセスでき、資格情報を使用して新しいwikiを作成できることを確認しました。

また、上記の例では、ページを作成する特定のAPIをどのように呼び出すのかが明確ではありません。それは意味がありません。

同様の質問が彼らのフォーラムで尋ねられましたが、合理的な答えはありませんでした https://answers.atlassian.com/questions/149561/simple-confluence-rest-api-usage-what-am-i-missing

(私の最終目標はconfluenceで新しいWikiページを自動的に作成できるようにすることだと思います)confluence REST必要に応じて他のソリューションへのAPIをあきらめても構いません。

24
DoodleKana

私の疑いは、Confluenceの新しいバージョンを使用していないことです。 REST新しいページを作成するためのAPIはConfluence 5.5(8日前に発表されました)で導入されました。APIドキュメントはバージョン管理されており、Confluenceリリースに対応するバージョンを常に使用する必要があります。 5.5 APIドキュメントには必要なページ作成APIが含まれています ですが、古いバージョンには含まれていません。上記のURLのバージョンを変更して、Confluenceリリースに一致するAPIバージョンを取得できます。

Confluence 5.4以前では、REST= API(/ rest /prototype/1)/ contentに異なるルートプレフィックスを使用していました)これは、ページが見つからないというエラーが表示される理由の1つです。

Atlassianサイトの例は、Confluenceにコンテキストパスが設定されている場合にのみ必要な追加の「/ confluence」がURLに含まれているため、混乱を招きます。また、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自体とリクエストメソッドによって決定されます。たとえば、「/ rest/api/content」でGETを実行すると、既存のページが取得され(適切なクエリパラメーターが指定された場合)、POSTを実行すると新しいページが作成されます。

追加するために編集:

スペースの最上位ではなく、既存の別のページの子としてページを作成する方法については、以下のコメントも参照してください。

28
Scott Dudley

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' \...
0
Arjun Shukla