2014-05-07 47 views
23

Tôi cần làm ví dụ về việc tạo trang wiki mới trong hợp lưu bằng cách sử dụng api còn lại. Tôi thích trang mới được tạo theo không gian cụ thể và trang cụ thể. Tôi đọc tài liệu api của họ và xem xét một vài ví dụ họ đã có và vẫn còn ngắn.Làm thế nào để tạo trang mới trong Confluence bằng REST API của họ?

Dưới đây là một ví dụ họ đã có trên trang web của họ

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 

tôi đã cố gắng trên bằng tên không gian của tôi, danh hiệu mới và thay đổi url để mysite/nghỉ ngơi/api/nội dung và trả về nội dung là về cơ bản trang html nói rằng trang không tồn tại hoặc trang tồn tại nhưng bạn không có quyền. Tôi đã xác nhận rằng tôi có quyền truy cập vào wiki hợp lưu và có thể tạo wiki mới bằng thông tin đăng nhập của tôi.

Điều gì cũng không rõ ràng là trong ví dụ ở trên làm thế nào để nó kêu gọi api cụ thể tạo trang? Nó chả có nghĩa gì cả.

câu hỏi tương tự được hỏi trên diễn đàn của họ, nhưng không có câu trả lời hợp lý https://answers.atlassian.com/questions/149561/simple-confluence-rest-api-usage-what-am-i-missing

(tôi đoán mục tiêu cuối cùng của tôi là để có thể tạo ra trang wiki mới trên hợp lưu tự động) Tôi không quan trọng để bỏ vào hợp lưu REST của API cho giải pháp khác nếu cần thiết.

Trả lời

27

Nghi ngờ của tôi là bạn không sử dụng phiên bản đủ mới của Hợp lưu. REST API để tạo một trang mới đã được giới thiệu trong Confluence 5.5 (xuất hiện cách đây 8 ngày). Tài liệu API được phiên bản và bạn nên luôn sử dụng phiên bản tương ứng với bản phát hành Confluence của bạn. 5.5 API docs include the page creation API you need, nhưng các phiên bản cũ thì không. Bạn có thể thay đổi phiên bản trong URL ở trên để nhận phiên bản API khớp với bản phát hành Confluence của bạn.

Kết hợp 5.4 và trước đó cũng sử dụng tiền tố gốc khác cho REST API (/ rest/prototype/1/content), đó là một lý do có thể khiến lỗi trang không tìm thấy.

Ví dụ trên trang web Atlassian cũng gây nhầm lẫn vì nó bao gồm thêm "/ confluence" trong URL mà bạn chỉ cần nếu Confluence được thiết lập với đường dẫn ngữ cảnh. Điều này cũng có thể dẫn đến lỗi trang không tìm thấy nếu bạn đang sử dụng Confluence 5.5+ (mặc dù bài đăng của bạn gợi ý rằng bạn đã sửa lỗi này).

Ngoài ra, bạn cần phải thông báo cho Confluence rằng bạn đang sử dụng phương pháp xác thực cơ bản theo adding a special os_authType query parameter.

Ví dụ sau đây phù hợp với tôi trên Confluence 5.5 (đừng quên thay đổi cổng và phím khoảng trắng nếu thích hợp).

Vì lý do an toàn, tôi cũng đã thêm loại nội dung thích hợp vào tiêu đề Accept, mặc dù điều này có vẻ không cần thiết trong thực tế.

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" 

Để trả lời câu hỏi cuối cùng của bạn, API cụ thể tạo trang được xác định bởi chính URL và phương thức yêu cầu. Ví dụ, thực hiện một GET trên "/ rest/api/content" sẽ tìm nạp một trang hiện có (với các tham số truy vấn thích hợp), trong khi thực hiện POST sẽ tạo một trang mới.

Edited thêm:

Xem thêm nhận xét của tôi dưới đây để biết làm thế nào để tạo ra một trang như một đứa trẻ của một trang khác hiện có, như trái ngược với chỉ ở cấp cao nhất của một không gian.

+1

Cảm ơn bạn đã trả lời nhanh chóng. Câu trả lời của bạn đã xóa rất nhiều câu hỏi mà tôi có. Có, tôi đã sử dụng phiên bản cũ của Confluence. Tôi cũng không bật cài đặt API từ xa trên Confluence. Sau khi kích hoạt tùy chọn đó và sử dụng 5.5, công việc của bạn sẽ được giải quyết. Bây giờ tôi có thể yêu cầu quá nhiều nhưng, Với api nghỉ ngơi mới này tôi có thể sử dụng tập tin thay vì đi qua trong html thô trong lệnh. Bạn cũng có thể chỉ định id trang mẹ không? Tài liệu không có nó. Có lẽ vì nó chỉ 8 ngày tuổi :) – DoodleKana

+14

Bật ** Remote API ** cũng là lời khuyên tốt. Điều này hoàn toàn không có giấy tờ (YMMV với các phiên bản tương lai), nhưng bạn có thể chỉ định trang gốc thông qua thuộc tính "tổ tiên" trong 5.5. Điều này giúp tôi tạo một trang con # 1048582: 'curl -v -u admin: admin -X POST -H 'Loại Nội dung: application/json' -H 'Chấp nhận: application/json' - d '{"type": "page", "tổ tiên": [{"type": "page", "id": 1048582}], "title": "trang con mới thứ ba", "dấu cách": {" key ":" ATTACH "}," body ": {" storage ": {" value ":"

Đây là trang mới

"," đại diện ":" bộ nhớ "}}} '" http: // localhost: 8090/rest/api/content /? Os_authType = basic "' –

+0

Tôi đã thử ở trên và nó hoạt động. Bây giờ tôi có thể tạo một trang mới dưới bất kỳ trang nào khác. Tôi cũng tinh chỉnh curl thiết lập chút ít, vì vậy nó có thể đọc nội dung trang mới từ một tập tin bằng cách sử dụng "-d @ filename.json". Điều này có thể hữu ích khi trang mới của bạn có thể chứa nhiều nội dung. – DoodleKana

0

Không phải REST api, mà là một công việc chung quanh tôi. Hãy thử điều này:

Để di chuyển một trang như trang con

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' 

Để di chuyển một trang như trang cấp cao nhất trong vũ trụ

curl -X GET \ 
'<your-confluence-base-URL>/pages/movepage.action?pageId=<page-to-be-moved-pageId>&spaceKey=<target-space-key>&position=topLevel' \... 
Các vấn đề liên quan