Drupal 8 lưu trữ các cuộc gọi API còn lại


7

Tôi đang sử dụng Drupal 8 ở chế độ không đầu với góc 8 là khách hàng của mình. Vấn đề tôi gặp phải là Drupal lưu trữ các cuộc gọi đến apis. Chẳng hạn, tôi có một điểm cuối giả sử đưa ra các mục theo thứ tự ngẫu nhiên nhưng điều này không xảy ra, tôi chỉ nhận các mục trong bộ đệm theo thứ tự cụ thể. Làm thế nào tôi có thể vượt qua điều này. Tôi đã cố gắng vô hiệu hóa các mô-đun bộ đệm nhưng vẫn có hành vi tương tự

Câu trả lời:


13

Có hai cấp độ bộ nhớ đệm trong Drupal.

1.) Cache trang động

Bạn phải cung cấp siêu dữ liệu bộ đệm chính xác trên phản hồi json.

Ví dụ: sử dụng thuộc tính bộ đệm từ cấu hình hoặc thực thể nội dung

$response->addCacheableDependency($entitiy);

hoặc xây dựng một đối tượng siêu dữ liệu có thể lưu trong bộ nhớ cache và thêm điều này vào phản hồi:

$build = [
  '#cache' => [
    'contexts' => ['url.query_args'],
    'tags' => ['node:1', 'node_list'],
    'max-age' => 300,
  ],
];
$cache_metadata = \Drupal\Core\Cache\CacheableMetadata::createFromRenderArray($build);
$response->addCacheableDependency($cache_metadata);

Bạn có thể sử dụng điều này trong bộ điều khiển tùy chỉnh hoặc thực hiện điều này trong một thuê bao sự kiện để thay đổi phản hồi từ các mô-đun khác (cốt lõi hoặc đóng góp).

2.) Bộ nhớ cache trang nội bộ

Mô-đun Bộ đệm trang nội bộ lưu trữ tất cả các phản hồi cho các yêu cầu ẩn danh bất kể siêu dữ liệu bộ đệm. Bạn có thể gỡ cài đặt mô-đun này để vô hiệu hóa bộ đệm này.

Giải pháp thay thế

Về phía khách hàng nối thêm một chuỗi truy vấn khác nhau vào mỗi yêu cầu để nhận được phản hồi mới:

node/123?_format=json&time=123456789

Điều này sẽ vô hiệu hóa Bộ đệm ẩn trang nội bộ và các bộ phận của Bộ đệm trang động .

Tham khảo: https://www.drupal.org/docs/8/core/modules/rest/javascript-and-drupal-8-restful-web-service


1
Bạn cũng có thể tắt Bộ đệm ẩn nội bộ cho các tuyến cụ thể bằng \ Drupal :: service ('page_cache_kill_switch') -> trigger (); Và nếu drupal.org/node/2352009 vào, nó cũng sẽ tôn trọng tuổi tối đa.
Berdir

1
Tôi đã phải thêm đề xuất của Berdir về \ Drupal :: service ('page_cache_kill_switch') -> trigger (); mặt khác, nó vẫn được lưu trong bộ nhớ cache cho người dùng ẩn danh đối với tôi
Matt

5

Tôi thích vô hiệu hóa hoàn toàn bộ đệm cho các điểm cuối của tôi. Bạn có thể làm điều đó bằng cách thêm một phụ thuộc có thể lưu vào bộ nhớ cache với MaxAge bằng không vào đối tượng ResourceResponse .

Đây là một ví dụ:

$response = new ResourceResponse($data);
$disable_cache = new CacheableMetadata();
$disable_cache->setCacheMaxAge(0);

$response->addCacheableDependency($disable_cache);

return $response;

Đây có vẻ là một ý tưởng tuyệt vời để phát triển, nhưng đối với một trang web sản xuất, bạn sẽ muốn thêm các tham số có thể thay đổi phản hồi của bạn addCacheableDependencyđể trang web của bạn có thể hoạt động / mở rộng hơn.
chào mừng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.