Bối cảnh và mục tiêu đề tài

Báo cáo đồ án môn học "Phát triển phần mềm hướng dịch vụ" với đề tài "Ứng dụng quản lí chi tiêu cá nhân" (Money Pro) được thực hiện bởi Nhóm 34 gồm các sinh viên Nguyễn Văn Chung, Nguyễn Đăng Hậu, Nguyễn Thành Phong, và Lương Đình Khang dưới sự hướng dẫn của ThS. Huỳnh Trung Trụ tại Khoa Công nghệ Thông tin 2, Học viện Công nghệ Bưu chính Viễn thông Cơ sở tại TP. Hồ Chí Minh (thời gian hoàn thành: tháng 06/2022).

Trong bối cảnh người dùng có nhu cầu theo dõi thu chi, lập kế hoạch ngân sách và quản lý các tài khoản ngân hàng một cách có hệ thống, đề tài tập trung giải quyết bài toán xây dựng một giải pháp phần mềm quản trị tài chính cá nhân đa nền tảng. Hệ thống được thiết kế theo kiến trúc hướng dịch vụ (Service-Oriented Architecture), cho phép tách biệt tầng xử lý dữ liệu trung tâm với các ứng dụng giao diện đầu cuối.

Mục tiêu và nhiệm vụ cụ thể của đề tài bao gồm:

  1. Xây dựng và đặc tả hệ thống cơ sở dữ liệu quan hệ hoàn chỉnh phục vụ lưu trữ thông tin tài chính cá nhân, bao gồm giao dịch thu chi, tài khoản, ngân sách, mục tiêu và người dùng.
  2. Thiết kế và hiện thực hóa hệ thống RESTful API đóng vai trò dịch vụ trung tâm, cung cấp dữ liệu định dạng chuẩn JSON cho các nền tảng client khác nhau.
  3. Xây dựng các ứng dụng giao diện người dùng (Client Applications) bao gồm giao diện Web và ứng dụng di động Android (có định hướng mở rộng iOS), khai thác toàn diện các endpoint từ hệ thống API trung tâm.
  4. Tích hợp các cơ chế xác thực bảo mật hiện đại như JSON Web Token (JWT) và đăng nhập thông qua bên thứ ba (Google OAuth, Facebook Login).

Đối tượng nghiên cứu của đồ án là quy trình quản lý giao dịch tài chính cá nhân và các mô hình kiến trúc phần mềm phân tán (REST API, MVC, MVVM). Phạm vi triển khai của hệ thống bao gồm môi trường máy chủ LAMP (Linux, Apache, MySQL, PHP), ứng dụng Web điều khiển tương tác trên trình duyệt máy tính, và ứng dụng di động Android.


Cơ sở lý thuyết và công nghệ nền tảng

Đề tài áp dụng các lý thuyết kiến trúc phần mềm chuẩn và ngăn xếp công nghệ máy chủ web mã nguồn mở:

1. Kiến trúc dịch vụ REST API

REST (Representational State Transfer) được nhóm tác giả lựa chọn làm giải pháp kiến trúc thay thế cho các giao thức dịch vụ web truyền thống như SOAP hay WSDL. Hệ thống REST API sử dụng các phương thức HTTP chuẩn (GET, POST, PUT, DELETE) để thao tác với tài nguyên thông qua các URL xác định. Dữ liệu trao đổi giữa máy chủ và các ứng dụng khách được chuẩn hóa hoàn toàn dưới định dạng JSON (JavaScript Object Notation).

2. Mô hình MVC trong xử lý máy chủ (Backend PHP)

Tầng máy chủ backend được xây dựng bằng ngôn ngữ PHP theo mô hình Model - View - Controller (MVC):

  • Model: Đảm nhiệm vai trò quản lý dữ liệu, giao tiếp trực tiếp với hệ quản trị cơ sở dữ liệu MySQL để thực hiện các thao tác lưu trữ, truy vấn và cập nhật dữ liệu.
  • View: Đại diện cho tầng giao diện người dùng, chịu trách nhiệm biểu diễn dữ liệu phản hồi từ hệ thống.
  • Controller: Đóng vai trò điều phối luồng hoạt động, tiếp nhận các yêu cầu (HTTP Request) từ phía máy khách, xử lý nghiệp vụ thông qua Model và trả kết quả phản hồi (HTTP Response) về phía client.

