Phân Trang Dựa Trên Con Trỏ Là Gì? Hướng Dẫn Thiết Kế API

Phân Trang Dựa Trên Con Trỏ Là Gì?

Trình duyệt thu thập dữ liệu không bị mắc lỗi duy trì các phiên duyệt web qua các tương tác trang để quy trình dữ liệu có thể theo các trạng thái điều khiển bởi con trỏ, tải thêm và cuộn vô hạn trên các website công cộng.

Tóm tắt

  • Phân trang dựa trên con trỏ chia một tập kết quả đã được sắp xếp thành các trang và cung cấp cho khách hàng một giá trị tiếp tục mờ mà đại diện cho một vị trí trong thứ tự đó. Một phản hồi điển hình chứa một mảng các mục cộng với một con trỏ tiếp theo, một con trỏ trước đó hoặc các trường thông tin trang như hasNextPage.
  • Thiết lập một thứ tự ổn định. Máy chủ sắp xếp kết quả theo một hoặc nhiều trường và thêm một yếu tố phân giải duy nhất. Hướng sắp xếp, bộ lọc và phạm vi tạo thành một phần của hợp đồng điều hướng và nên giữ nguyên trong khi khách hàng đi qua các trang.
  • Gửi mã thông báo không thay đổi. Yêu cầu tiếp theo bao gồm mã thông báo chính xác trong tham số được tài liệu hóa. Máy chủ xác thực nó, khôi phục ranh giới liên quan và áp dụng các bộ lọc và thứ tự giống nhau trước khi chọn lát cắt tiếp theo.
  • Giữ nguyên bộ lọc, phạm vi tài khoản, các trường sắp xếp và hướng trong suốt một lần truy cập. Các trang lặp lại thường có nghĩa là khách hàng đang gửi mã thông báo sai, bỏ qua một bộ lọc hoặc theo dõi một liên kết tiếp tục lỗi thời.
  • Phân trang dựa trên con trỏ thay thế vị trí số bằng một ranh giới tiếp tục được xác định bởi máy chủ.

Định nghĩa và Câu Trả Lời Ngắn

Phân trang dựa trên con trỏ chia một tập kết quả đã được sắp xếp thành các trang và cung cấp cho khách hàng một giá trị tiếp tục mờ mà đại diện cho một vị trí trong thứ tự đó. Khách hàng gửi con trỏ đã trả về để yêu cầu lát cắt tiếp theo hoặc trước đó. Không giống như một số trang, con trỏ không phải là một địa điểm dễ nhận biết như trang năm. Nó là trạng thái được xác định bởi máy chủ, thường được suy ra từ các giá trị sắp xếp của bản ghi cuối cùng, một dấu hiệu bản chụp, hoặc một mã thông báo được mã hóa cho phép dịch vụ tiếp tục một cách hiệu quả.

Một phản hồi điển hình chứa một mảng các mục cộng với một con trỏ tiếp theo, một con trỏ trước đó hoặc các trường thông tin trang như hasNextPage. Khách hàng phải bảo tồn con trỏ chính xác như đã trả về. Giải mã, chỉnh sửa hoặc tổng hợp một con trỏ gắn kết khách hàng với các chi tiết triển khai và có thể bị phá vỡ khi dịch vụ thay đổi định dạng mã thông báo của nó. Một con trỏ tiếp theo vắng mặt hoặc một dấu hiệu kết thúc rõ ràng bình thường có nghĩa là quá trình điều hướng đã hoàn tất.

Phân trang con trỏ hoạt động tốt nhất với một thứ tự xác định. Sắp xếp chỉ với một trường không độc nhất như thời gian tạo có thể để lại các bản ghi bị ràng buộc ở ranh giới trang. Một thiết kế ổn định thêm một yếu tố phân giải duy nhất, thường là một định danh không thay đổi, để mỗi bản ghi có một thứ tự tổng thể. Điều kiện tiếp tục sau đó có thể chọn các bản ghi sau bộ dữ liệu cuối cùng, chẳng hạn như các giá trị sau thời gian tạo và định danh nhất định.

