Как в WordPress получить данные кастомного пост-тайпа по API KEY через REST API

Как в WordPress получить данные кастомного пост-тайпа по API KEY через REST API

Решил немного усложнить наш предыдущий код, добавив в него простую проверку доступа по API KEY. В примере ниже будет рассмотрена самая простая реализация проверки доступа по ключу. В реальных приложения, рекомендуется использовать что-то посложнее, типа проверка доступа по Bearer токену.

<?php
add_action('rest_api_init', function()
{
	/**
	 * Get
	 */
	register_rest_route('app/v1', 'get', [
		'methods' => WP_REST_Server::READABLE,
		'permission_callback' => function(WP_REST_Request $Request)
		{
			if($Request -> get_param('key') != '123qwe')
			{
				return new WP_Error('key', 'API KEY is wrong', [
					'status' => 400
				]);
			}

			return true;
		},
		'callback' => function(WP_REST_Request $Request)
		{
			$Post = get_post( $Request -> get_param('post_id') );
			if(is_a($Post, 'WP_Post'))
			{
				return $Post;
			}
			return [];
		},
		'args' => [
			'key' => [
				'description' => 'API KEY',
				'type'=> 'string',
				'required' => true,
			],
			'post_id' => [
				'description' => 'Post ID',
				'type'=> 'integer',
				'required' => true,
			],
		]
	]);
});

Разберем наш код немного подробнее. В колбэка ключа “permission_callback” мы выполняем валидацию ключа доступа:

'permission_callback' => function(WP_REST_Request $Request)
{
	if($Request -> get_param('key') != '123qwe')
	{
		return new WP_Error('key', 'API KEY is wrong', [
			'status' => 400
		]);
	}

	return true;
},

Если метод “$Request -> get_param('key')” вернет значение “123qwe”, то валидация пройдет успешно, и WordPress автоматически перейдет к выполнению колбэка анонимной функции ключа “callback”:

'callback' => function(WP_REST_Request $Request)
{
	$Post = get_post( $Request -> get_param('post_id') );
	if(is_a($Post, 'WP_Post'))
	{
		return $Post;
	}
	return [];
},

Здесь, по GET переменной “post_id” мы получаем данные поста, выполняем проверку на тип объекта, и если он имеет тип “WP_Post”, то возвращаем (return) данные поста в виде JSON строки. В противном случае - пустой массив, который также преобразуется в пустой JSON массив.

Обратите внимание, что мы немного упростили себе работу, выполнив небольшую валидацию через массив “args”:

'args' => [
	'key' => [
		'description' => 'API KEY',
		'type'=> 'string',
		'required' => true,
	],
	'post_id' => [
		'description' => 'Post ID',
		'type'=> 'integer',
		'required' => true,
	],
]

Сделав переменную “key” и “post_id” обязательными к заполнению. А “post_id” кроме всего, должна быть числом.

На этом все.

Поделиться в соцсетях:
Статьи на похожую тематику

С вашим WordPress сайтом проблемы? нужен дополнительный функционал? нестандартный плагин или сверстать новую страницу?
Тогда напишите мне через форму обратной связи, и я постараюсь вам помочь.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *