Phục hồi và bền hóa động cơ không tháo rã : Công Nghệ Gốm Kim Loại XADO - Metal-Ceramic Xado

THIÊN AN Technology Thiết kế website Chuyên Nghiệp ! | Domain Hosting Chất lượng Cao!

Giới thiệu về XML-RPC

VB , C++ , JAVA , .... ,
Thuật toán ....

Điều hành viên: Luu Thanh Nghi, Nửa bốn mùa, Giọt nước

Giới thiệu về XML-RPC

Gửi bàigửi bởi kekho » 17 Tháng 3 2004, 23:32

Giới thiệu về XML-RPC

Được viết bởi Nguyễn Bá Thành @ Diễn Đàn Tin Học

Ghi chú: bài viết đồng thời được lưu trữ ở Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.

XML-RPC là gì?
XML-RPC là một cài đặt RPC (Remote Procedure Call) trên nền giao thức HTTP, sử dụng XML để mã hoá và trao đổi dữ liệu.

Bạn có thể tìm hiểu thêm chi tiết về XML-RPC ở các địa chỉ:
- Trang chủ XML-RPC: Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.
- XML-RPC cho người mới nhập môn: Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.

Vậy RPC là gì?
Khi bạn viết chương trình, ắt hẳn bạn cũng đã quen với các khái niệm thủ tục và hàm. Các đoạn chương trình lặp đi lặp lại bạn viết lại thành 1 hàm (hay thủ tục) và sau đó khi dùng chỉ cần gọi thủ tục hoặc hàm đó với các tham số thích hợp. Các thủ tục hoặc hàm đó bạn có thể:
- Để chung trong 1 file nguồn cùng với chương trình chính,
- Để trong 1 file nguồn khác và được include vào file nguồn chính khi cần,
- Được biên dịch sẵn và để trong 1 thư viện hoặc unit để các chương trình khác của bạn (cùng được viết bằng 1 ngôn ngữ) sử dụng,
- Được biên dịch sẵn để trong file DLL để các chương trình (được viết bằng các ngôn ngữ khác nhau) sử dụng.

Điểm chung của tất cả các phương thức trên là các hàm và thủ tục cần gọi đều nằm trên cùng 1 máy với nơi gọi chúng. Tuy nhiên bạn có thể thấy là nơi gọi và hàm cần gọi có thể được tách rời nhau ra: từ chung file, đến khác file, rồi đến khác ngôn ngữ.

RPC - Remote Procedure Call (lời gọi hàm xa) - là một mở rộng của lời gọi hàm (procedure call) theo cách cổ điển. Giờ đây hàm cần gọi và nơi gọi hàm có thể nằm ở 2 máy tính khác nhau; thậm chí có thể cách xa nhau nửa vòng trái đất, nối với nhau qua mạng internet.

Một địa chỉ khá hay để tham khảo cho người mới bắt đầu với XML-RPC là XML-RPC for newbies, các khái niệm về XML-RPC đựoc giải thích khá cặn kẽ và trình bày rất dễ hiểu cho người mới làm quen với XML-RPC.

XML-RPC là một cài đặt của RPC, vậy còn RPC "nào khác" nữa không?
Dĩ nhiên là còn chứ. RPC là nền tảng của lập trình phân tán (distributed programming). Các giao thức xây dựng trên RPC đã xuất hiện từ rất lâu và có thể đã trở nên quen thuộc với bạn mà bạn không để ý tới. Ví dụ:

CORBA: CORBA là một trong những giao thức được sử dụng khá phổ biến để phát triển các ứng dụng phân tán (distributed) hướng đối tượng (object-oriented). Bạn sẽ hay gặp CORBA trong các chương trình đa tầng với qui mô "xí nghiệp" (multi-tier enterprise application). Các địa chỉ tham khảo hữu ích về CORBA là trang chủ của OMG (Object Management Group) và OMG CORBA.