3. Mô hình MVVM trong phát triển ứng dụng di động (Android / iOS)

Phía ứng dụng di động áp dụng kiến trúc Model - View - ViewModel (MVVM):

  • View: Giao diện hiển thị dữ liệu và tiếp nhận tương tác người dùng, có khả năng phản hồi trực tiếp thông qua cơ chế data binding và command.
  • Model: Đại diện cho các đối tượng dữ liệu và logic truy xuất dữ liệu nghiệp vụ.
  • ViewModel: Đóng vai trò lớp trung gian độc lập với View, chứa mã lệnh phục vụ liên kết dữ liệu (data binding) theo mẫu thiết kế Observer (Observer pattern). Mô hình này hỗ trợ lập trình phản ứng (Reactive Programming) và luồng sự kiện (Event/Data Stream).

4. Ngăn xếp máy chủ Webserver (LAMP Stack)

Hệ thống máy chủ dịch vụ của đồ án được triển khai trên nền tảng LAMP:

  • Linux: Hệ điều hành đóng vai trò nền tảng cơ sở hạ tầng.
  • Apache: Máy chủ HTTP Server tiếp nhận, định tuyến và xử lý các yêu cầu từ client gửi đến.
  • MySQL: Hệ quản trị cơ sở dữ liệu quan hệ lưu trữ dữ liệu tập trung.
  • PHP: Ngôn ngữ kịch bản phía máy chủ xử lý logic nghiệp vụ, giao tiếp với MySQL và kết xuất dữ liệu qua Apache.

Thiết kế và kiến trúc hệ thống

1. Đặc tả cơ sở dữ liệu

Hệ thống cơ sở dữ liệu của đồ án gồm 8 bảng dữ liệu quan hệ chính, được thiết kế để quản lý toàn bộ các thực thể trong hệ thống:

Tên bảng Chức năng và mô tả chi tiết
mp_users Quản lý danh sách tài khoản người dùng trong hệ thống (phân quyền admin, member, trạng thái kích hoạt).
mp_categories Lưu trữ danh mục phân loại giao dịch (gồm loại thu nhập income và loại chi tiêu expense).
mp_acounts Lưu danh sách các tài khoản ngân hàng của người dùng (tên ngân hàng, mô tả, số tài khoản, số dư hiện có, không lưu mật khẩu).
mp_transactions Lưu chi tiết lịch sử các giao dịch phát sinh (thu/chi, số tiền, ngày giao dịch, tham chiếu, danh mục, tài khoản liên quan).
mp_budgets Quản lý ngân sách dự trù của người dùng cho từng danh mục trong một khoảng thời gian nhất định (tháng/năm).
mp_goals Quản lý các mục tiêu tiết kiệm tài chính cá nhân cần đạt được, số tiền đã gửi và thời hạn hoàn thành.
mp_notifications Lưu trữ các thông báo từ hệ thống gửi tới người dùng (cảnh báo mục tiêu hết hạn, sắp hết hạn, hoàn thành mục tiêu).
mp_general_data Lưu trữ các thông tin cấu hình chung và cài đặt hệ thống của website.

2. Chuẩn hóa giao tiếp và quy ước REST API

  • Quy ước mã trạng thái HTTP: Toàn bộ các yêu cầu gửi đến API đều trả về HTTP Status Code 200. Trạng thái thực thi thành công hay thất bại được chỉ định thông qua thuộc tính result (giá trị 1 tương ứng với thành công, 0 tương ứng với thất bại) trong nội dung JSON trả về.
  • Cấu trúc JSON phản hồi tiêu chuẩn:
    • result (int): Kết quả thực thi (0 hoặc 1).
    • msg (string): Thông báo chi tiết gửi tới người dùng hoặc hệ thống.
    • method (string): Phương thức HTTP đã tiếp nhận (GET, POST, PUT, DELETE).
    • data / summary / accessToken (Array/Object): Dữ liệu kết quả truy vấn, thống kê hoặc mã khóa token.
  • Xác thực bảo mật: Sử dụng chuỗi mã hóa JSON Web Token truyền qua tiêu đề HTTP Header theo định dạng Authorization: JWT <token>.
  • Chính sách giới hạn tần suất (Rate limit): Do hệ thống phục vụ mục đích học tập và kiểm thử nội bộ, API không áp dụng chính sách giới hạn số lần gọi request.

