web-dev-qa-db-fra.com

Comment créer une nouvelle page dans Confluence en utilisant leur REST API?

J'ai besoin d'un exemple concret de création d'une nouvelle page de wiki dans Confluence en utilisant rest api. Je préfère que la nouvelle page soit créée dans un espace et une page spécifiques. J'ai lu la documentation de leur API et examiné quelques exemples dont ils disposaient et qui étaient encore à venir. 

Voici un exemple qu'ils avaient sur leur site

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

J'ai essayé ci-dessus avec mon nom d'espace, mon nouveau titre et j'ai changé l'URL en mysite/rest/api/content J'ai confirmé que j'ai accès au confluence wiki et que je peux créer un nouveau wiki en utilisant mes informations d'identification. 

Ce qui n’est pas clair non plus, c’est dans l’exemple ci-dessus comment appelle-t-on l’API spécifique qui crée la page? Cela n'a aucun sens.

une question similaire a été posée sur leur forum, mais pas de réponse raisonnable https://answers.atlassian.com/questions/149561/simple-confluence-rest-api-usage-what-am-i-mission

(Je suppose que mon objectif final est de pouvoir créer automatiquement une nouvelle page de wiki sur confluence). Je peux renoncer à l'API confluence REST vers une autre solution si nécessaire.

24
DoodleKana

Je soupçonne que vous n'utilisez pas une version suffisamment nouvelle de Confluence. L'API REST permettant de créer une nouvelle page a été introduite dans Confluence 5.5 (sorti il ​​y a 8 jours). La documentation de l'API est versionnée et vous devez toujours utiliser la version correspondant à votre version de Confluence. La documentation de l'API 5.5 inclut l'API de création de page dont vous avez besoin , mais pas les versions antérieures. Vous pouvez modifier la version dans l'URL ci-dessus pour que la version de l'API corresponde à votre version de Confluence.

Confluence 5.4 et versions antérieures utilisaient également un préfixe racine différent pour l’API REST (/ rest/prototype/1/content), ce qui est une des raisons possibles pour obtenir une erreur de page introuvable.

L'exemple du site Atlassian est également source de confusion, car il inclut un "/ confluence" supplémentaire dans l'URL, dont vous n'auriez besoin que si Confluence était configuré avec un chemin de contexte. Cela pourrait également entraîner une erreur de page introuvable si vous utilisiez Confluence 5.5+ (bien que votre message suggère que vous avez déjà corrigé cette erreur).

De plus, vous devez indiquer à Confluence que vous utilisez la méthode d'authentification de base en en ajoutant un paramètre de requête spécial os_authType .

L'exemple suivant fonctionne pour moi sur Confluence 5.5 (n'oubliez pas de modifier le port et la touche d'espacement, le cas échéant).

Pour des raisons de sécurité, j'ai également ajouté le type de contenu approprié à l'en-tête Accept, bien que cela ne semble pas être nécessaire dans la pratique.

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"

Pour répondre à votre dernière question, l’API spécifique qui crée la page est déterminée par l’URL elle-même et par la méthode de requête. Par exemple, si vous effectuez une opération GET sur "/ rest/api/content", une page existante sera récupérée (en fonction des paramètres de requête appropriés), tandis que l'exécution d'un POST créera une nouvelle page.

Édité pour ajouter:

Voir aussi mon commentaire ci-dessous pour savoir comment créer une page en tant qu'enfant d'une autre page existante, par opposition au niveau supérieur d'un espace.

27
Scott Dudley

Pas REST api, mais un travail de contournement que j'ai mis en place . Essayez ceci:

Pour déplacer une page en tant que page enfant

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'

Pour déplacer une page en tant que page de niveau supérieur dans l'espace

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