Thiết kế module

Một phần của tài liệu LUẬN VĂN: XÂY DỰNG HỆ THỐNG DỊCH VỤ GIÁ TRỊ GIA TĂNG TRÊN NỀN DỊCH VỤ NHẮN TIN TỨC THÌ QUA HỆ THỐNG TIN NHẮN TỨC THÌ docx (Trang 54 - 60)

Như đã nói ở phần đầu chương hai, Phần WEB là một trong những phần khá quan

trọng, làm nên kết cấu của TCat do các phần IM, hoặc SMS đều có các dịch vụ liên kết với cơ sở dữ liệu thông qua WEB. Nói một cách khác thì phần WEB chính là cầu

nối giữa các dịch vụ với CSDL chính của TCat. Bởi vậy phần WEB không những

cung cấp một giao diện đồ họa cho các xử lý của người sử dụng mà còn có thêm các dịch vụ Web tương thích với các dịch vụ được viết bởi SMS hay IM.

Cấu trúc cơ bản của module như sau:

 Điểm vào duy nhất là file index.php và index2.php. File index.php đọc biến

action và sẽ load những dịch vụ có tên trùng với biến action nằm trong thư mục

modules. Có một vài dịch vụ đặc biệt như đăng ký nick, đăng nhập được

chuyển ra ngoài. File index2.php được sử dụng cho các dịch vụ liên kết. Các

dịch vụ liên kết truy cập vào file index2.php để tránh các đoạn HTML không

cần thiết.

 Thư mục moudules chứa toàn bộ các file dịch vụ sẽ được thực thi. File

index.php sẽ gọi các moudle tùy theo biến action đưa vào. Nếu truy cập trực

tiếp các moudule thì sẽ bị báo lỗi.

 Các thư viện được sử nằm trong thư mục lib và gồm có:

o DebugHelper là một thư viện mã nguồn mở dùng để kiểm tra các lỗi

của chương trình. Nếu có một lỗi nào đó (có thể là warning, notice..) thì DebugHelper sẽ hiển thị số dòng bị lỗi để tiện xử lý. Cơ chế hiện

thị lỗi của DebugHelper giống kiểu của Java, vì vậy giúp quét lỗi dễ dàng hơn, thuận tiện hơn. Nếu không có DebugHelper thì mỗi lần có

lỗi, php chỉ in ra dòng bị lỗi (mà không in ra quá trình sinh ra lỗi, điều này khiến việc debug trở nên khó khăn).

o MyDB.php là thư viện do chúng tôi tự viết nên, cung cấp các phương

thức truy nhập CSDL dễ dàng hơn. Chỉ cần tạo ra một đối tượng MyDB sau đó thực thi một số phương thức có sẵn. Điều này rất tiện

dụng và có hiệu quả cao hơn so với việc viết các hàm kết nối php với mysql thông thường.

~ 45 ~

$db = new MYDB($cfg['db.host'], $cfg['db.user'],

$cfg['db.passwd']);

$db->setdb($cfg['db.dbname']);

Để thực hiện một truy vấn dùng:

$db->query(“Select * from User”);

Để lấy kết quả trả về dùng các phương thức sau:

while ($row = $db->getNext()) {

//Các lệnh thực thi trên biến $row (adsbygoogle = window.adsbygoogle || []).push({});

}

o Function.php là thư viện do chúng tôi tự thiết kế nên cung cấp các

hàm giúp quá trình viết code được nhanh hơn. Các hàm được cung

cấp thuộc ba nhóm chính:

 Nhóm hàm cung cấp các chức năng xử lý các biến. ví dụ như

các hàm getVar(), postVar() … giúp lấy biến. Để đảm bảo tính

bảo mật thì không nên dùng trực tiếp luôn biến từ $_POST

hay $_GET mà các biến này phải qua xử lý để lấy ra đúng dữ

liệu cần.

 Nhóm hàm cung cấp các chức năng về HTML hoặc javascript.

Ví dụ như các hàm jsRedirect() dùng để chuyển trang bằng

javascript.

 Nhóm hàm cung cấp các chức năng thao tác trên CSDL: Có một số thao tác trên CSDL phải thực hiện nhiều lần, hoặc một

số thao tác muốn tổng quát hóa. Ví dụ như các hàm check_right() dùng để kiểm tra quyền truy nhập của người

dùng với dịch vụ hiện hành.

