- یکشنبه 3 آبان 1405 ساعت 05:00
- 3.1.9
- کامل شده
- منقضی شده
XML-RPC یک پروتکل فراخوانی متد از راه دور است که درخواست و پاسخ را با XML منتقل میکند. CodeIgniter 3 دو کلاس برای این کار دارد: XML-RPC Client برای فراخوانی سرویس دیگر و XML-RPC Server برای دریافت درخواست و اجرای متدهای مجاز. این قابلیت بیشتر در یکپارچهسازی با سامانههای قدیمی کاربرد دارد.
XML-RPC Client
ابتدا کتابخانه را بارگذاری کنید، نشانی سرور را تعیین کنید، نام متد مقصد و پارامترها را بسازید و سپس درخواست را ارسال کنید. send_request() نتیجه ارسال را مشخص میکند و display_response() یا display_error() برای مشاهده نتیجه یا خطا به کار میروند.
$this->load->library('xmlrpc');
$this->xmlrpc->server('https://api.example.org/xmlrpc', 443);
$this->xmlrpc->method('catalog.getProduct');
$this->xmlrpc->request(array('SKU-100'));
if ($this->xmlrpc->send_request()) {
$response = $this->xmlrpc->display_response();
} else {
log_message('error', $this->xmlrpc->display_error());
}XML-RPC Server
در سمت سرور باید متدهای قابل فراخوانی را با add_to_map() ثبت کنید. برای هر متد، نوع پارامترها و خروجی را مشخص کنید و در نهایت serve() درخواست ورودی را پردازش میکند. متدهای حساس نباید بدون احراز هویت و مجوزدهی در دسترس قرار گیرند.
$this->load->library('xmlrpc');
$this->load->library('xmlrpcs');
$config['functions']['catalog.getProduct'] = array('function' => 'Catalog_service.get_product');
$this->xmlrpcs->initialize($config);
$this->xmlrpcs->serve();نکته مهم
XML-RPC بهتنهایی امنیت یا احراز هویت کامل فراهم نمیکند. دادههای ورودی را اعتبارسنجی کنید و برای پروژه جدید، نیاز واقعی به این پروتکل را با REST API مقایسه کنید.
مطالعه مرتبط
برای ادامه مطالعه، API، REST API را ببینید.
متدهای XML-RPC
| متد یا مفهوم | کاربرد |
|---|---|
server() | تنظیم URL و Port سرور مقصد. |
method() | نام متد Remote. |
request() | تعریف پارامترهای درخواست. |
send_request() | ارسال درخواست. |
display_response() و display_error() | خواندن پاسخ یا خطا. |
add_to_map() | ثبت متد مجاز در XML-RPC Server. |
serve() | پردازش درخواست ورودی. |
نحوه استفاده و عیبیابی
در یک Controller ابتدا Library را با Loader بارگذاری کنید، سپس تنظیمات محیطی را به آن بدهید و عملیات را اجرا کنید. نتیجه را از مسیر مشخص دریافت کنید و در صورت شکست، پیام خطا را در Log ثبت کنید. اگر Library به Driver خارجی وابسته است، وجود افزونه PHP یا برنامه موردنیاز را روی سرور بررسی کنید.
در محیط توسعه، مسیر موفق و مسیر خطا را جداگانه آزمایش کنید. ورودی خالی، مقدار نامعتبر، فایل بزرگ، Timeout سرویس خارجی و نبود مجوز نوشتن از سناریوهایی هستند که باید بررسی شوند. منابعی مانند اتصال شبکه و فایلهای موقت را پس از پایان عملیات آزاد کنید.
در بازبینی کد، ترتیب و نتیجه متدهای server()، method()، request()، send_request() را بررسی کنید. نام متد بهتنهایی تضمین نمیکند ورودی معتبر یا خروجی امن باشد، بنابراین رفتار هر متد را با تست و مستندات همان نسخه کنترل کنید.