Nội dung chính theo từng chương

Chương 1: Mô tả hệ thống

Chương 1 trình bày tổng quan cấu trúc dữ liệu và các mô hình kiến trúc cốt lõi. Nhóm tác giả làm rõ sơ đồ 8 bảng dữ liệu quan hệ (mp_users, mp_transactions, mp_categories, mp_budgets, mp_goals, mp_acounts, mp_notifications, mp_general_data), phân tích cơ chế vận hành của giao thức RESTful qua HTTP, đồng thời phân tích chi tiết cơ chế phân tầng dữ liệu của mô hình MVC trong PHP và MVVM trên ứng dụng client di động.

Chương 2: Môi trường máy chủ Webserver

Chương 2 mô tả chi tiết ngăn xếp máy chủ LAMP (Linux, Apache, MySQL, PHP). Nội dung tập trung vào vai trò của từng thành phần trong việc tạo thành một môi trường web service hoàn chỉnh, giải thích cơ chế tiếp nhận yêu cầu từ Apache, xử lý logic và truy xuất cơ sở dữ liệu qua PHP và MySQL, sau đó trả kết quả về cho ứng dụng khách.

Chương 3: Các Client, Application truy cập API

Chương 3 trình bày thiết kế và giao diện của các ứng dụng đầu cuối giao tiếp với API:

  • Ứng dụng Android:
    • Cấu trúc màn hình: Home Activity (màn hình chính quản lý và điều phối các Fragment), Introduce Activity (màn hình hướng dẫn khi mở ứng dụng lần đầu), Main Activity (màn hình đăng nhập hỗ trợ 3 hình thức).
    • Chức năng chính: Quản lý giao dịch thu chi (Transaction) với tính năng tạo sao kê theo chuẩn Ngân hàng Nhà nước Việt Nam; Quản lý thẻ ngân hàng và số dư (Card); Tạo danh mục thu/chi (Category); Thiết lập mục tiêu và nạp tiền tiết kiệm (Goal); Hiển thị thông báo trên thanh cài đặt nhanh thiết bị (Notification); Hỗ trợ chế độ giao diện tối (Dark Mode).
  • Ứng dụng iOS: Định hướng triển khai ứng dụng client trên nền tảng Apple dựa trên cấu trúc kiến trúc MVVM.
  • Ứng dụng Web:
    • Xác thực: Giao diện đăng nhập, ghi nhớ mật khẩu, quy trình khôi phục và đổi mật khẩu qua email.
    • Bảng điều khiển (Dashboard): Thanh điều hướng có chỉ báo vị trí, khu vực tổng quan số dư và giao dịch trong tháng/năm, menu thao tác nhanh (Quick menu).
    • Nghiệp vụ tài chính: Quản lý giao dịch thu/chi (hỗ trợ nhập nhanh dữ liệu qua tệp định dạng CSV); Quản lý tài khoản ngân hàng; Quản lý kế hoạch ngân sách; Quản lý mục tiêu tiết kiệm; Lịch theo dõi thu chi theo ngày/tháng/năm; Thống kê báo cáo theo loại giao dịch, tài khoản và thời gian.
    • Phân hệ Quản trị viên (Admin): Quản lý danh sách người dùng (thêm, sửa, xóa, phân quyền admin/member, kích hoạt trạng thái); Quản lý danh mục thể loại; Cấu hình hệ thống website (tên, slogan, mô tả, từ khóa, tiền tệ, logo); Cấu hình máy chủ thư điện tử SMTP gửi thông báo và mã OTP.

Chương 4: REST API