Cách tiếp cận này đặc biệt hữu ích cho các luồng và các tập dữ liệu đang thay đổi. Các trang sâu không yêu cầu cơ sở dữ liệu đếm và loại bỏ từng hàng trước đó, và các bản ghi mới được chèn trước vị trí hiện tại ít có khả năng làm thay đổi các trang sau. Tuy nhiên, phân trang dựa trên con trỏ không tự động tạo ra một bản chụp đông cứng. Các thao tác xoá, chỉnh sửa các trường sắp xếp và thay đổi bên ngoài ranh giới con trỏ vẫn có thể ảnh hưởng đến những gì khách hàng thấy trừ khi API lập tài liệu về ngữ nghĩa bản chụp.

Cách một Con trỏ Tiến lên Qua một Tập Được Sắp xếp

  1. Thiết lập một thứ tự ổn định. Máy chủ sắp xếp kết quả theo một hoặc nhiều trường và thêm một yếu tố phân giải duy nhất. Hướng sắp xếp, bộ lọc và phạm vi tạo thành một phần của hợp đồng điều hướng và nên giữ nguyên trong khi khách hàng đi qua các trang.
  2. Trả về trang đầu tiên và mã thông báo. Yêu cầu ban đầu bỏ qua một con trỏ hoặc sử dụng một giá trị khởi tạo được tài liệu hóa. Máy chủ trả về một tập hợp mục có giới hạn và một mã thông báo mờ đại diện cho ranh giới tiếp tục sau mục cuối cùng.
  3. Gửi mã thông báo không thay đổi. Yêu cầu tiếp theo bao gồm mã thông báo chính xác trong tham số được tài liệu hóa. Máy chủ xác thực nó, khôi phục ranh giới liên quan và áp dụng các bộ lọc và thứ tự giống nhau trước khi chọn lát cắt tiếp theo.
  4. Dừng lại khi có tín hiệu đầu cuối rõ ràng. Quá trình điều hướng kết thúc khi con trỏ tiếp theo vắng mặt, null hoặc kết hợp với một cờ kết thúc. Khách hàng cũng nên loại bỏ trùng lặp bằng danh tính bản ghi ổn định và giữ một bảo vệ trang có ranh giới cho các mã thông báo xấu hoặc lặp lại.

Phân Trang Dựa Trên Con Trỏ Trong Các Hệ Thống Thực

Luồng hoạt động

Các sự kiện mới có thể xuất hiện ở phía trước trong khi một người đọc tiếp tục từ một ranh giới ổn định mà không có số trang chuyển động bên dưới phiên.

Bộ sưu tập API lớn

Các truy vấn theo kiểu tập khóa có thể tiếp tục từ các giá trị sắp xếp đã đánh chỉ số thay vì quét qua một độ lệch số sâu.

Cuộn vô hạn

Một giao diện người dùng có thể bổ sung mỗi lô và giữ con trỏ tiếp theo trong bộ nhớ cho đến khi dịch vụ báo cáo sự kết thúc.

Tập hợp dữ liệu

Một trình thu thập dữ liệu có thểcheckpoint con trỏ bên cạnh lô cuối cùng đã cam kết và tiếp tục từ trạng thái tiếp tục đã biết sau một dừng có chủ đích.

Các Trường Con Trỏ Bạn Thường Gặp

Một cái nhìn song song ngăn không cho các khái niệm gần gũi bị đối xử như thể có thể thay thế cho nhau. Sử dụng sự so sánh để xác định hợp đồng nào đang hoạt động trước khi thay đổi hành vi của khách hàng hoặc máy chủ.

Khái niệm hoặc Tín hiệuÝ nghĩaGhi chú Hoạt động
con trỏ tiếp theoMã thông báo không rõ cho trang tiếp theoLưu giữ chính xác; dừng lại khi không có
con trỏ trước đóMã thông báo không rõ cho trang trướcHữu ích cho điều hướng hai chiều khi được hỗ trợ
có_trang_tiếp_theoTín hiệu kết thúc booleanSử dụng với con trỏ đã trả về, không thay thế con trỏ
con trỏ_kết_thúcRanh giới liên quan đến cạnh cuối cùngPhổ biến trong các phản hồi kết nối GraphQL
kích_thước_trang hoặc đầu tiênSố mục tối đa được yêu cầuDịch vụ vẫn có thể trả về ít mục hơn

Chẩn đoán và Thiết kế Vận hành Dựa trên Con trỏ

