111 lines
2.6 KiB
PHP
111 lines
2.6 KiB
PHP
<?php
|
|
/**
|
|
* A helper class to help with Boost API interactions.
|
|
*
|
|
* @package automattic/jetpack-boost-core
|
|
*/
|
|
|
|
namespace Automattic\Jetpack\Boost_Core\Lib;
|
|
|
|
use Automattic\Jetpack\Boost_Core\Contracts\Boost_API_Client;
|
|
|
|
/**
|
|
* A class that handles the Boost API client.
|
|
*
|
|
* The communication to the backend is done using this class on top of the Boost_API_Client interface.
|
|
*/
|
|
class Boost_API {
|
|
|
|
/**
|
|
* The API client instance.
|
|
*
|
|
* @var Boost_API_Client
|
|
*/
|
|
private static $api_client;
|
|
|
|
/**
|
|
* Get the API client instance.
|
|
*
|
|
* @return Boost_API_Client
|
|
* @deprecated $$next_version$$ Use get(), and post() directly instead.
|
|
*/
|
|
public static function get_client() {
|
|
return self::get_api_client();
|
|
}
|
|
|
|
/**
|
|
* Instantiate the API client.
|
|
*
|
|
* @return Boost_API_Client
|
|
*/
|
|
private static function get_api_client() {
|
|
if ( ! self::$api_client ) {
|
|
$class = apply_filters( 'jetpack_boost_api_client_class', WPCOM_Boost_API_Client::class );
|
|
self::$api_client = new $class();
|
|
}
|
|
return self::$api_client;
|
|
}
|
|
|
|
/**
|
|
* Make a get request to boost API and return response.
|
|
*
|
|
* @param string $path - Request path.
|
|
* @param mixed[] $query - Query parameters.
|
|
* @param mixed[] $args - Request arguments.
|
|
* @return array|\WP_Error
|
|
*/
|
|
public static function get( $path, $query = array(), $args = null ) {
|
|
return self::get_api_client()->get( $path, $query, self::merge_args( $args ) );
|
|
}
|
|
|
|
/**
|
|
* Submit a request to boost API and return response.
|
|
*
|
|
* @param string $path - Request path.
|
|
* @param mixed[] $payload - Request arguments.
|
|
* @param mixed[] $args - Request arguments.
|
|
* @return mixed
|
|
*/
|
|
public static function post( $path, $payload = array(), $args = null ) {
|
|
return self::get_api_client()->post( $path, $payload, self::merge_args( $args ) );
|
|
}
|
|
|
|
/**
|
|
* Merge the arguments with the defaults.
|
|
*
|
|
* @param mixed[] $args - Provided arguments.
|
|
* @return mixed[]
|
|
*/
|
|
private static function merge_args( $args ) {
|
|
if ( ! is_array( $args ) ) {
|
|
$args = wp_parse_args(
|
|
$args,
|
|
array(
|
|
'headers' => self::default_headers(),
|
|
)
|
|
);
|
|
} else {
|
|
$args['headers'] = wp_parse_args( $args['headers'] ?? array(), self::default_headers() );
|
|
}
|
|
|
|
return $args;
|
|
}
|
|
|
|
/**
|
|
* Get the default headers to include with each request.
|
|
*
|
|
* @return string[]
|
|
*/
|
|
public static function default_headers() {
|
|
$headers = array(
|
|
'Content-Type' => 'application/json; charset=utf-8',
|
|
);
|
|
|
|
if ( defined( 'JETPACK_BOOST_VERSION' ) ) {
|
|
$headers['X-Jetpack-Boost-Version'] = JETPACK_BOOST_VERSION;
|
|
}
|
|
|
|
return $headers;
|
|
}
|
|
}
|