Proxy_Controller::get_items( WP_REST_Request $request )

Summary

Proxy requests.


Parameters

$request

(WP_REST_Request) (Required) Proxied request.


Return

(WP_REST_Response|WP_Error)


Source

File: src/BigCommerce/Proxy/Proxy_Controller.php

	public function get_items( $request ) {

		/**
		 * Filters a proxy REST request before it is run.
		 *
		 * @param WP_REST_Request $request Original request.
		 */
		$request = apply_filters( 'bigcommerce/proxy/request', $request );

		/**
		 * Fires before a proxy REST request is run.
		 *
		 * @param WP_REST_Request $request API request.
		 */
		do_action( 'bigcommerce/proxy/request_received', $request );

		/**
		 * Pre-fetch results. Can be from database or from cache.
		 *
		 * @param array $ Empty array.
		 * @param WP_REST_Request $request API request.
		 * @param array            $        Proxy configuration.
		 */
		$result = apply_filters( 'bigcommerce/proxy/result_pre', [], $request );

		$params = $request->get_params();

		// Get the route.
		$route = $this->route( $request );

		// We have no results, use the BigCommerce API.
		if ( is_wp_error( $result ) || empty( $result ) ) {

			// Request arguments.
			$args = [
				'headers' => $this->get_request_headers( $request, $route ),
			];

			// Proxy the request.
			$response = wp_remote_get( add_query_arg( $params, $route ), $args );

			/**
			 * Raw API response received.
			 *
			 * @param object|array     $response Response from BigCommerce API.
			 * @param string           $route    Route requested.
			 * @param WP_REST_Request $request  API request.
			 */
			do_action( 'bigcommerce/proxy/raw_response_received', $response, $route, $request );

			if ( 200 !== $response['response']['code'] || is_wp_error( $response ) ) {
				return $response;
			}

			$result         = json_decode( $response['body'], true );
			$result['data'] = $this->filter_excluded_fields( $request->get_route(), $result['data'] );

			/**
			 * Do something with the response before it is returned. E.g. Import the product(s) and/or cache it.
			 *
			 * @param array|\WP_Error  $result  Result from API call.
			 * @param WP_REST_Request $request API request.
			 */
			do_action( 'bigcommerce/proxy/response_received', $result, $request );
		}

		/**
		 * Filter the response results before returning it.
		 *
		 * @param array|\WP_Error  $result  Result from API call.
		 * @param string           $route   Route requested.
		 * @param WP_REST_Request $request API request.
		 */
		$result = apply_filters( 'bigcommerce/proxy/result', $result, $route, $request );

		$rest_response = new WP_REST_Response( $result );

		/**
		 * Filter the WordPress REST response before it gets dispatched.
		 *
		 * @param WP_REST_Response $rest_response Response to send back to request..
		 * @param string            $route         Route requested.
		 * @param WP_REST_Request  $request       API request.
		 */
		$rest_response = apply_filters( 'bigcommerce/proxy/rest_response', $rest_response, $route, $request );

		return rest_ensure_response( $rest_response );
	}


User Contributed Notes

You must log in before being able to contribute a note or feedback.