Các trang lặp lại thường có nghĩa là máy khách đang gửi mã thông báo sai, bỏ qua bộ lọc, hoặc theo một liên kết tiếp tục cũ. Ghi lại băm của mỗi con trỏ thay vì giá trị đầy đủ khi mã thông báo có thể chứa trạng thái nhạy cảm. Ghi lại các định danh bản ghi ổn định đầu tiên và cuối cùng trên mỗi trang. Nếu mã thông báo thay đổi nhưng ranh giới mục không thì kiểm tra cách sắp xếp của máy chủ và xử lý tie.

Các bản ghi bị thiếu thường xuất hiện khi việc sắp xếp không ổn định hoặc một trường có thể thay đổi là một phần của con trỏ. Một bản ghi có điểm số hoặc thời gian cập nhật thay đổi có thể di chuyển qua ranh giới hiện tại trong quá trình duyệt. Sử dụng cách sắp xếp không thay đổi khi có thể, thêm một yếu tố phân tách duy nhất, và tài liệu hóa liệu API có hứa hẹn về độ ổn định snapshot hay chỉ là tiến bộ theo hướng một bộ sưu tập trực tiếp.

Một trang do trình duyệt điều khiển có thể ẩn con trỏ trong phản hồi mạng nội bộ thay vì URL hiển thị. Kiểm tra lưu lượng fetch của trang hoặc GraphQL, điều khiển load-more, và trạng thái ứng dụng. Giữ cùng phiên trình duyệt khi mã thông báo được liên kết với cookie hoặc trạng thái phiên, và coi mã thông báo trả về là không rõ ngay cả khi nó trông giống như base64 hoặc JSON có thể đọc được.

Danh sách kiểm tra triển khai phân trang dựa trên con trỏ

Danh sách kiểm tra dưới đây biến khái niệm thành công việc kỹ thuật có thể xác minh. Chỉ áp dụng các mục phù hợp với giao thức và hợp đồng sản phẩm đang hoạt động, nhưng giữ chứng cứ cùng nhau để một kỹ sư khác có thể tái tạo quyết định.

  • Giữ các bộ lọc, phạm vi tài khoản, trường sắp xếp, và hướng không thay đổi trong suốt một lần duyệt.
  • Lưu mỗi mã thông báo tiếp tục chính xác như đã trả về và tránh suy diễn số trang từ đó.
  • Khử trùng đầu ra bằng một định danh bản ghi bền vững thay vì vị trí trang.
  • Kiểm tra con trỏ chỉ sau khi lô tương ứng đã được cam kết thành công.
  • Dừng lại trên tín hiệu kết thúc đã tài liệu hóa và thêm một bảo vệ trang có giới hạn cho các chu kỳ không mong đợi.
  • Ghi lại các ranh giới trang và băm con trỏ để các đoạn lặp lại hoặc bỏ qua có thể được điều tra.
  • Kiểm tra chèn, xóa, và thay đổi trường sắp xếp tại các ranh giới trang trước khi yêu cầu hành vi snapshot.

Sau khi triển khai, kiểm tra hành vi bình thường, các ranh giới, đầu vào sai cấu trúc, trạng thái bị thiếu, hoạt động đồng thời, và từ chối truy cập có mục đích trong một môi trường được kiểm soát. Ghi lại trạng thái kỳ vọng, hình dạng thân, điều kiện kết thúc, và chuyển đổi trạng thái cho mỗi trường hợp. Giám sát sản xuất nên báo cáo cùng kích thước đã sử dụng trong quá trình kiểm tra để một sự cố có thể được so sánh với một cơ sở đã biết.

Tài liệu nên nêu rõ trách nhiệm ở mỗi bên của giao diện. Các máy khách cần các trường bắt buộc, định danh ổn định, quy tắc sắp xếp, giới hạn, tín hiệu cuối, và ý nghĩa lỗi. Các nhà điều hành cần chính sách nội bộ, quyết định lưu trữ hoặc định tuyến, các trường quan sát, và phản hồi công khai an toàn. Những hợp đồng mơ hồ khiến các nhóm sửa chữa triệu chứng hiển thị ở lớp sai.

Những Sai Lầm Thường Gặp Với Phân Trang Dựa Trên Con Trỏ

Đừng suy luận thành công, sự vắng mặt, quyền hạn, thứ tự, hoặc hoàn thành từ một trường mà không có hợp đồng xung quanh. Mã trạng thái, mã thông báo, kích thước trang, và tiêu đề vận chuyển mỗi cái trả lời một câu hỏi hẹp. Thân phản hồi, phương pháp, danh tính, bộ lọc, phiên bản giao thức, và tài liệu của máy chủ cung cấp phần còn lại của ý nghĩa.

