Tham chiếu
Chuyển từ hệ khác
Ánh xạ khái niệm chung của các bộ văn phòng trực tuyến sang API của O3O, khác biệt cần để ý và các bước chuyển.
Trong trang này
Các bộ văn phòng trực tuyến có nhiều khái niệm chung: cấu hình trình soạn thảo, định danh phiên bản tài liệu, callback khi lưu, dịch vụ chuyển đổi. Trang này ánh xạ các khái niệm đó sang API của O3O để việc chuyển sang O3O có lộ trình rõ ràng. Tên trường, cách ký và hành vi dưới đây là của riêng O3O.
Bảng ánh xạ khái niệm#
| Khái niệm chung | O3O | Ghi chú |
|---|---|---|
| Trình soạn thảo nhúng, khởi tạo bằng một đối tượng cấu hình trong trình duyệt | new O3O.Editor(id, config), nạp từ /o3o/api.js | api.js tự suy địa chỉ máy chủ từ thẻ script. |
| URL để máy chủ tải tệp gốc | document.url | Máy chủ O3O tải, không phải trình duyệt; chịu quy tắc chống SSRF. |
| Định danh phiên bản tài liệu, dùng để gom người cùng sửa | document.key | Khớp ^[A-Za-z0-9._-]{1,128}$; dùng key mới sau callback closed. |
| Loại tệp và tên hiển thị | document.fileType, document.title | 12 đuôi tệp được nhận. |
| Chế độ sửa hoặc chỉ xem | editor.mode: edit / view | view không tính kết nối. |
| Người dùng hiện tại và ngôn ngữ giao diện | editor.user.id, editor.user.name, editor.lang | |
| URL nhận thông báo khi tài liệu được lưu | editor.callbackUrl | Xem Callback và webhook. |
| Cấu hình được ký bằng JWT | token HS256, payload là chính config | Không có lớp bọc trung gian trong payload. |
| Trạng thái trong callback lưu | status: saved / closed | Kèm cờ final, autosave, modifiedByUser; không dùng mã số trạng thái. |
| Thân trả lời callback theo mẫu quy định | Bất kỳ mã 2xx nào | Thân trả lời bị bỏ qua. |
| Xác thực callback | X-O3O-Signature, X-O3O-Timestamp | HMAC SHA-256 |
| Tải bản đã lưu | url có chữ ký trong callback và trong onSaved | Sống O3O_EMBED_RETAIN_HOURS giờ. |
| Sự kiện phía trình duyệt | onReady, onDocumentLoaded, onModified, onSaved, onClose, onLimitReached, onError | |
| Phương thức của đối tượng trình soạn thảo | save(), close(), destroy(), setReadOnly(), getInfo() | |
| Tuỳ biến giao diện | ui | Kích thước, kiểu thanh công cụ, nút đóng, in, xuất, chép, danh sách người dùng. Logo, màu, giao diện tối: sắp có. |
| Dịch vụ chuyển đổi định dạng, có chế độ bất đồng bộ | POST /v1/convert → GET /v1/jobs/{id} → GET /v1/files/{id} | Nguồn là file (multipart) hoặc url (JSON). |
| Dựng tài liệu không cần trình duyệt | POST /v1/build + o3oscript | Kịch bản là JSON khai báo, không phải mã thực thi. |
| Trộn thư, điền mẫu | POST /v1/template/render | {{truong}} và lặp hàng bảng; chỉ bản doanh nghiệp. |
| Đấu nối kho tệp bằng WOPI | /hosting/discovery, CheckFileInfo, GetFile, PutFile | Nextcloud qua ứng dụng richdocuments. |
| Giới hạn theo kết nối | 1 kết nối = 1 phiên soạn thảo đồng thời | Xem Kết nối được đếm thế nào. |
| Kiểm tra sức khoẻ | GET /o3o/healthz, GET /v1/status |
Khác biệt cần để ý#
- Callback chỉ có hai trạng thái,
savedvàclosed, và gửi kèm URL tải có chữ ký. Tải tệp về trước khi URL hết hạn. - Bộ nhận callback chỉ cần trả mã 2xx. O3O thử lại 3 lần (lần đầu, sau 10 giây, sau 60 giây), nên bộ nhận phải xử lý idempotent.
- Sau callback
closed, lần mở kế tiếp phải dùngdocument.keymới. - Chỉ nhận JWT HS256; thuật toán khác, kể cả
none, bị từ chối. - Chuyển đổi chỉ trong cùng một họ tài liệu (văn bản, bảng tính, trình chiếu); chế độ đồng bộ trả thẳng tệp.
- Kịch bản dựng tài liệu là JSON khai báo theo lược đồ o3oscript, không chạy mã do khách gửi.
- Phiên chỉ đọc không tính kết nối; chạm trần không ngắt ai, phiên mới mở ở chế độ chỉ đọc.
Sắp có
Lớp tương thích /compat/* giúp chạy mã tích hợp cũ mà không sửa.
Các bước chuyển#
Kiểm kê
Liệt kê nơi mở trình soạn thảo, bộ nhận callback, lời gọi chuyển đổi và kịch bản dựng tài liệu trong hệ thống hiện tại.Dựng máy thử
Chạy bản Docker theo Tự dựng máy chủ và thử trang/o3o/demo.Ánh xạ cấu hình
Dựng configO3O.Editortheo bảng trên; ký bằng JWT ở máy chủ của bạn.Viết lại bộ nhận callback
Kiểm chữ ký, xử lý idempotent, trả 2xx ngay, tảiurlở nền.Chuyển lời gọi xử lý tài liệu
Chuyển đổi sang/v1/convert, dựng tài liệu sang o3oscript, trộn thư sang/v1/template/render.Thử hạn mức
Chuyển dần
Chạy song song hai hệ, chuyển từng phân hệ; đối chiếu tệp đã lưu trước khi tắt hệ cũ.
// Trình duyệt, sau khi nạp http://localhost:8080/o3o/api.js
const editor = new O3O.Editor("o3o-editor", {
document: {
url: "https://example.com/files/hop-dong.docx", // máy chủ O3O tải tệp này
title: "Hợp đồng mẫu.docx",
fileType: "docx",
key: "hopdong-42-v7" // đổi key cho mỗi phiên bản nội dung
},
editor: {
mode: "edit",
lang: "vi",
user: { id: "u-1001", name: "Nguyễn Văn A" },
callbackUrl: "https://example.com/o3o/callback" // nhận saved và closed
},
token: tokenFromServer, // JWT do máy chủ của bạn ký
events: {
onSaved: (e) => console.log(e.version, e.url),
onLimitReached: (e) => console.warn(e.message),
onError: (e) => console.error(e.code, e.message)
}
});# Chuyển đổi đồng bộ: trả thẳng tệp PDF
curl -s http://localhost:8080/v1/convert \
-H "Authorization: Bearer O3O_DEMO_KEY" \
-F file=@bao-cao.docx -F to=pdf -o bao-cao.pdf
# Bất đồng bộ: nhận job, hỏi trạng thái, tải tệp
curl -s http://localhost:8080/v1/convert \
-H "Authorization: Bearer O3O_DEMO_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/files/bao-cao.docx", "to": "pdf", "async": true}'
curl -s http://localhost:8080/v1/jobs/job_4f1c2a9b0d3e5f6a7b8c9d0e -H "Authorization: Bearer O3O_DEMO_KEY"
curl -s http://localhost:8080/v1/files/file_9a8b7c6d5e4f3a2b1c0d9e8f -H "Authorization: Bearer O3O_DEMO_KEY" -o bao-cao.pdf