وردپرس REST API

چگونه در REST API وردپرس ، دسترسی Token برای گسترش استارتاپ ایجاد کنیم ؟

همیشه یکی از نیاز های اساسی یک استارتاپ ، توسعه بخش API آن است.این امر باعث می شود به سرعت توسعه دهندگان دیگر در پروژه ها از امکانات وب سایت شما استفاده کرده ، در نتیجه باعث پیشرفت سریع استارتاپ و فروش محصولات می شود.

اگر در حال توسعه یک استارتاپ در بستر وردپرس هستید می بایست این امکان را  WP REST API پیاده سازی کنید.بهترین الگو را در این زمینه میتوان ایجاد یک API Token برای دیگر اعضا دانست.اگر چه REST API وردپرس در حالت عادی از Basic Authentication که با ورودی نام کاربری و رمز عبور استفاده می شود. اما الگورریتم های جدید تری به نام JWT وجود دارد که بسیاری از استارتاپ ها مانند اینستاگرام ، میلرلایت و … به سمت آن حرکت کرده اند.

در این مقاله هدف من طرح مسئله ایجاد Token و دسترسی کاملا امن به هر کاربر ، توسط یک کد رمز در بستر WordPress Rest Api می باشد.

ایجاد Token در وردپرس REST API

بیایید شروع کنیم اولین قدم این است که برای هر کاربر یک کد API Token ایجاد کنیم.طبق مستندات وردپرس ، مکان قرارگیری اطلاعات اضافی کاربران وردپرس در جدول Usermeta می باشد.ما هم یک نام کلیدی مثل “api_token” را انتخاب می کنیم و برای هر کاربر این کد را ایجاد می کنیم.

حتما بخوانید : گرویتی فرم و نحوه ایجاد فرم های داینامیک در طراحی اپلیکیشن موبایل یا SPA بر بستر وردپرس

ابتدا در جدول لیست کاربران مدیریت وردپرس (Users.php) ، یک ردیف جدید به نام API Token ایجاد می کنیم تا بتوانیم کد API هر کاربر را نمایش دهیم یا در صورت لزوم ایجاد کنیم.ابتدا توسط فیلتر وردپرس manage_users_columns یک ردیف جدید ایجاد می کنیم.

add_action('manage_users_columns','wp_add_user_column');
function wp_add_user_column($columns) {
    $columns['user_auth_key'] = "Api token";
    return $columns;
}

حال برای شناسه user_auth_key ، جهت نمایش API Token کاربران دستورات لازم را می نویسیم :

add_filter('manage_users_custom_column', 'user_posts_count_column_content', 10, 3);
function user_posts_count_column_content($output,$column_name,$user_id) {
    if($column_name =="user_auth_key") {
        /* Set Auth Key For User */
        if( isset($_GET['set_user_token']) and $_GET['set_user_token'] ==$user_id) {
            update_user_meta($user_id, 'api_token', wp_generate_password(50, false));
        }
        $user_token = get_user_meta($user_id, "api_token", true);
        if($user_token !="") {
	        $output = $user_token;
        } else {
            $output = '<a href="'.admin_url('users.php?set_user_token='.$user_id).'" class="button button-primary">Get Token</a>';
        }
    }
    return $output;
}

در کد بالا گفته شده اگر در ردیف user_auth_key باشیم ابتدا چک شود کاربر یک User meta به نام api_token در بانک اطلاعاتی دارد یا خیر ؟
اگر وجود داشت که آن را نمایش بدهد در غیر این صورت یک دکمه ایجاد کردیم تا مدیریت بتواند برای کاربر token ایجاد کند.
همیشه token می بایست یک عبارت تصادفب باشد یه همبن دلیل من از تابع wp_generate_password برای ایجاد عبارت 50 کاراکتری تصادفی استفاده کردم.

 

آموزش ایجاد مسیر Route در وردپرس REST API

می خواهیم یک مسیر جدید در وردپرس REST API ایجاد کنیم که در آن کاربر ابتدا Token خود را به صورت Header درخواست ارسال کند و مشخصات پروفایل خود را در وب سایت خود به نمایش در بیاورد.برای ایجاد مسیر از اکشن rest_api_init استفاده می کنیم.

add_action( 'rest_api_init', 'add_custom_users_api');
function add_custom_users_api(){
	register_rest_route( 'method', '/get_user/', array(
		'methods' => 'GET',
		'callback' => 'get_custom_users_data',
	));
}

ابتدا توسط تابع register_rest_route یک مسیر جدید ایجاد کردیم.برای خروجی این مسیر با فرض این که دامنه ما Realwp.net باشد به صورت زیر در می آید :

https://site.com/wp-json/method/get_user/

شاید شما هم مثل من از عبارت wp-json در آدرس وب سرویس خوشتان نیاید.جهت تغییر این کلید از فیلتر rest_url_prefix استفاده کنیم.دقت کنید بعد از قرار دادن این کد حتما می بایست در تنظیمات پیوند یکتا وردپرس وارد شوید و یک بار دکمه ذخیره پیوند ها را بزنید تا آدرس دهی ها بروز شوند.

add_filter( 'rest_url_prefix', 'change_wp_json_prefix_url');
function change_wp_json_prefix_url( $slug ) {
	return 'api';
}

با تغییر بالا ، آدرس مسیر ما به این شکل تغییر می کند.

https://site.com/api/method/get_user/

اگر به اکشن ایجاد مسیر دقت کنید در پارامتر callback مشخص کردیم که اطلاعات برای تحلیل به تابع get_custom_users_data ارسال شود.این تابع را به شکل زیر می نویسیم :