DCOM: Nếu bạn là tín đồ của Microsoft thì chắc hẳn là bạn không xa lạ gì với thuật ngữ này. DCOM là cú "đáp trả" của Micrsoft đối với CORBA. Bạn có thể ghé thăm trang chủ của DCOM để tìm hiểu thêm chi tiết.

SOAP: Rất có thể bạn đã nghe nhiều đến SOAP trong thời gian gần đây. SOAP cũng là một cài đặt RPC trên HTTP. Bạn có thể tìm hiểu thêm về SOAP ở trang chủ của SOAP.

Tại sao sử dụng XML-RPC?
XML-RPC khá đơn giản so với CORBA, DCOM và SOAP. Và hơn thế, XMl-RPC hoạt động khá tốt và cài đặt tương đối đơn giản với các ngôn ngữ lập trình web phổ biến như PHP, Perl, Python. Với lý do đó, XML-RPC là sự lựa chọn khá lý tưởng để phát triển các ứng dụng web qui mô nhỏ.

Và dĩ nhiên, XML-RPC vẫn có thể được cài đặt với các ngôn ngữ lập trình desktop như C/C++, Java, và thậm chí với Microsoft .NET


Một ví dụ ứng dụng XML-RPC
Sử dụng XMP-RPC (PHP) để lấy bài viết trên Tutorial Room
[CENTER]Các công cụ cần thiết[/CENTER]
Diễn đàn Tin học và Tutorial Room sử dụng chương trình quản lý trang web LtNuke. Từ version 1.1.1, LtNuke hỗ trợ XML-RPC để cho phép bạn lấy một phần các bài viết được đăng trên LtNuke về máy của bạn.

Đầu tiên bạn cần có PHP (version 4.0 hoặc mới hơn) và bộ thư viện XML-RPC cho PHP (file xmlrpc.inc). Ngoài ra bạn cần phải có bộ client API của LtNuke. File xmlrpc.inc và file php chứa client API của LtNuke bạn có thể download ở đây.

Các hàm API được hỗ trợ
Các hàm client API được hỗ trợ trong LtNuke version 1.1.1 như sau:

getServerStatus
Hàm trả về một số thông tin của server (site đang chạy LtNuke), kết quả trả về là một mảng băm - associative array (ví dụ là $result) chứa các thông tin sau:
- $result['site']: chứa tên của site (ví dụ: Diễn đàn Tin học).
- $result['title']: chứa tiêu đề của site (ví dụ: Diễn đàn Tin học - Tutorial Room - Lập trình C/C++).
- $result['description']: chứa mô tả/giới thiệu về site (ví dụ: Đây là trang Tutorial Room của Diễn đàn Tin học).
- $result['charset']: cho biết charset được sử dụng ở site (ví dụ: utf-8).
- $result['dateformat']: cho biết định dạng ngày tháng được sử dụng ở site (ví dụ: d-m-Y).
- $result['num_categories']: cho biết số lượng các phân mục hiện có trên site (ví dụ: 7).
- $result['num_articles']: cho biết số lượng các bài viết hiện có trên site (ví dụ: 41).
- $result['url']: địa chỉ tới site (ví dụ: Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.).

getCategoryList
Hàm trả về danh sách các phân mục hiện có trên server, kết quả là một mảng băm - associative array, với khoá là ID của phân mục (ví dụ là $result['xmlrpc']), chứa các thông tin sau:
- $result['xmlrpc']['id']: chứa ID của phân mục (ví dụ: xmlrpc).
- $result['xmlrpc']['title']: chứa tiêu đề của phân mục (ví dụ: XML-RPC Tutorial).
- $result['xmlrpc']['parent']: chứa ID của phân mục cha (ví dụ: tute, và $result['tute'] sẽ chứa các thông tin về phân mục có ID là tute).
- $result['xmlrpc']['description']: mô tả của phân mục (ví dụ: Phân mục này lưu trữ các bài hướng dẫn về XML-RPC).
- $result['xmlrpc']['position']: chỉ số của phân mục (ví dụ: 2). Hai phân mục có cùng cha thì phân mục nào có chỉ số lớn hơn sẽ được sắp xếp trước.
- $result['xmlrpc']['url']: địa chỉ tới phân mục (ví dụ: Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.).
- $result['xmlrpc']['articles']: danh sách ID các bài viết trong phân mục (ví dụ: $result['xmlrpc']['articles'][0]='123abc', $result['xmlrpc']['articles'][1]='d4fea6'...).

