¿Cómo crear una nueva página en Confluence usando su API REST?

Necesito un ejemplo práctico de cómo crear una nueva página wiki en confluencia usando la API de reposo. Prefiero que la nueva página se cree en un espacio específico y una página específica. Leí la documentación de su API y miré algunos ejemplos que tenían y aún me quedaban cortos.

Aquí hay un ejemplo que tenían en su sitio

curl -u admin:admin -X POST -H 'Content-Type: application/json' -d'{"type":"page","title":"new page","space":{"key":"TST"},"body":{"storage":{"value":"

This is a new page

","representation":"storage"}}}' http://localhost:8080/confluence/rest/api/content/ | python -mjson.tool

Intenté anteriormente con mi nombre de espacio, nuevo título y cambié la URL a mysite / rest / api / content y el contenido devuelto fue básicamente página html diciendo que la página no existe o que la página existe pero no tiene permiso. He confirmado que tengo acceso a la wiki de confluencia y puedo crear una wiki nueva usando mis credenciales.

Lo que tampoco está claro es en el ejemplo anterior cómo se llama a la API específica que crea la página? No tiene sentido.

se hizo una pregunta similar en su foro, pero ninguna respuesta razonable https://answers.atlassian.com/questions/149561/simple-confluence-rest-api-usage-what-am-i-missing

(Supongo que mi objective final es poder crear una nueva página wiki automáticamente en la confluencia) Estoy de acuerdo en renunciar a la API REST de confluencia con otra solución si es necesario.

Mi sospecha es que no estás usando una versión lo suficientemente nueva de Confluence. La API REST para crear una nueva página se introdujo en Confluence 5.5 (que salió hace 8 días). La documentación de la API está versionada y siempre debe usar la versión correspondiente a su versión de Confluence. Los documentos 5.5 API incluyen la API de creación de páginas que necesita , pero las versiones anteriores no. Puede cambiar la versión en la URL anterior para obtener la versión de la API que coincida con su versión de Confluence.

Confluence 5.4 y anteriores también usaron un prefijo raíz diferente para la API REST (/ rest / prototype / 1 / content) que es una posible razón para obtener un error de página no encontrada.

El ejemplo en el sitio de Atlassian también es confuso porque incluye una “/ confluencia” adicional en la URL, que solo necesitaría si se configurara Confluence con una ruta de contexto. Esto también podría generar un error de página no encontrada si usaba Confluence 5.5+ (aunque su publicación sugiere que ya lo corrigió).

Además, debe decirle a Confluence que está utilizando el método de autenticación básico agregando un parámetro de consulta os_authType especial .

El siguiente ejemplo funciona para mí en Confluence 5.5 (no olvide cambiar el puerto y la tecla de espacio según corresponda).

Por seguridad, también agregué el tipo de contenido apropiado al encabezado Accept , aunque esto no parece ser necesario en la práctica.

 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":"

This is a new page

","representation":"storage"}}}' "http://localhost:8090/rest/api/content/?os_authType=basic"

Para responder a su última pregunta, la API específica que crea la página está determinada por la URL misma y el método de solicitud. Por ejemplo, al realizar un GET en “/ rest / api / content” se buscará una página existente (dados los parámetros de consulta adecuados), mientras se realiza una POST se creará una página nueva.

EDITADO PARA AGREGAR:

Consulte también mi comentario a continuación sobre cómo crear una página como elemento secundario de otra página existente, en lugar de solo en el nivel superior de un espacio.

No APT REST, pero un trabajo conjunto que armé. Prueba esto:

Para mover una página como página secundaria

 curl -X GET \ '/pages/movepage.action?pageId=&spaceKey=&targetTitle=&position=append' \ -H 'authorization: Basic ' \ -H 'x-atlassian-token: no-check' 

Para mover una página como página de nivel superior en el espacio

 curl -X GET \ '/pages/movepage.action?pageId=&spaceKey=&position=topLevel' \...