Đừng loại bỏ ngữ cảnh chẩn đoán với lý do đơn giản. Một dòng nhật ký ngắn bỏ qua định danh yêu cầu, mục tiêu, phiên bản, phạm vi, hoặc ranh giới có thể biến một lỗi nhỏ thành hàng giờ suy diễn. Đồng thời, khả năng quan sát phải loại bỏ thông tin chứng thực, bí mật phiên, URL đã ký, và các trường tải trọng nhạy cảm.

Đừng biến một giải pháp tạm thời thành hợp đồng vĩnh viễn. Khắc phục vấn đề sắp xếp, quyền hạn, định tuyến, tốc độ, định hình, hoặc ánh xạ lỗi cơ bản và thêm một bài kiểm tra hồi quy. Một hệ thống trở nên đáng tin cậy khi thất bại là rõ ràng và có giới hạn, không phải khi một lần chạy thủ công hoàn thành tình cờ.

Kết luận

Phân trang dựa trên con trỏ thay thế vị trí số bằng một ranh giới tiếp tục được xác định bởi máy chủ. Điểm mạnh của nó đến từ việc sắp xếp ổn định, các truy vấn tiếp tục có chỉ mục, mã thông báo không rõ, và tín hiệu kết thúc rõ ràng. Các máy khách thành công khi họ giữ cho con trỏ không thay đổi, giữ cho các tham số duyệt cố định, chỉ kiểm tra các trang đã cam kết, và phân biệt tiến bộ về phía trước trên dữ liệu sống với một snapshot đã được đảm bảo.

Sẵn sàng xây dựng một quy trình công việc dữ liệu đáng tin cậy hơn?

Kết nối các khái niệm giao thức trong hướng dẫn này với bề mặt sản phẩm Scrapeless được tài liệu hóa và giữ cho mọi yêu cầu có thể đo lường từ khi gửi đến khi nhận được kết quả.

Đăng ký ngay hôm nay và nhận $5 tín dụng miễn phíkhông yêu cầu thẻ tín dụng.

Nhận tín dụng $5 của bạn →

Câu Hỏi Thường Gặp

Có phải con trỏ luôn là ID bản ghi cơ sở dữ liệu không?

Không. Một con trỏ có thể mã hóa nhiều giá trị sắp xếp, một dấu hiệu snapshot, phạm vi tài khoản, hoặc trạng thái phía máy chủ. Các máy khách nên coi nó là không rõ và chỉ dựa vào các trường yêu cầu và phản hồi được tài liệu hóa của API.

Phân trang dựa trên con trỏ có thể nhảy trực tiếp đến trang 50 không?

Thông thường không. Phân trang dựa trên con trỏ được thiết kế để tiếp tục tuần tự, vì vậy việc đạt đến một vị trí xa thường yêu cầu một con trỏ từ phản hồi trước đó hoặc một ranh giới tìm kiếm độc lập. Truy cập ngẫu nhiên số là một lĩnh vực mà phân trang theo bù nhìn đơn giản hơn.

Phân trang con trỏ có ngăn chặn các bản sao không?

Không. Sắp xếp ổn định giảm sự dịch chuyển trang, nhưng cập nhật trực tiếp, các trường sắp xếp thay đổi và hành vi dịch vụ vẫn có thể tạo ra sự chồng chéo. Khách hàng nên loại bỏ các bản sao bằng cách xác định danh tính bản ghi ổn định và theo dõi giới hạn trang.

Khách hàng có nên giải mã một con trỏ không?

Khách hàng không nên phụ thuộc vào nội dung con trỏ đã giải mã trừ khi API rõ ràng định nghĩa định dạng là công khai. Một mã thông báo có thể đọc được có thể thay đổi mà không cần thông báo trước, bao gồm một chữ ký, hoặc chứa trạng thái không được phép thay đổi.

Làm thế nào một trình thu thập thông tin nên tiếp tục phân trang con trỏ?

Lưu trữ con trỏ cùng với ranh giới lô đã cam kết, bộ lọc, thứ tự sắp xếp và phạm vi. Chỉ tiếp tục với cùng các tham số duyệt, và giữ lại các định danh bản ghi ổn định để loại bỏ bản sao và kiểm toán.

Tài liệu tham khảo