o User.php là một class do chúng tôi thiết kế nên. Class này cung cấp

các thao tác trên xử lý trên User. Ví dụ như lấy username, password

hay thậm chí có thể lấy các danh sách bạn bè. Class được viết ngắn

gọn, dễ sử dụng và tích hợp.

Vậy làm sao để một dịch vụ khác kết nối đến dịch vụ được cung cấp ở WEB này? Để làm được điều đó, chúng tôi cung cấp một số chuẩn viết code. Theo các chuẩn này thì

~ 46 ~

việc phát triển hai dịch vụ ở hai bên khác nhau (bên WEB và bên IM,SMS) có thể thực

hiện bởi hai lập trình viên. Chuẩn viết code như sau:

- Biến action có giá trị là tên dịch vụ hiện đang thực thi. Điều này như đã đề cập ở

trên. Trong file dịch vụ, lập trình viên phải tự bắt lấy biến này để biết tên dịch vụ là gì.

- Biến py có giá trị là mã của bên thực hiện nhiệm vụ ở phía IM hoặc SMS. Như thiết

kế CSDL ở chương trên thì chỉ có các con Bot có mã nằm trong bảng BOT mới được

phép yêu cầu dịch vụ. Điều này nhằm hạn chế khả năng mất mát thông tin hoặc rò rỉ

thông tin của khách hàng. Nếu không có số bảo mật này thì mọi người ai cũng có thể

gửi yêu cầu đến WEB. Nếu như vậy, WEB sẽ trả lại các thông tin nhạy cảm, đồng thời đánh dấu là đã được gửi rồi. Kẻ tấn công sẽ lấy được các thông tin đó còn người sử (adsbygoogle = window.adsbygoogle || []).push({});

dụng sẽ không được con Bot gửi tin nhắn (vì thông tin đã được gửi rồi, nhưng đã bị người khác bắt).

Ngoài một số chuẩn qui định sẵn thì các lập trình viên ở hai phía có thể thống nhất với

nhau cách một số chuẩn nhận dữ liệu khác nữa.

Các dịch vụ phía IM, SMS kết nối đến WEB đều phải thông qua file index2.php (một

trong hai đầu vào). Thông qua file index2.php chúng tôi đã lược bỏ đi tất cả các đoạn

HTML rườm rà không cần thiết, kết quả trả lại có kiểu plain-text (text thuần túy). Khi đó các dịch vụ phía IM, SMS không cần lược bỏ các thẻ HTML không cần thiết nữa,

~ 47 ~

Sơ đồ Hình 4. 2 Sơ đồ cấu trúc module WEB miêu tả cấu trúc của module WEB gồm các bước như sau:

Với người sử dụng, đầu tiên sẽ vào trang index.php. Trang này sẽ nạp các thư viện cần

thiết trong thư mục lib. Nếu người sử dụng đã có nick (tài khoản) rồi thì không cần đăng ký lại nữa mà qua quá trình xác thực sẽ đến phần sử dụng các dịch vụ luôn. Còn

trường hợp người sử dụng chưa có nick, họ sẽ phải đăng ký một nick, sau đó mới được

phép sử dụng dịch vụ. Phần xác thực khá quan trọng trong việc phát triển của TCat sau này. Nếu như có ý tưởng thương mại hóa TCat, phần xác thực phải được chỉnh

sửa sao cho phù hợp. Ví dụ như trong tài khoản của người đó còn bao nhiêu tiền thì

được sử dụng những dịch vụ nào …

Với các dịch vụ phía IM hoặc SMS, đầu tiên sẽ phải vào trang index2.php. Sau đó các

dịch vụ đó phải đưa ra mã số của mình. Phần xác thực sẽ tự động ghi lại thời gian xác

thực và kiểm tra tính đúng đắn của mã số đó. Việc lưu lại thời gian xác thực có ý nghĩa

khá quan trọng. Khi lưu lại thời gian xác thực, WEB sẽ biết được trong khoảng thời

gian t nào đó, có bao nhiêu dịch vụ IM, SMS đã được xác thực. Như vậy có thể kết

luận một cách gần đúng là có bao nhiêu dịch vụ IM, SMS đang online. Điều này có Index.php Index2.php Dịch vụ .. Dịch vụ .. Dịch vụ .. Dịch vụ .. Đăng ký Thư viện Xác thực Thư viện Thư viện