Chương 4 là phần đặc tả kỹ thuật chi tiết nhất của báo cáo, cung cấp tài liệu hướng dẫn sử dụng toàn bộ các endpoint API của hệ thống Money Pro (được lưu trữ tại đường dẫn tài liệu nhóm công bố https://bitly.vn/ndz4xl).

Hệ thống API được phân chia theo các nhóm chức năng nghiệp vụ cụ thể:

Phân hệ API Phương thức & Đường dẫn Endpoint Tham số đầu vào chính Dữ liệu đầu ra tiêu biểu
Xác thực & Bảo mật POST /api/login
POST /api/signup
POST /api/change-password
POST /api/recovery
POST /api/login/google
POST /api/login/facebook
username, password, email, id_token, access_token Trả về accessToken (chuỗi JWT), thông tin data người dùng (id, account_type, firstname, lastname, is_active).
Quản lý Danh mục GET /api/incomecategories
POST /api/incomecategories
PUT /api/incomecategories/{id}
DELETE /api/incomecategories/{id}
GET /api/expensecategories
name, description, color, order[column], order[dir], start, length, search Danh sách danh mục thu nhập (type 1) hoặc chi tiêu (type 2), mã màu HEX, số lượng bản ghi total_count.
Quản lý Tài khoản GET /api/accounts
POST /api/accounts
PUT /api/accounts/{id}
DELETE /api/accounts/{id}
GET /api/accounts/getaccounttransaction/{id}
name, balance, description, accountnumber Thông tin tài khoản ngân hàng, số dư hiện có, danh sách các giao dịch liên kết theo từng tài khoản.
Quản lý Mục tiêu GET /api/goals
POST /api/goals
PUT /api/goals/{id}
DELETE /api/goals/{id}
POST /api/goals/{id} (nạp tiền)
name, balance, amount, deadline, deposit, dateFrom, dateTo, status Chi tiết tiến độ mục tiêu tiết kiệm, số tiền đã tích lũy (deposit), số tiền mục tiêu (amount), thời hạn.
Quản lý Ngân sách GET /api/budgets
POST /api/budgets
PUT /api/budgets/{id}
DELETE /api/budgets/{id}
GET /api/budgets/gettransactionbydate
amount, category_id, description, month, year, fromdate, todate Danh sách định mức ngân sách theo từng danh mục, thời gian hiệu lực và tổng tiền đã chi trong kỳ.
Quản lý Giao dịch GET /api/transactions/income
POST /api/transactions/expense
PUT /api/transactions/{id}
DELETE /api/transactions/{id}
GET /api/transactions/income/gettotal
GET /api/transactions/expense/gettotal
category_id, account_id, name, amount, reference, transactiondate, type, description Lịch sử chi tiết giao dịch thu/chi, thống kê tổng số dư giao dịch theo ngày, tuần, tháng, năm (totalbalance).
Báo cáo & Thống kê GET /api/report/categorymonthly
GET /api/report/totalBalance
GET /api/report/accounttransactions
GET /api/report/transactions
type, date, account, fromdate, todate, category_id Báo cáo giao dịch theo danh mục, tổng số dư theo mốc thời gian, bảng sao kê tài khoản ngân hàng.
Trang chủ & Lịch GET /api/home/accountbalance
GET /api/home/incomevsexpense
GET /api/home/latestall
GET /api/calendar/income
GET /api/calendar/expense
date, type, start, end Dữ liệu so sánh thu - chi theo tuần/tháng/năm, danh sách giao dịch mới nhất 7 ngày, sự kiện lịch thu chi.
Quản trị & Cấu hình GET /api/users
POST /api/users/new
PUT /api/users/{id}
POST /api/settings/site
GET /api/settings/smtp
POST /api/settings/smtp
GET /api/notifications
firstname, lastname, account_type, is_active, site_name, host, port, encryption, auth Danh sách người dùng, cập nhật cấu hình website (slogan, logo, tiền tệ), thông số máy chủ SMTP và thông báo hệ thống.

Kết quả và đóng góp

1. Kết quả đạt được

  • Hiện thực hóa hệ thống Backend hoàn chỉnh: Xây dựng thành công hệ thống REST API với hơn 30 endpoint nghiệp vụ, xử lý đầy đủ các thao tác CRUD (Create, Read, Update, Delete) cho các thực thể người dùng, danh mục, tài khoản, giao dịch, ngân sách, mục tiêu, thông báo và cấu hình hệ thống.
  • Tích hợp xác thực đa phương thức: Triển khai cơ chế cấp phát và kiểm tra token JWT cho mọi request yêu cầu bảo mật, đồng thời hỗ trợ tích hợp đăng nhập qua API của Google (id_token) và Facebook (access_token).
  • Phát triển đa nền tảng client: Xây dựng ứng dụng Web tương tác trên trình duyệt hỗ trợ đầy đủ giao diện người dùng và bảng điều khiển dành riêng cho Quản trị viên; triển khai ứng dụng di động Android với cấu trúc Activity/Fragment, hỗ trợ chế độ Dark Mode và sao kê chuẩn ngân hàng.
  • Tính năng tiện ích mở rộng: Hỗ trợ nhập liệu giao dịch nhanh thông qua tệp CSV trên nền tảng Web; quản lý cấu hình thông số gửi email qua giao thức SMTP.

2. Đóng góp của đề tài

  • Ứng dụng thành công mô hình kiến trúc phần mềm hướng dịch vụ (SOA) vào bài toán thực tiễn quản lý tài chính cá nhân, tách biệt hoàn toàn tầng logic nghiệp vụ dữ liệu phía máy chủ và tầng hiển thị phía máy khách.
  • Xây dựng một quy chuẩn tài liệu đặc tả API rõ ràng, minh bạch về cấu trúc dữ liệu đầu vào, định dạng đầu ra và mã trạng thái, làm cơ sở kết nối đồng bộ giữa các nền tảng ứng dụng khác nhau.

Hạn chế và hướng phát triển

Dựa trên nội dung báo cáo đồ án, hệ thống còn tồn tại một số điểm hạn chế và hướng mở cần tiếp tục hoàn thiện:

1. Hạn chế

  • Cơ chế kiểm soát lưu lượng (Rate Limiting): Hệ thống API hiện tại chưa thiết lập giới hạn tần suất gọi request do chỉ phục vụ mục đích học tập và kiểm thử nội bộ, chưa đảm bảo an toàn tải khi đưa vào vận hành thương mại quy mô lớn.
  • Chuẩn hóa mã phản hồi HTTP: Mọi phản hồi API đều trả về mã trạng thái HTTP 200 và sử dụng trường result (0 hoặc 1) trong payload JSON để phân biệt lỗi, chưa tận dụng tối đa các mã phản hồi chuẩn của giao thức HTTP (như 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 500 Internal Server Error).
  • Phạm vi nền tảng: Báo cáo mới chỉ trình bày chi tiết giao diện và mã nguồn triển khai trên nền tảng Web và Android, phần ứng dụng trên iOS mới dừng ở mức định hướng kiến trúc MVVM.

2. Hướng phát triển

  • Thiết lập cơ chế giới hạn tần suất truy cập (Rate Limit) cho từng người dùng/IP nhằm chống tấn công từ chối dịch vụ (DDoS) và lạm dụng tài nguyên máy chủ.
  • Chuẩn hóa lại hệ thống phản hồi lỗi theo đúng tiêu chuẩn RESTful quốc tế sử dụng đầy đủ các HTTP Status Code.
  • Hoàn thiện việc lập trình giao diện và chức năng cho ứng dụng máy khách trên hệ điều hành iOS.

Giá trị tham khảo

Báo cáo đồ án môn học này là tài liệu tham khảo thực tế cho các nhóm đối tượng:

  • Sinh viên ngành Công nghệ thông tin và Kỹ thuật phần mềm: Cung cấp tài liệu mẫu về cách thức xây dựng đồ án môn học "Phát triển phần mềm hướng dịch vụ", từ thiết kế cơ sở dữ liệu quan hệ đến triển khai REST API bằng PHP và kết nối ứng dụng Android theo mô hình MVVM.
  • Lập trình viên phát triển ứng dụng tài chính: Tham khảo mô hình phân loại dữ liệu tài chính (phân chia danh mục thu/chi, tài khoản ngân hàng, ngân sách dự trù, mục tiêu tiết kiệm, và sao kê giao dịch).
  • Phần đáng tham khảo nhất: Chương 4 với hệ thống đặc tả chi tiết các endpoint API, bảng tham số yêu cầu (type, required, default, description) và định dạng JSON phản hồi mẫu.

Câu hỏi thường gặp

1. Hệ thống máy chủ của ứng dụng Money Pro được triển khai trên nền tảng công nghệ nào?

Hệ thống máy chủ dịch vụ của đồ án được triển khai trên ngăn xếp LAMP, bao gồm hệ điều hành Linux làm nền tảng, máy chủ web Apache xử lý và định tuyến các HTTP request, hệ quản trị cơ sở dữ liệu MySQL lưu trữ dữ liệu tập trung, và ngôn ngữ lập trình PHP thực thi các logic nghiệp vụ theo mô hình MVC.

2. Cơ chế xác thực và phân quyền người dùng trong hệ thống REST API được thực hiện như thế nào?

Hệ thống sử dụng cơ chế xác thực chuỗi khóa JSON Web Token (JWT) được truyền qua trường Authorization trong HTTP Header theo cú pháp JWT <token>. Bên cạnh đăng ký và đăng nhập truyền thống bằng email/mật khẩu, API còn hỗ trợ xác thực bằng token từ bên thứ ba (Google id_token và Facebook access_token). Hệ thống phân quyền tài khoản thành hai cấp độ: admin (quản trị viên toàn quyền) và member (người dùng thông thường).

3. Quy ước trả về mã trạng thái và xử lý lỗi của hệ thống API Money Pro có đặc điểm gì?

Tất cả các yêu cầu gửi đến API đều trả về HTTP Status Code cố định là 200. Kết quả xử lý thành công hay thất bại được nhận biết thông qua thuộc tính result bên trong đối tượng JSON trả về (result: 1 là thành công, result: 0 là thất bại), đi kèm với thông báo chi tiết trong thuộc tính msg và phương thức tiếp nhận trong thuộc tính method.

4. Ứng dụng di động Android trong đồ án được xây dựng theo kiến trúc nào và có các tính năng gì nổi bật?

Ứng dụng Android được xây dựng theo kiến trúc MVVM (Model - View - ViewModel) kết hợp mẫu thiết kế Observer. Ứng dụng gồm các màn hình chính (Home Activity, Introduce Activity, Main Activity) và cung cấp các tính năng: quản lý giao dịch thu chi với khả năng tạo sao kê chuẩn Ngân hàng Nhà nước Việt Nam, quản lý thẻ ngân hàng, thiết lập danh mục, theo dõi mục tiêu tiết kiệm, hiển thị thông báo trên thanh cài đặt nhanh và hỗ trợ chế độ Dark Mode.

5. Giao diện Web của hệ thống cung cấp những tính năng quản trị (Admin) đặc thù nào?

Đối với người dùng có quyền Quản trị viên (admin), giao diện Web cung cấp các phân hệ chuyên biệt bao gồm: Quản lý người dùng (/api/users - thêm, sửa, xóa, phân quyền, kích hoạt/vô hiệu hóa tài khoản); Quản lý danh mục thể loại; Cấu hình thông số website (/api/settings/site - tên trang, slogan, từ khóa tìm kiếm, logo, đơn vị tiền tệ); và Cài đặt máy chủ gửi thư SMTP (/api/settings/smtp - cấu hình host, port, giao thức mã hóa TLS, tài khoản xác thực email).


Kết luận

Báo cáo đồ án môn học "Ứng dụng quản lí chi tiêu cá nhân" của nhóm sinh viên Học viện Công nghệ Bưu chính Viễn thông đã hoàn thành trọn vẹn mục tiêu nghiên cứu và phát triển phần mềm theo mô hình hướng dịch vụ. Đề tài đã xây dựng thành công hệ thống cơ sở dữ liệu quan hệ, bộ dịch vụ REST API trên nền tảng LAMP, cùng các ứng dụng máy khách Web và Android hỗ trợ đầy đủ nghiệp vụ tài chính cá nhân. Đây là tài liệu tham khảo có giá trị ứng dụng thực tiễn cao cho sinh viên chuyên ngành Công nghệ thông tin trong việc thiết kế và tích hợp hệ thống phần mềm đa nền tảng.