Xây dựng Mạng Xã Hội Phi Tập Trung Từ Con Số Không: Hướng dẫn Thực Chiến với Giao Thức ActivityPub

Hoạt động của mạng xã hội phi tập trung dựa trên giao thức ActivityPub đang ngày càng phổ biến. Bài viết này sẽ hướng dẫn bạn từng bước xây dựng một ứng dụng xã hội phi tập trung từ đầu.

Cấu trúc Cơ Bản của ActivityPub

ActivityPub sử dụng hai giao thức chính để hoạt động:

  • Giao thức Client-to-Server
  • Giao thức Server-to-Server
Tính Năng Hệ Thống Truyền Thống Hệ Thống Phi Tập Trung
Lưu trữ Dữ Liệu Cơ sở dữ liệu tập trung Các nút lưu trữ phân tán
Quản Lý Danh Tính Hệ thống tài khoản của nền tảng URI danh tính đa nền tảng
Phân Phối Nội Dung Đẩy nội dung trong nền tảng Tự động đồng bộ giữa các máy chủ liên minh

Mô Hình Dữ Liệu Cơ Bản

Dưới đây là một ví dụ về cấu trúc đối tượng cơ bản trong ActivityPub:

<code>{
  "@context": "http://www.w3.org/ns/activitystreams",
  "id": "https://example.vn/notes/456",
  "type": "Note",
  "content": "Đây là một bài viết bằng tiếng Việt!",
  "published": "2025-09-10T08:30:00Z",
  "attributedTo": "https://example.vn/users/quang"
}</code>

Thiết Lập Môi Trường Phát Triển

Bắt đầu bằng cách cài đặt các thư viện cần thiết:

<code># Cài đặt Node.js và các phụ thuộc
npm install express body-parser jsonwebtoken</code>

Sau đó, tạo một server cơ bản:

<code>const express = require('express');
const app = express();
app.use(express.json());

// Endpoint người dùng
app.get('/users/quang', (req, res) => {
  res.json({
    "@context": ["http://www.w3.org/ns/activitystreams", "http://www.w3.org/ns/activitypub"],
    "id": "https://example.vn/users/quang",
    "type": "Person",
    "preferredUsername": "quang",
    "name": "Quang Nguyen",
    "inbox": "https://example.vn/users/quang/inbox",
    "outbox": "https://example.vn/users/quang/outbox"
  });
});

// Endpoint nhận hộp thư đến
app.post('/users/quang/inbox', (req, res) => {
  const activity = req.body;
  console.log(`Nhận được hoạt động mới: ${activity.type} từ ${activity.actor}`);
  
  // Thực hiện logic xác thực, loại bỏ trùng lặp và lưu trữ hoạt động
  res.status(202).send(); // Chấp nhận hoạt động
});

app.listen(3000, () => console.log('Máy chủ ActivityPub đang chạy tại cổng 3000'));</code>

Xử Lý Các Hoạt Động Cơ Bản

Hoạt Động Đăng Bài Viết (Create)

Ví dụ yêu cầu gửi lên server:

<code>POST /users/quang/outbox HTTP/1.1
Host: example.vn
Content-Type: application/activity+json

{
  "@context": "http://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.vn/users/quang",
  "object": {
    "type": "Note",
    "content": "Bài viết đầu tiên của tôi bằng ActivityPub! 🎉",
    "to": ["http://www.w3.org/ns/activitystreams#Public"]
  }
}</code>

Phản hồi từ server:

<code>HTTP/1.1 201 Created
Content-Type: application/activity+json

{
  "@context": "http://www.w3.org/ns/activitystreams",
  "type": "Create",
  "id": "https://example.vn/activities/1628459372154",
  "actor": "https://example.vn/users/quang",
  "published": "2025-09-10T09:49:32Z",
  "object": {
    "type": "Note",
    "id": "https://example.vn/notes/1628459372154",
    "content": "Bài viết đầu tiên của tôi bằng ActivityPub! 🎉",
    "published": "2025-09-10T09:49:32Z",
    "attributedTo": "https://example.vn/users/quang",
    "to": ["http://www.w3.org/ns/activitystreams#Public"]
  }
}</code>

Theo Dõi Người Khác (Follow)

Yêu cầu theo dõi:

<code>{
  "@context": "http://www.w3.org/ns/activitystreams",
  "type": "Follow",
  "actor": "https://gamecorp.vn/people/tuan/",
  "object": "https://gamecorp.vn/people/minh/",
  "to": ["https://gamecorp.vn/people/minh/"]
}</code>

Quy trình xử lý yêu cầu này bao gồm việc xác thực, thêm vào danh sách người theo dõi và có thể thông báo cho người bị theo dõi.

Kết Luận

ActivityPub mở ra nhiều khả năng cho các ứng dụng xã hội phi tập trung. Bằng cách hiểu và triển khai các giao thức này, bạn có thể xây dựng các ứng dụng mạnh mẽ và linh hoạt hơn.

Thẻ: ActivityPub Xã Hội Phi Tập Trung Giao Thức W3C

Đăng vào ngày 3 tháng 6 lúc 01:32