function get_custom_users_data(){
//Check Authoration
$header = getallheaders();
//check Authorization
if (array_key_exists("Authorization",$header) ===false)
{
	return new WP_Error( 'error', 'Token Not found', array( 'status' => 404 ) );
}

//Check User token
$user = get_users([
   'meta_key' => 'api_token',
   'meta_value' => $header['Authorization'],
   'number' => 1
]);
if(count($user) ==1) {

	$result = [
      'status' => 'yes',
      'data' => [
        'name' => $user[0]->display_name,
        'date_register' => parsidate("Y-m-d", $user[0]->user_registered, "eng"),
        'email' => $user[0]->user_email,
      ]
    ];
	return new WP_REST_Response($result, 200);

} else {
	return new WP_Error( 'error', 'Token is wrong', array( 'status' => 404 ) );
}
}

طبق مستنداتی که به کاربران وب سرویس خود ارایه می دهید آن ها را مجاب کنید که کلید توکن token خود را در خواست به صورت Header با کلید Authorization ارسال کنند. در خط ابتدایی این توسط تابع php به نام getallheaders ، مقادیر هایی که به صورت Header به این تابع ارسال شده است را چک میکند در صورتی که پارامتر Authorization  وجود نداشت کاربر با پیغام خطا مواجه می شود.

بعد از آن می بایست چک کنیم که آیا کاربری با این توکن token در بانک اطلاعاتی وردپرس وجود دارد یا خیر .در اینجاست که توسط تابع get_users بررسی می کنیم که آیا کاربری با چنین متایی وجود دارد یا خیر در صورت وجود ، اطلاعات پروفایل کاربری در قالب json بازگردانده می شود.در شکل زیر تست این مسیر در نرم افزار postman را مشاهده می کنید :

تاریخ ثبت نام را بصورت شمسی نمایش دادیم.برای توسعه وب فارسی در وردپرس می توانید از مقاله استفاده از افزونه پارسی دیت در زیر استفاده کنید :

حتما بخوانید : چگونه با افزونه پارسی دیت ، استارت آپ های وردپرس فارسی را توسعه دهیم ؟

آموزش ایجاد مستندات وب سرویس برای توسعه دهندگان

حال نوبت به آن می رسد که یک فایل پی دی اف برای وب سرویس خود ایجاد کنید تا دیگر برنامه نویسان بتوانند از این قابلیت در سایت یا اپلیکیشن خود کنند.برای مثال بالا کافیست بیان کنید یک درخواست به صورت GET به آدرس ارسال نموده که مقدار Header آن برابر با Token کاربری شما باشد.من این کار را توسط تابع Curl در php بصورت زیر انجام می دهم :

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
	CURLOPT_URL => "https://site.com/api/method/get_user/",
	CURLOPT_RETURNTRANSFER=>true,
	CURLOPT_CUSTOMREQUEST => "get",
	CURLOPT_POSTFIELDS => "",
	CURLOPT_HTTPHEADER => array(
		"Authorization: XYC6yzl6Vs9sUdHEKXybxf9x19e6KuypcdpsTCdo",
	),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

$result = json_decode($response, true)['data'];
foreach($result as $key => $value) {
	echo $key." : ".$value;
	echo "<br>";
}

اگر در مروگر این کد را اجرا کنیم خروجی نهایی آن بصورت زیر در می آید :

اگر دانش کافی در Rest API وردپرس داشته باشید براحتی می توانید وب اپلیکیشن های بینظیر در کنار Vuejs یا React ایجاد کنید و توسعه استارتاپ خود را مبتنی بر هسته ی وردپرس به طور چشم گیری افزایش دهید.

مهرشاد درزی

من عاشق چالش های سخت در وردپرس هستم. کار من تحقیق در زمینه ی هسته ی وردپرس و ارائه مشاوره و راهکارهای عملی برای توسعه سایت ها و استارتاپ های متوسط و بزرگ وردپرسی است.به کسب و کارها آموزش می دهم ، ایده هایشان را در بستر وردپرس پیاده سازی می کنم ، افزونه یا قالب اختصاصی طراحی و اجرا میکنم ، در تمام این مسیر نیز پشتیبانی صحیح از وب سایت شان دارم تا ضد گلوله شوند.آکادمی وردپرس واقعی جایی است که به بیان تجربه های خودم در زمینه وردپرس برای علاقه مندان می پردازم.

انتشار
انتشار توسط
مهرشاد درزی

آخرین مطالب

اعمال قیمت فوق العاده محصولات ووکامرس به عنوان تخفیف سفارشات

همان طور که می دانید افزونه ووکامرس درنسخه های اخیر یک تغییر عمده در سفارشات…

3 هفته پیش

هماهنگ کردن محصولات ووکامرس با نرم افزار حسابداری

در زمان تهیه افزونه های وردپرس برای اتصال نرم افزار حسابداری به سیستم فروشگاهی ووکامرس…

3 هفته پیش

هوش مصنوعی در وردپرس

بالاخره در نسخه ی وردپرس 7.0 سرویس اتصال به سرویس هی خارجی مانند هوش مصنوعی…

1 ماه پیش

معرفی بهترین افزونه‌های پشتیبانی وردپرس

تا به حال شده با دل‌نگرانی در داشبورد سایت وردپرسی‌تان بنشینید، چون بخشی از سایت…

9 ماه پیش

هماهنگی محتوا و پشتیبانی سایت؛ چطور تیم فنی را با محتوا هم‌راستا کنیم؟

شاید شما هم این صحنه را دیده باشید که تیم محتوا با شوق فراوان مقاله‌ای…

9 ماه پیش

چگونه از افت رتبه سایت در گوگل جلوگیری کنیم؟

صبح زود از خواب بیدار می‌شوید، قهوه‌تان را برمی‌دارید و مثل همیشه سری به سرچ…

9 ماه پیش
برای نمایش نسخه اصلی این صفحه اینجا لمس کنید