~ 48 ~

tính quyết định đến việc phân chia dữ liệu nếu như có nhiều module IM, SMS khác nhau cùng chạy.

Sau khi xác thực thành công thì index2.php sẽ nạp dịch vụ web mà IM, SMS yêu cầu. Sau đó trả về dữ liệu đã được nén lại.

Phương pháp nén dữ liệu theo kiểu text mà chúng tôi sử dụng là JSON.

JSON là viết tắt của từ JavaScript Object Notation, đó là là một kiểu định dạng dữ

liệu chuyển đổi nhẹ cho máy tính, có tính khả đọc vì là kiểu văn bản text-based, dùng

để biểu diễn các kiểu dữ liệu.

Định dạng JSON được mô tả chi tiết trong RFC 4627 [14] bởi Douglas Crockford. Thực

chất của JSON chính là việc chuyển đổi các định dạng dữ liệu (như một mảng, đối tượng …) về thành một chuỗi text và tất nhiên có thể khôi phục lại được.

JSON được xây dựng trên hai cấu trúc: (adsbygoogle = window.adsbygoogle || []).push({});

* Là tập hợp của các cặp tên và giá trị (name-value). Trong những ngôn ngữ khác

nhau, đây được coi như là một đối tượng (object), bản ghi (record), cấu trúc (struct), từ điển (dictionary), bảng băm (hash table), danh sách khoá (keyed list), hay mảng liên hợp.

* Là một tập hợp các giá trị đã được sắp xếp. Trong hầu hết các ngôn ngữ, JSON được coi như là một mảng, véc tơ, tập hợp hay là một dãy (sequence).

Đây là một cấu trúc dữ liệu phổ dụng. Hầu như tất cả các ngôn ngữ lập trình hiện đại đều hổ trợ trong một hình thức nào đó, tạo nên ý nghĩa của một định dạng hoán vị dữ

liệu với các ngôn ngữ lập trình cũng đã được cơ sở hoá trên cấu trúc này. JSON ban

đầu được viết ra để hỗ trợ Ajax trong JavaScript, tuy nhiên tính tiện dụng của JSON ngày càng được đón nhận. Cụ thể là vào năm 2005 Yahoo đã cung cấp các dịch vụ dưới chuẩn JSON[15], năm 2006 Google cũng tiếp bước Yahoo cung cấp các dịch vụ dưới chuẩn JSON (ngoài các dịch vụ theo chuẩn Feed XML)[16].

JSON cung cấp các API cho hầu hết các ngôn ngữ và đã nằm trong thư viện chuẩn của

Python từ phiên bản Python 2.6 (phiên bản Python 2.5 chưa hỗ trợ JSON nên chúng tôi phải dùng một thư viện ngoài là PyJSON), đồng thời cũng được PHP hỗ trợ từ phiên bản PHP5.x. Thông tin chính thức của JSON được cập nhập trên trang chủ

~ 49 ~

Lý do chúng tôi sử dụng JSON thay thế cho các chuẩn XML là bởi vì JSON rất đơn

giản. Khi muốn gửi một đối tượng nào đó, chỉ cần dùng hàm json_encode(). Hàm này trả về một chuỗi text là dữ liệu cần gửi đi. Khi muốn khôi phục lại đối tượng ban đầu,

chỉ cần sử dụng hàm json_decode(). Hàm sẽ trả lại đối tượng như ban đầu. Với hai

ngôn ngữ thông dịch cấp cao là PHP và Python thì sự liên kết này rất tuyệt vời. Nếu như sử dụng XML thì sẽ khó khăn khi phải parse đoạn XML để lấy dữ liệu, hơn nữa

dữ liệu gửi bằng JSON nhẹ hơn dữ liệu XML.

Để bảo đảm tính an toàn, chúng tôi thiết kế sao cho các module IM, SMS kết nối đến WEB đều thông qua giao thức HTTPS.

~ 50 ~

CHƯƠNG 5. GIAO DIỆN SMS

Một phần của tài liệu LUẬN VĂN: XÂY DỰNG HỆ THỐNG DỊCH VỤ GIÁ TRỊ GIA TĂNG TRÊN NỀN DỊCH VỤ NHẮN TIN TỨC THÌ QUA HỆ THỐNG TIN NHẮN TỨC THÌ docx (Trang 54 - 60)