getLatestArticles
Hàm trả về danh sách các bài viết mới nhất trên server, kết quả là một mảng băm - associative array, với khoá là ID của bài viết (ví dụ là $result['1ab23c']), chứa các thông tin sau:
- $result['1ab23c']['id']: chứa ID của bài viết (ví dụ: 1ab23c).
- $result['1ab23c']['cat']: chứa ID của phân mục chứa bài viết (ví dụ: xmlrpc).
- $result['1ab23c']['title']: tiêu đề của bài viết (ví dụ: Giới thiệu về XML-RPC).
- $result['1ab23c']['susmmary']: tóm tắt của bài viết (ví dụ: Bài viết này giới thiệu tổng quan về XML-RPC).
- $result['1ab23c']['url']: địa chỉ tới bài viết (ví dụ: Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.).

loadArticle(articleID)
Hàm nhận tham số là ID của bài viết và trả về thông tin của bài viết, kết quả là một mảng băm - associative array (ví dụ là $result), chứa các thông tin sau:
- $result['id']: chứa ID của bài viết (ví dụ: 1ab23c).
- $result['title']: tiêu đề của bài viết (ví dụ: Giới thiệu về XML-RPC).
- $result['summary']: tóm tắt của bài viết (ví dụ: Bài viết này giới thiệu tổng quan về XML-RPC).
- $result['url']: địa chỉ tới bài viết (ví dụ: Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.).
- $result['cat']: chứa ID của phân mục chứa bài viết (ví dụ: xmlrpc).
Hàm trả về NULL nếu như bài viết không tồn tại.

loadCategory(categoryID)
Hàm nhận tham số là ID của phân mục và trả về thông tin của phân mục, kết quả là một mảng băm - associative array (ví sụ là $result), chứa các thông tin sau:
- $result['id']: chứa ID của phân mục (ví dụ: xmlrpc).
- $result['parent']: chứa ID của phân mục cha (ví dụ: tute).
- $result['title']: chứa tiêu đề của phân mục (ví dụ: XML-RPC Tutorial).
- $result['description']: mô tả của phân mục (ví dụ: Phân mục này lưu trữ các bài hướng dẫn về XML-RPC).
- $result['url']: địa chỉ tới phân mục (ví dụ: Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.).
- $result['articles']: danh sách các bài viết trong phân mục, mỗi phần tử trong danh sách là 1 mảng băm, chứa các thông tin sau:
+ $result['articles'][i]['id']: ID của bài viết (ví dụ: 1ab23c).
+ $result['articles'][i]['title']: tiêu đề của bài viết (ví dụ: Giới thiệu về XML-RPC).
+ $result['articles'][i]['summary']: tóm tắt của bài viết (ví dụ: Bài viết này giới thiệu tổng quan về XML-RPC).
+ $result['articles'][i]['cat']: chứa ID của phân mục chứa bài viết (ví dụ: xmlrpc).
+ $result['articles'][i]['url']: địa chỉ tới bài viết (ví dụ: Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.).

getLastError
Hàm trả về thông báo lỗi cuối cùng nhận được từ server. Hàm trả về một chuỗi (string) rỗng nếu như không có lỗi, ngược lại sẽ là câu thông báo lỗi mới nhất trả về từ server sau khi gọi một trong các hàm ở trên. Nếu một trong các hàm ở trên trả về kết quả là một mảng rỗng hoặc NULL, phần lớn là đã có lỗi xảy ra, bạn hãy gọi hàm getLastError để kiểm tra lại.

[CENTER]Một ví dụ nhỏ[/CENTER]
Đầu tiên bạn hãy download 2 file xmlrpc.inc và client.php (client API của LtNuke) và copy chúng vào chung 1 thư mục.

