- آموزش زمان بندی رویدادها با WP Cron در وردپرس
- مقدمه ای بر توسعه افزونه
- افزونه چیست ؟
- مبانی افزونه
- نیازمندی های هدر
- درج یک مجوز نرم افزار در افزونه
- قلاب های فعال و غیر فعال سازی
- متدهای حذف در سایت های وردپرس
- امنیت افزونه
- بررسی قابلیت های کاربر
- اعتبار سنجی داده ها
- امنیت ورودی
- امنیت خروجی
- Nonce ها
- قلاب ها
- اکشن ها (Actions)
- فیلترها (Filters)
- ایجاد قلاب های سفارشی
- تاپیک های پیشرفته
- منوهای مدیریت
- منوهای سطح بالا
- زیر منوها
- کدهای کوتاه
- مبانی کدهای کوتاه
- کدهای کوتاه جفتی
- کدهای کوتاه پارامتردار
- تنظیمات
- API های تنظیمات
- ایجاد و استفاده از گزینه ها
- گزینه های تکی و آرایه ای
- صفحه تنظیمات سفارشی
- فراداده (Metadata)
- ایجاد و مدیریت فراداده نوشته
- ایجاد متاباکس های سفارشی
- دریافت فراداده
- انواع نوشته سفارشی
- ایجاد پست تایپ سفارشی
- کار با داده های پست تایپ ها
- طبقه بندی یا Taxonomy در وردپرس
- ایجاد و کار با طبقه بندی های سفارشی
- کار با متادیتا (Metadata) کاربران در وردپرس
- ایجاد و مدیریت کاربران در وردپرس
- نقش ها و قابلیت های کاربران در وردپرس
- آموزش استفاده از سرویس HTTP API در وردپرس
- آموزش استفاده از ایجکس (Ajax) در وردپرس
- آموزش استفاده از Transients برای کش کردن در وردپرس
- آموزش WP-Cron وردپرس
- آموزش استفاده از جیکوئری (jQuery) در وردپرس
- آموزش کار با PHP سمت سرور و Enqueue در وردپرس
- قلاب کردن WP-Cron وردپرس به سیستم زمان بندی سرور
مقدمه
HTTP مخفف شده عبارت Hypertext Transfer Protocol به معنای پروتکل انتقال ابرمتن است که البته پروتکل اصلی ارتباط در اینترنت نیز محسوب می شود. ساده ترین ارتباط HTTP بدین شکل انجام می گیرد:
- کاربر با استفاده از مرورگر، یک درخواست مبنی بردریافت فایل abc.html را به سرور xyz ارسال می کند.
- در صورت وجود فایل درخواست شده، این فایل به کاربر ارسال خواهد شد.
در PHP برای ارسال درخواست های HTTP روش های زیادی وجود دارد که HTTP API وردپرس از بیشتر آنها پشتیبانی می کند و می توانید در برنامه نویسی های خود از آن استفاده کنید.
برای مثال با استفاده از HTTP API وردپرس می توانید برای اتصال به سایر API ها مانند Twitter API یا Google Maps API استفاده کنید.
انواع متدهای HTTP
HTTP متدهای مختلفی دارد که هریک خصوصیات خاصی را دارند. وردپرس از سه متد اصلی HTTP استفاده می کند و اگر به هنگام ارسال و یا دریافت داده، نوع متد مشخص شده باشد، سرور می تواند تشخیص دهد که چه عملی را باید بر روی آن داده و درخواست را انجام دهد.
این سه متد به شرح زیر می باشد:
GET
از متد GET برای دریافت داده استفاده می شود. هر زمان که شما یک سایت را مشاهده می کنید، برای نمایش آن سایت درخواست GET ارسال شده است. در واقع زمانی که شما آدرس صفحه ای از وب سایت را در مروگر خود وارد می کنید، یک درخواست GET به سرور ارسال شده و نتیجه آن پس از پردازش و دریافت اطلاعات در صفحه مرورگر برای شما نمایش داده می شود.
POST
از متد POST برای ارسال داده ها به سمت سرور برای اجرای عملی خاص استفاده می شود. برای مثال، اطلاعاتی که در فرم ها وارد می کنید، توسط این متد ارسال می شوند. به عبارتی ساده تر اطلاعات وارد شده در فیلدها توسط این متد دریافت شده و به سمت سرور وب سایت ارسال می شوند.
HEAD
این متد در مقایسه با دو متد قبلی کمتر شناخته شده است. این متد عملکردی مشابه با GET دارد، اما در آن داده دریافت نمی شود، بلکه اطلاعاتی در خصوص داده ها بازگردانده می شود.
این اطلاعات در خصوص آخرین بروزرسانی ها، نحوه کش داده ها توسط کاربر، نوع داده ها و غیره شرح می دهد.
برای مثال مرورگرهای مدرن درخواست های HEAD را ارسال می کنند تا از بروزرسانی ها مطلع شده و تنها آنها را دریافت کنند.
در صورتی که مرورگر چنین قابلیتی نداشته باشد، شما همیشه یک نسخه کامل از سایت ها را دریافت خواهید کرد که باعث مصرف پهنای باند اینترنت تان خواهد شد.
یک API سرویس خوب قبل از اینکه درخواست GET را ارسال کند، از متد HEAD استفاده می کند تا از تغییرات آگاه شده و تنها داده های بروزرسانی شده را دریافت کند. این کار در درخواست های زیاد و با حجم داده بزرگ می تواند در افزایش سرعت سرویس بسیار موثر باشد.
متدهای سفارشی
علاوه بر متدهای اشاره شده، HTTP دارای متدهای دیگری مانند PUT, DELETE, TRACE و CONNECT است. البته در این مقاله در خصوص آنها توضیحاتی ارائه نخواهد شد، اما بهتر است که بدانید با استفاده از آنها نیز می توان برای پیاده سازی سرویس های API استفاده کرد.
کدهای پاسخگو وضعیت
HTTP از هر دو نوع کدهای پاسخگو عددی و کاراکتری استفاده می کند.
قبل از اینکه به سراغ شرح تفصیلی هرکدام یک از آنها بپردازیم، لازم به ذکر است که شما می توانید از کدهای سفارشی برای API خود استفاده کنید که به طور معمول در محدوده ۱xx به کار گرفته می شوند.
کدهای کلاس
کد وضعیت | توضیح |
۲xx | درخواست با موفقیت پاسخ داده شد |
۳xx | درخواست به URL دیگر منتقل شد |
۴xx | درخواست ناموفق به دلیل مشکلات سمت کاربر |
۵xx | درخواست ناموفق به دلیل مشکلات سمت سرور |
کدهای رایج
کد وضعیت | توضیح |
۲۰۰ | درخواست با موفقیت پاسخ داده شد |
۳۰۱ | منبع به طور دائم منتقل شده است |
۳۰۲ | منبع به طور موقت منتقل شده است |
۴۰۳ | ناموفق – عدم اهراز هویت |
۴۰۴ | ناموفق – منبع پیدا نشد |
۵۰۰ | مشکل داخلی در سرور |
۵۰۳ | سرویس در دسترس نیست |
دریافت داده ها از API
GitHub می تواند یک سرویس API فوق العاده برای تمرین باشد؛ چراکه برای اکثر کارهای عمومی نیازی به ثبت برنامه نیست. بنابراین در مثال های این مقاله از این سرویس API استفاده خواهیم کرد.
استفاده از تابع wp_remote_get() برای دریافت داده ها در وردپرس به طور باورنکردی ساده است.
این تابع شامل دو آرگومان می شود:
- $url – آدرس منبع برای دریافت داده ها که باید ساختار استاندارد HTTP رعایت شود.
- $args – این مورد اختیاری بوده و با استفاده از می توانید اطلاعاتی را مانند کوکی ها را ارسال کنید.
خب بهتر است که اولین کدمان را بنویسیم! برای شروع اطلاعات یک کاربر را از سایت GitHub دریافت می کنیم.
$response = wp_remote_get( 'httpss://api.github.com/users/blobaugh' );
$response شامل تمامی هدرها، محتوا و سایر داده های درخواست شده است.
Array ( [fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][headers] => Array ( [server] => nginx [date] => Fri, 05 Oct 2012 04:43:50 GMT [content-type] => application/json; charset=utf-8 [connection] => close [status] => 200 OK [vary] => Accept [x-ratelimit-remaining] => 4988 [content-length] => 594 [last-modified] => Fri, 05 Oct 2012 04:39:58 GMT [etag] => "5d5e6f7a09462d6a2b473fb616a26d2a" [x-github-media-type] => github.beta [cache-control] => public, s-maxage=60, max-age=60 [x-content-type-options] => nosniff [x-ratelimit-limit] => 5000 ) [body] => {"type":"User","login":"blobaugh","gravatar_id":"f25f324a47a1efdf7a745e0b2e3c878f","public_gists":1,"followers":22,"created_at":"2011-05-23T21:38:50Z","public_repos":31,"email":"ben@lobaugh.net","hireable":true,"blog":"https://ben.lobaugh.net","bio":null,"following":30,"name":"Ben Lobaugh","company":null,"avatar_url":"httpss://secure.gravatar.com/avatar/f25f324a47a1efdf7a745e0b2e3c878f?d=httpss://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png","id":806179,"html_url":"httpss://github.com/blobaugh","location":null,"url":"httpss://api.github.com/users/blobaugh"} [response] => Array ( [preserved_text 5237511b45884ac6db1ff9d7e407f225 /] => 200 [message] => OK ) [cookies] => Array ( ) [filename] => )
دریافت بدنه درخواست شده
در صورتی که بخواهید تنها محتویات بدنه بازگردانده شود، می توان از تابع wp_remote_retrieve_body() استفاده کرد. این تابع یک پارامتر دریافت می کند و آن هم مقدار تابع wp_remote_X است. برای درک بهتر موضوع به کدهای زیر نگاه کنید:
$response = wp_remote_get( 'httpss://api.github.com/users/blobaugh' ); $body = wp_remote_retrieve_body( $response );
سطر اول همان کدی است که بالاتر استفاده کرده بودیم، این بار اما در ادامه همان کد را به عنوان پارامتر به تابع wp_remote_retrieve_body اضافه کردیم که نتیجه آن به شکل زیر است:
{"type":"User","login":"blobaugh","public_repos":31,"gravatar_id":"f25f324a47a1efdf7a745e0b2e3c878f","followers":22,"avatar_url":"httpss://secure.gravatar.com/avatar/f25f324a47a1efdf7a745e0b2e3c878f?d=httpss://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png","public_gists":1,"created_at":"2011-05-23T21:38:50Z","email":"ben@lobaugh.net","following":30,"name":"Ben Lobaugh","company":null,"hireable":true,"id":806179,"html_url":"httpss://github.com/blobaugh","blog":"https://ben.lobaugh.net","location":null,"bio":null,"url":"httpss://api.github.com/users/blobaugh"}
دریافت کد وضعیت
اگر می خواهید قبل از شروع هر کار و عملیاتی از وضعیت ارتباط مطمئن شوید، کافیست از تابع wp_remote_retrieve_response_code() به شکل زیر استفاده کنید:
$response = wp_remote_get( 'httpss://api.github.com/users/blobaugh' ); $https_code = wp_remote_retrieve_response_code( $response );
در صورتی که ارتباط با موفقیت همراه باشد $https_code مقدار ۲۰۰ را بازخواهد گرداند.
دریافت هدر خاص
اگر بخواهید که هدر خاصی مانند آخرین تغییر اعمال شده را دریافت کنید، می توانید از تابع wp_remote_retrieve_header() استفاده کنید. این تابع دو پارامتر را قبول می کند:
- $response – پاسخ دریافتی از درخواست ارسال شده
- $header – نام هدر مورد نظر
برای دریافت هدر آخرین تغییر:
$response = wp_remote_get( 'httpss://api.github.com/users/blobaugh' ); $last_modified = wp_remote_retrieve_header( $response, 'last-modified' );
دریافت اطلاعات با احراز هویت
برای دریافت اطلاعات خاص لازم است که احراز هویت صورت گیرد. به همین منظور می توانید از “Authorization” به عنوان یکی از آرگومان ها استفاده کنید و در آن اطلاعات ورود خود را قرار دهید. هر چند این روش امنیت بالایی ندارد، اما برای تمرین و شروع کار می توانید از آن استفاده کنید. به کدهای زیر توجه کنید:
$args = array( 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( YOUR_USERNAME . ':' . YOUR_PASSWORD ) ) ); wp_remote_get( $url, $args );
ارسال داده به API
برای ارسال داده در وردپرس از تابع wp_remote_post() استفاده می شود. پارامترهای این تابع نیز همانند تابع wp_remote_get() هستند.
البته لازم به ذکر است که تمام داده های پارامتر دوم باید داخل آرایه قرار بگیرند.
برای درک بهتر موضوع یک مثال را با هم مرور می کنیم.
برفرض مثال می خواهیم اطلاعات یک فرم را به سرویس API ارسال کنیم. اولین کار مشخص کردن داده ها است:
$body = array( 'name' => 'Jane Smith', 'email' => 'some@email.com', 'subject' => 'Checkout this API stuff', 'comment' => 'I just read a great tutorial by this Ben Lobaugh. It taught me amazing things about interacting with APIs in WordPress! You gotta check it out!' );
اکنون باید پارامترهای دوم تابع wp_remote_post() را ایجاد کنیم. توجه داشته باشید که اطلاعات فوق نیز در همین کدهای زیر به عنوان بدنه استفاده شده است:
$args = array( 'body' => $body, 'timeout' => '5', 'redirection' => '5', 'httpsversion' => '1.0', 'blocking' => true, 'headers' => array(), 'cookies' => array() );
اکنون می توانیم تابع اصلی را صدا بزنیم:
$response = wp_remote_post( 'https://your-contact-form.com', $args );
مدیریت استفاده از پهنای باند
بررسی وضعیت منابع با استفاده از متد HEAD مهم و البته گاهی اوقات در برخی از API ها ضروری می باشد.
در سرویس هایی که تعداد درخواست های API زیاد است، برای تعداد درخواست های ارسالی در دقیقه و ساعت محدودیت هایی اعمال می شود.
البته برای دریافت اطلاعات نیازی به استفاده از این متد نیست، اما با استفاده از آن می توان فهمید که داده ها برای چه مدتی کش شده اند و کدام یک از آنها تغییر کرده اند تا تنها داده های مربوط به آنها را دریافت کرد و از دریافت اطلاعات تکراری جلوگیری کرد.
برای مثال به همان نتیجه برگشتی از سایت GitHub نگاهی کنید:
Array ( [headers] => Array ( [server] => nginx [date] => Fri, 05 Oct 2012 05:21:26 GMT [content-type] => application/json; charset=utf-8 [connection] => close [status] => 200 OK [vary] => Accept [x-ratelimit-remaining] => 4982 [content-length] => 594 [last-modified] => Fri, 05 Oct 2012 04:39:58 GMT [etag] => "5d5e6f7a09462d6a2b473fb616a26d2a" [x-github-media-type] => github.beta [cache-control] => public, s-maxage=60, max-age=60 [x-content-type-options] => nosniff [x-ratelimit-limit] => 5000 ) [body] => [response] => Array ( [preserved_text 39a8515bd2dce2aa06ee8a2a6656b1de /] => 200 [message] => OK ) [cookies] => Array ( ) [filename] => )
اطلاعات مربوط به HEAD در هدر بازگردانده می شود که شامل موارد زیر می شود:
- x-ratelimit-limit – تعداد درخواست های قابل قبول برای یک بازه زمانی
- x-ratelimit-remaining – تعداد درخواست های باقیمانده برای بازه زمانی
- content-length – حجم محتوا براساس بایت
- last-modified – آخرین تغییر اعمال شده در داده. مناسب برای ابزارهای کش
- cache-control – نحوه رفتار کاربر با داده کش شده
در پایان امیدواریم شما را به صورت مختصر با HTTP API های وردپرس آشنا کرده باشیم .[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]
ٍلام دوست عزیز و خسته نباشید.
برای من دریافت api به شدت نیاز است ولی نمیدونم این کدهارو برای نمایش در صفحه اصلی کجا وارد کنم لطفا راهنمایی کنید
این مورد به قالب شما و انتظاری که از API دارید وابسته میشه و امکان راهنمایی وجود نداره ، چون باید کامل بررسی بشه