Back to Main Site

API GraphQL: Truy vấn và đột biến

Last updated on Jun 24, 2026 01:02

Mặc dù REST rất lý tưởng cho việc tích hợp tiêu chuẩn, nhưng các kiến ​​trúc Headless hiện đại (như Next.js, Nuxt.js hoặc Gatsby) thường được hưởng lợi từ độ chính xác của GraphQL.

PolyCMS cung cấp điểm cuối GraphQL mạnh mẽ, được hỗ trợ bởi Nuwave/Lighthouse, cho phép giao diện người dùng của bạn yêu cầu chính xác dữ liệu mà nó cần—không hơn, không kém.

Điểm cuối GraphQL được đặt tại: http://localhost:8000/graphql

Xác thực

Xác thực cho API GraphQL hoạt động giống hệt như API REST. Bạn phải chuyển mã thông báo Sanctum Bearer Laravel trong tiêu đề Ủy quyền.

Authorization: Bearer YOUR_TOKEN_HERE

Sân chơi GraphQL

Để khám phá lược đồ và kiểm tra các truy vấn một cách tương tác, PolyCMS bao gồm sân chơi GraphQL.

Trong môi trường phát triển cục bộ của bạn, hãy điều hướng đến http://localhost:8000/graphql để xem lược đồ tự ghi tài liệu và viết truy vấn kiểm tra. (Lưu ý: Điểm cuối này bị vô hiệu hóa trong môi trường sản xuất để bảo mật).

Viết truy vấn

Truy vấn được sử dụng để đọc dữ liệu từ hệ thống.

Ví dụ: Tìm nạp danh sách bài viết được phân trang

Truy vấn này tìm nạp 10 bài đăng được xuất bản đầu tiên, bao gồm tiêu đề, phần mở rộng và tên của các danh mục mà chúng thuộc về. Lưu ý cách chúng tôi tránh tìm nạp quá mức bằng cách chỉ yêu cầu cụ thể các trường chúng tôi cần.

query {
  posts(first: 10, status: "publish") {
    data {
      id
      title
      slug
      categories {
        name
      }
    }
    paginatorInfo {
      currentPage
      lastPage
      total
    }
  }
}

Ví dụ: Tìm nạp một sản phẩm bằng Slug

query {
  product(slug: "iphone-15-pro") {
    id
    name
    price
    description_html
    stock_status
  }
}

Viết đột biến

Đột biến được sử dụng để tạo, cập nhật hoặc xóa dữ liệu.

Ví dụ: Tạo nội dung bình chọn (Reaction)

PolyCMS có hệ thống bỏ phiếu nội dung chung. Đây là cách một ứng dụng giao diện người dùng có thể gửi phiếu bầu "hữu ích" thông qua GraphQL:

mutation {
  createContentVote(
    votable_type: "App\\Models\\Post",
    votable_id: 42,
    type: "helpful",
    ip_address: "192.168.1.1"
  ) {
    id
    type
    created_at
  }
}

Tích hợp với Frontend

Nếu bạn đang xây dựng Headless SPA, chúng tôi khuyên bạn nên sử dụng ứng dụng khách GraphQL như Apollo Client (dành cho React/Vue) hoặc URQL để xử lý bộ nhớ đệm, quản lý trạng thái và yêu cầu phân nhóm khi giao tiếp với điểm cuối PolyCMS GraphQL.