Tạo một API
Tạo một APIThêm HTTP caching

Thêm HTTP caching

Khi các queries được thực thi trên máy chủ GraphQL bằng GET (thay vì phương thức POST truyền thống hơn), phản hồi GraphQL có thể được lưu vào bộ nhớ đệm ở phía máy khách hoặc ở các giai đoạn trung gian giữa máy khách và máy chủ (chẳng hạn như CDN), bằng cách dựa vào HTTP caching tiêu chuẩn.

Điều này hoạt động tự nhiên với các persisted queries, và đối với single endpoint và custom endpoints, nó có thể hoạt động bằng cách thêm tham số ?query={ GraphQL query } vào endpoint.

Cấu hình được tạo thông qua một danh sách kiểm soát cache, và được cung cấp cho endpoint thông qua cấu hình schema.

Thực thi endpoint qua GET

Các persisted queries đã phù hợp để thực thi qua GET, vì chúng lưu trữ GraphQL query trên máy chủ (tức là không cần cung cấp trong phần thân của yêu cầu).

Tuy nhiên, đối với single endpoint và custom endpoints, query phải được cung cấp trong tham số ?query=... gắn vào URL của endpoint.

Ví dụ, GraphQL query sau:

{
  posts {
    id
    title
    url
    author {
      id
      name
      url
    }
  }
}

...có thể được thực thi qua GET trên single endpoint như sau:

https://mysite.com/graphql/?query={ posts { id title url author { id name url } } }

Tính toán max-age tự động

Giá trị max-age của phản hồi được tính toán tự động từ các danh sách kiểm soát truy cập được gán cho endpoint (thông qua cấu hình schema).

Giá trị này là giá trị max-age thấp nhất trong số tất cả các trường và directives trong query được yêu cầu, hoặc no-store nếu:

  • bất kỳ mutation nào được thực thi
  • bất kỳ trường hoặc directive nào có max-age với giá trị 0
  • một quy tắc kiểm soát truy cập phải kiểm tra trạng thái người dùng cho bất kỳ trường hoặc directive nào (trong trường hợp đó, phản hồi dành riêng cho người dùng, vì vậy không thể lưu vào bộ nhớ đệm)

Max-age mặc định

Các trường không được gán max-age cụ thể sẽ sử dụng giá trị mặc định, được xác định trong Schema Configuration:

Giá trị max-age mặc định trong Schema Configuration

Nếu không được đặt, giá trị max-age mặc định được xác định trong trang Cài đặt, trong tab "Cache Control", sẽ được sử dụng. Giá trị này là 86400 giây, có thể được chỉnh sửa trong Cài đặt.

Ví dụ

Giả sử chúng ta có cấu hình giá trị max-age sau cho các trường của kiểu User:

  • name => 600
  • url => 30

Khi đó, phản hồi cho query này sẽ có giá trị max-age được đặt thành 86400 (vì cả displayName lẫn email đều chưa được cấu hình, nên chúng sử dụng giá trị mặc định):

query {
  users {
    displayName
    email
  }
}

Phản hồi cho query này sẽ có giá trị max-age được đặt thành 30 (tương ứng với url, là giá trị thấp nhất trong tất cả các trường đã được cấu hình):

query {
  user(by: {id: 1}) {
    name
    url
  }
}

Phản hồi cho query này sẽ có giá trị max-age được đặt thành no-store (vì trường me yêu cầu trạng thái người dùng):

query {
  me {
    name
    url
  }
}

Phản hồi cho query này sẽ có giá trị max-age được đặt thành no-store (vì nó thực thi một mutation):

mutation {
  createPost {
    id
  }
}

Truy cập tất cả các danh sách kiểm soát cache

Nhấp vào "Cache Control Lists" trong menu của plugin, nó sẽ hiển thị danh sách tất cả các danh sách kiểm soát cache đã được tạo:

Danh sách kiểm soát cache trong trang quản trị
Danh sách kiểm soát cache trong trang quản trị

Tạo một danh sách kiểm soát cache mới

Nhấp vào nút "Add New Cache Control List" để mở trình soạn thảo WordPress:

Tạo một danh sách kiểm soát cache

Đặt tiêu đề cho danh sách kiểm soát cache, thêm các mục với các trường và directives, và cấu hình giá trị max-age cho chúng:

Tạo một danh sách kiểm soát cache

Khi hoàn tất, nhấp vào nút Publish. Sau đó, danh sách kiểm soát cache mới sẽ có sẵn cho cấu hình schema.

Các mục Cache Control

Mỗi Cache Control List chứa một hoặc nhiều mục, mỗi mục có các thành phần sau:

  • Các trường cần cấu hình caching
  • Các directives cần cấu hình caching
  • Giá trị max-age cho chúng

Mục kiểm soát truy cập

Chọn các trường từ interfaces

Ngoài các trường từ các kiểu, chúng ta cũng có thể chọn các trường từ interfaces. Trong trường hợp này, giá trị max-age được áp dụng khi truy vấn những trường đó từ bất kỳ kiểu nào triển khai interface.

Chọn một trường từ một interface
Chọn một trường từ một interface

Mô tả danh sách kiểm soát cache

Sử dụng trường "Excerpt" trong bảng cài đặt Document để cung cấp mô tả cho danh sách kiểm soát cache.

Tìm thêm thông tin trong hướng dẫn Thêm mô tả cho API.

Sử dụng danh sách kiểm soát cache

Sau khi tạo danh sách kiểm soát cache, chúng ta có thể để Custom Endpoint hoặc Persisted Query sử dụng nó bằng cách chỉnh sửa Schema Configuration tương ứng, và chọn ACL từ danh sách trong khối "Cache Control Lists".

Chọn một danh sách kiểm soát cache trong Schema Configuration

Nếu không tùy chỉnh cấu hình, các Cache Control Lists mặc định được xác định trên trang Cài đặt, trong tab "Cache Control", sẽ được sử dụng:

Chọn các Cache Control Lists mặc định trong trang Cài đặt