2014-05-07 38 views
23

Ho bisogno di un esempio funzionante di creazione di una nuova pagina wiki in confluenza usando la pausa API. Preferisco che la nuova pagina venga creata in uno spazio specifico e in una pagina specifica. Ho letto la loro documentazione sulla API e ho esaminato alcuni esempi che avevano e continuano a essere brevi.Come creare una nuova pagina in Confluence usando la loro API REST?

Ecco un esempio che avevano sul loro sito

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 

ho provato in precedenza con il mio nome di spazio, nuovo titolo e ha cambiato l'url mysite/riposo/api/contenuti e tornato il contenuto era fondamentalmente pagina html dicendo che la pagina non esiste o la pagina esiste ma non hai il permesso. Ho confermato che ho accesso al wiki di confluenza e posso creare un nuovo wiki usando le mie credenziali.

Ciò che non è chiaro è nell'esempio sopra come chiama la specifica API che crea la pagina? Non ha senso.

domanda simile è stato chiesto sul loro forum, ma nessuna risposta ragionevole https://answers.atlassian.com/questions/149561/simple-confluence-rest-api-usage-what-am-i-missing

(Credo che il mio obiettivo finale è quello di essere in grado di creare nuova pagina wiki sul confluenza automaticamente) Io sto bene a rinunciare a confluenza REST API ad altra soluzione se necessario.

risposta

27

Il mio sospetto è che non si stia utilizzando una versione abbastanza nuova di Confluence. L'API REST per la creazione di una nuova pagina è stata introdotta in Confluence 5.5 (che è uscito 8 giorni fa). La documentazione dell'API è versionata e dovresti sempre utilizzare la versione corrispondente alla tua versione di Confluence. Il 5.5 API docs include the page creation API you need, ma le versioni precedenti no. Puoi modificare la versione nell'URL sopra per ottenere la versione dell'API corrispondente alla tua versione di Confluence.

confluenza 5.4 e prima utilizzato anche un prefisso radice diverso per l'API REST (/ resto/prototipo/1/contenuto) che è una ragione possibile per ottenere una pagina non trovata errore.

L'esempio sul sito Atlassian è anche confuso perché include un extra "/ confluenza" nell'URL, che sarebbe necessario solo se Confluence fosse impostato con un percorso di contesto. Questo potrebbe anche causare un errore di pagina non trovato se si utilizza Confluence 5.5+ (anche se il tuo post suggerisce che hai già corretto per questo).

Inoltre, è necessario comunicare a Confluence che si sta utilizzando il metodo di autenticazione di base adding a special os_authType query parameter.

Il seguente esempio funziona per me su Confluence 5.5 (non dimenticare di modificare la porta e la chiave di spazio come appropriato).

Per motivi di sicurezza, ho anche aggiunto il tipo di contenuto appropriato all'intestazione Accept, sebbene in pratica non sia necessario.

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" 

Per rispondere alla tua ultima domanda, l'API specifica che crea la pagina è determinata dall'URL stesso e dal metodo di richiesta. Ad esempio, l'esecuzione di un GET su "/ rest/api/content" preleverà una pagina esistente (dati i parametri di query appropriati), mentre l'esecuzione di un POST creerà una nuova pagina.

A cura di aggiungere:

Vedi anche il mio commento qui sotto per informazioni su come creare una pagina come un bambino di un'altra pagina esistente, piuttosto che semplicemente al livello più alto di uno spazio.

+1

Grazie per una risposta rapida. La tua risposta chiarisce un sacco di domande che ho avuto. Sì, stavo usando una versione precedente di Confluence. Inoltre, non ho abilitato l'impostazione dell'API remota su Confluence. Dopo aver abilitato questa opzione e aver usato 5.5, la soluzione suggerita funzionerà. Ora potrei chiedere troppo ma, con questo nuovo riposo API posso usare il file invece di passare in html grezzo nel comando. Puoi anche specificare l'ID della pagina principale? La documentazione non ce l'ha. Forse perché ha solo 8 giorni :) – DoodleKana

+14

Abilitare l'** API remota ** è anche un buon consiglio. Questo è totalmente non documentato (YMMV con versioni future), ma è possibile specificare la pagina padre tramite la proprietà "antenati" in 5.5. Questo per me crea un figlio di pagina # 1048582: 'curl -v -u admin: admin -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' - d '{"tipo": "pagina", "antenati": [{"tipo": "pagina", "id": 1048582}], "titolo": "terza nuova pagina figlio", "spazio": {" chiave ":" ATTACH "}," body ": {" storage ": {" value ":"

Questa è una nuova pagina

"," rappresentazione ":" archiviazione "}}}" "http: // localhost: 8090/rest/api/content /? Os_authType = basic "' –

+0

Ho provato sopra e funziona. Ora posso creare una nuova pagina sotto qualsiasi altra pagina. Ho anche ottimizzato l'impostazione del ricciolo, in modo che possa leggere il contenuto della nuova pagina da un file usando "-d @ filename.json". Questo può tornare utile quando la tua nuova pagina può contenere molti contenuti. – DoodleKana

0

Non REST API, ma un lavoro intorno a mettere insieme. Prova questo:

Per spostare una pagina come pagina figlio

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' 

Per spostare una pagina in pagina di livello superiore nello spazio

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