Як у 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 сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *