Make WordPress Core


Ignore:
Timestamp:
05/02/2018 01:24:30 AM (7 years ago)
Author:
pento
Message:

REST API: Filter responses based on the _fields parameter, before data is processed.

Historically, the REST API would generate the entire response object, including running expensive filters, then it would apply the _fields parameter, discarding the fields that weren't specificed.

This change causes _fields to be applied earlier, so that only requested fields are processed.

Props danielbachhuber.
See #43874.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/rest-api/rest-tags-controller.php

    r42724 r43087  
    969969    }
    970970
     971    public function test_prepare_item_limit_fields() {
     972        $request  = new WP_REST_Request;
     973        $endpoint = new WP_REST_Terms_Controller( 'post_tag' );
     974        $request->set_param( '_fields', 'id,name' );
     975        $term     = get_term_by( 'id', $this->factory->tag->create(), 'post_tag' );
     976        $response = $endpoint->prepare_item_for_response( $term, $request );
     977        $this->assertEquals( array(
     978            'id',
     979            'name',
     980        ), array_keys( $response->get_data() ) );
     981    }
     982
    971983    public function test_get_item_schema() {
    972984        $request    = new WP_REST_Request( 'OPTIONS', '/wp/v2/tags' );
Note: See TracChangeset for help on using the changeset viewer.