Make WordPress Core

Opened 11 months ago

Last modified 12 days ago

#40510 assigned enhancement

REST API: Post Revisions: Adding support for pagination

Reported by: benoitperson Owned by: flixos90
Milestone: 5.0 Priority: normal
Severity: normal Version: 4.7
Component: REST API Keywords: has-patch needs-unit-tests
Focuses: rest-api Cc:

Description (last modified by flixos90)

The post revisions REST endpoint currently has no support for pagination. While it works well for most usages with fairly low counts of revisions (WordPress.com limits the number at 25 for instance), on posts with a revision count in the hundreds (or even thousands), this can quickly yield unreasonably large (Mb+ of pure text) and long (several seconds on my "test" instances) responses.

The API already supports pagination for a vast majority of ressources (posts, pages, categories, tags, users) and is normalised around using 2 integer parameters: page (default: 1)and per_page (default: 10).

I wonder if there is any reason why pagination was never implemented on that endpoint? Is it something potentially worth working on? Considering some of the past issues around high memory usage for the revisions page of wp-admin [0][1], it seems like getting a way to only load (for instance) the most recent revisions would be an interesting win to provide a smoother experience with revisions.

[0] https://core.trac.wordpress.org/ticket/34560
[1] https://core.trac.wordpress.org/ticket/24958

PS: To provide some (more) context, there is an ongoing effort to support revisions in Calypso: https://github.com/Automattic/wp-calypso/pull/12733 from which this enhancement request emerged.

Attachments (1)

40510.diff (6.9 KB) - added by flixos90 12 days ago.

Download all attachments as: .zip

Change History (5)

#1 @danielbachhuber
11 months ago

I wonder if there is any reason why pagination was never implemented on that endpoint?

Probably an oversight, to be honest.

Is it something potentially worth working on?

Go for it!

#2 @rmccue
11 months ago

  • Keywords needs-patch added
  • Milestone changed from Awaiting Review to Future Release

Seems to just be something that was missed. Let's add it. :)

12 days ago

#3 @flixos90
12 days ago

  • Description modified (diff)
  • Keywords has-patch needs-unit-tests added; needs-patch removed
  • Milestone changed from Future Release to 5.0
  • Owner set to flixos90
  • Status changed from new to assigned

Per today's REST API chat, supporting pagination and generally allowing a bit more flexibility with the revisions controller would also come in handy for Gutenberg.

40510.diff adds support for the following query parameters for revisions:

  • exclude
  • include
  • offset
  • order (default 'desc')
  • orderby (default 'date')
  • page (default 1)
  • per_page (default not provided, falling back to using -1 with WP_Query, meaning no limit, for BC with current behavior)
  • search

The implementation aligns closer with how the posts controller works. WP_Query is directly used instead of calling wp_get_post_revisions(), to be able to run a SELECT FOUND_ROWS() query and get the result. Since the function is only a simple wrapper for a query object anyway which sets default arguments, this can easily be handled in the controller itself.

The revisions controller will now return X-WP-Total and X-WP-TotalPages headers and pagination link headers (if applicable) for collection requests, just how the posts controller does.

This ticket was mentioned in Slack in #core-restapi by flixos90. View the logs.

12 days ago

Note: See TracTickets for help on using tickets.