Sau đó bạn hãy gõ và chạy thử đoạn chương trình PHP sau:

File testLtNukeXMLRPC1.php (view demo, download source)
<?php
include('client.php');

//tao 1 client object ket noi den server diendantinhoc.net
$clientLtNuke
= new xmlrpc_LtNukeClient('www.diendantinhoc.net', '/XMLRPC/server.php', 80);

//lay thong tin ve server
$result = $clientLtNuke->getServerStatus();

if ( $clientLtNuke->getLastError() != '' ) {
//co loi
echo "Co loi xay ra: ".$clientLtNuke->getLastError();
} else {
//khong co loi, in ra ket qua

//chinh lai charset
header('Content-type: text/html; charset='.$result['charset']);

echo "<pre>n";
print_r($result);
echo "</pre>n";
} //end if
?>

Khi chạy bạn sẽ thấy chương trình xuất ra kết quả đại loại như sau:
Array
(
[site] => Diễn Đàn Tin Học
[title] => Diễn Đàn Tin Học
[description] => Dien dan trao doi thao luan ve tin hoc & CNTT. Cac chuyen de gom co: lap trinh, thuat toan, cau truc du lieu, phan men, he thong, internet, mang, va nhieu chuyen de khac.
[charset] => utf-8
[dateformat] => d-m-Y
[url]=> [url]http://www.diendantinhoc.net/XMLRPC/../[/url]
[num_categories] => 12
[num_articles] => 8
)

Thật thú vị phải không nào? Các bước thực hiện thật đơn giản như là 1 2 3:

1. Đầu tiện bạn hãy khởi tạo 1 đối tượng để sử dụng LtNuke client API. Công việc khởi tạo được thực hiện qua câu lệnh:
$clientLtNuke
= new xmlrpc_LtNukeClient('www.diendantinhoc.net', '/XMLRPC/server.php', 80);

Câu lệnh khởi tạo cần 3 tham số, đầu tiên là địa chỉ của server (trong trường hợp này là Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem.), tiếp theo là đường dẫn tới đoạn script chứa các server API (ở đây là /XMLRPC/server.php, bạn có thể phải liên hệ với admin của site cần kết nối để biết chính xác được dẫn tới script chứa server API), và cuối cùng là port cần kết nối (ở đây là 80). Port cần kết nối mặc định sẽ là 80 cho HTTP, bạn có thể không cần cung cấp tham số này cũng được. Trong nhiều trường hợp bạn chỉ cần 2 tham số đầu tiên:
$clientLtNuke = new xmlrpc_LtNukeClient('www.diendantinhoc.net', '/XMLRPC/server.php');

2. Tiếp theo, bạn gọi hàm cần thiết và nhận lấy kết quả trả về. Câu lệnh thực hiện điều này là:
$result = $clientLtNuke->getServerStatus();

Trong ví dụ, hàm getServerStatus được gọi và kết quả trả về trong biến $result.

3. Và cuối cùng, sử dụng cái kết quả trả về đó như thế nào là tuỳ bạn. Trong ví dụ trên, kết quả trả về đơn giản chỉ được in ngược ra màn hình dể bạn thấy được kết quả.

Bạn hãy thử đoạn chương trình demo trên với các server khác nhau (chạy LtNuke version 1.1.1) và xem các kết quả trả về (ví dụ với server Bạn không được xem đường dẩn này, xin vui lòng đăng ký hoặc đăng nhập để xem., đường dẫn là /XMPRPC/server.php và /ltnuke/XMLRPC/server.php)
:mad:
---------------------------------------------------
Nếu bạn không cố gắng bạn sẻ bị ... đào thải, nếu bạn đã cố gắng thì cuối tuần nên đi ...nhậu

Những gì bạn biết chỉ là giọt nước của đại dương mênh mong
Hình ảnh
kekho
 
Bài viết: 291
Ngày tham gia: 05 Tháng 6 2003, 12:00
Đến từ: xigon

Quay về LẬP TRÌNH Ứng Dụng

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách.