Chương 1 Cơ sở lý thuyết 1.1 Tổng quan về tiêu chuẩn RESTfulAPI RESTful API là một kiểu thiết kế API (Application Programming Interface) được sử dụng để truyền tải dữ liệu giữa các ứng dụng web và di động. REST (Representational State Transfer) là một kiến trúc phần mềm được phát triển bởi Roy Fielding năm 2000. RESTful API là một ứng dụng của kiến trúc này. RESTful API sử dụng các phương thức HTTP như GET, POST, PUT, DELETE để truy cập và xử lý dữ liệu.
RESTful API được thiết kế để đảm bảo tính tương thích, độc lập và có thể mở rộng của các ứng dụng web và di động. Với RESTful API, các ứng dụng có thể giao tiếp với nhau thông qua các yêu cầu HTTP đơn giản, dễ dàng tạo ra các ứng dụng phức tạp bằng cách kết hợp các tài nguyên khác nhau. Một số đặc điểm của RESTful API: • Sử dụng các phương thức HTTP để truy cập và xử lý dữ liệu. • Sử dụng các định danh tài nguyên URI (Uniform Resource Identifier) để xác định và truy cập các tài nguyên.
• Truyền tải dữ liệu dưới dạng định dạng mở JSON hoặc XML. • Hỗ trợ cache và có thể mở rộng. RESTful API có nhiều ưu điểm như tính tương thích cao, độc lập với ngôn ngữ lập trình, dễ dàng để phát triển và bảo trì. Nó cũng cho phép ứng dụng tương tác với nhau một cách dễ dàng và hiệu quả.
Tuy nhiên, việc thiết kế và triển khai RESTful API cần Trang 4 phải được thực hiện một cách đúng đắn để đảm bảo tính bảo mật và hiệu suất của hệ thống.2 Tổng quan về SpringBoot Spring Boot là một framework phát triển ứng dụng web cho phép người dùng dễ dàng tạo ra các ứng dụng Java chạy trên nền tảng của Spring Framework. Spring Boot cung cấp cho người dùng một số tính năng và lợi ích, bao gồm: • Tự cấu hình: Spring Boot tự động cấu hình nhiều thứ để người dùng không cần phải cấu hình thủ công, giúp tiết kiệm thời gian và công sức. • Các phần mềm con độc lập: Spring Boot giúp đóng gói và phân phối các ứng dụng Java với các phần mềm con độc lập, điều này giúp cho việc cài đặt và triển khai trở nên dễ dàng và thuận tiện hơn. • Tích hợp tốt: Spring Boot tích hợp tốt với nhiều công nghệ phổ biến như Spring Data, Spring Security, và Spring MVC, giúp người dùng phát triển ứng dụng nhanh chóng và dễ dàng.
• Các tính năng đáng chú ý: Spring Boot cung cấp nhiều tính năng đáng chú ý như chạy ứng dụng trên máy chủ web nhúng, tạo RESTful API, cấu hình dịch vụ bảo mật, và tạo các hồ sơ giám sát (monitoring profiles). • Dễ dàng tùy chỉnh: Spring Boot cho phép người dùng tùy chỉnh cấu hình để tạo ra các ứng dụng theo nhu cầu của mình. • Hỗ trợ cộng đồng: Spring Boot có một cộng đồng lớn và tích cực, cung cấp cho người dùng các tài liệu và hướng dẫn chi tiết về cách sử dụng và tối ưu hóa ứng dụng của họ.3 Tổng quan về H2Database H2 Database là một hệ thống quản lý cơ sở dữ liệu mã nguồn mở được viết bằng Java, được thiết kế để có thể chạy trên nhiều nền tảng khác nhau. H2 Database cung cấp nhiều tính năng chính để quản lý cơ sở dữ liệu, bao gồm: Trang 5 • Hỗ trợ nhiều loại cơ sở dữ liệu: H2 Database hỗ trợ nhiều loại cơ sở dữ liệu, bao gồm cơ sở dữ liệu quan hệ (Relational database), cơ sở dữ liệu đối tượng (Object-oriented database) và cơ sở dữ liệu key-value.
• Hỗ trợ nhiều ngôn ngữ lập trình: H2 Database hỗ trợ nhiều ngôn ngữ lập trình, bao gồm Java, C++, C#, Python và Ruby. • Tốc độ xử lý nhanh: H2 Database được thiết kế để có thể xử lý cơ sở dữ liệu nhanh chóng và hiệu quả. • Dễ dàng tích hợp: H2 Database có thể tích hợp với nhiều hệ thống phát triển phần mềm khác, bao gồm các framework phổ biến như Hibernate và Spring. • Hỗ trợ mã hóa và bảo mật: H2 Database cung cấp nhiều tính năng bảo mật, bao gồm mã hóa dữ liệu và chứng thực người dùng.
• Tính linh hoạt và mở rộng: H2 Database được thiết kế để có thể linh hoạt và dễ dàng mở rộng, cho phép người dùng thêm tính năng mới hoặc tùy chỉnh cơ sở dữ liệu theo nhu cầu của mình. • Hỗ trợ cập nhật và khôi phục dữ liệu: H2 Database cho phép người dùng thực hiện cập nhật và khôi phục dữ liệu dễ dàng, giúp đảm bảo tính toàn vẹn của cơ sở dữ liệu. • Tính đa nền tảng: H2 Database có thể chạy trên nhiều nền tảng khác nhau, bao gồm Windows, Linux và Mac OS.4 Tổng quan về Liquibase Liquibase là một công cụ quản lý phiên bản cơ sở dữ liệu được sử dụng để theo dõi các phiên bản cấu trúc cơ sở dữ liệu và thay đổi dữ liệu liên quan. Công cụ này cho phép quản lý các phiên bản của cấu trúc cơ sở dữ liệu và quản lý các phiên bản của dữ liệu.
Với Liquibase, người dùng có thể tạo ra các script để tạo và thay đổi cấu trúc của cơ sở dữ liệu và lưu chúng trong các file XML hoặc YAML. Nó hỗ trợ nhiều hệ quản trị cơ sở dữ liệu phổ biến, bao gồm Oracle, SQL Server, MySQL, PostgreSQL, DB2 và H2. Một số đặc tính chính của Liquibase bao gồm: Trang 6 • Hỗ trợ phiên bản cơ sở dữ liệu và dữ liệu. • Cho phép người dùng tạo ra các script để tạo ra các phiên bản cơ sở dữ liệu mới.
• Hỗ trợ thay đổi dữ liệu và thay đổi cấu trúc cơ sở dữ liệu. • Cho phép người dùng rollback các thay đổi. • Có thể tích hợp vào các quy trình liên tục tích hợp và triển khai tự động. • Liquibase được sử dụng rộng rãi trong các dự án phát triển phần mềm và các dự án cơ sở dữ liệu, và là một công cụ hữu ích trong việc quản lý các phiên bản cơ sở dữ liệu và đảm bảo tính nhất quán của dữ liệu trong các môi trường phát triển và triển khai.5 Kiến trúc của một ứng dụng Spring Boot theo tiêu chuẩn RESTful API Kiến trúc của một ứng dụng Spring Boot theo tiêu chuẩn RESTful API có thể được thiết kế theo mô hình 3 lớp (3-tier architecture), bao gồm các lớp sau: • Lớp Controller: Đây là lớp đầu tiên nhận các yêu cầu HTTP từ client.
Lớp này sẽ kiểm tra và xử lý các yêu cầu này, định tuyến chúng đến lớp Service tương ứng và trả về các đối tượng HTTP Response cho client. • Lớp Service: Lớp này chịu trách nhiệm xử lý các yêu cầu do lớp Controller gửi đến, thường bao gồm các thao tác CRUD (Create, Read, Update, Delete) trên cơ sở dữ liệu. Lớp Service sẽ gọi các phương thức từ lớp DAO (Data Access Object) để truy cập vào cơ sở dữ liệu. • Lớp DAO: Lớp này là lớp truy cập cơ sở dữ liệu để thực hiện các thao tác CRUD.
Lớp DAO sẽ đảm bảo kết nối tới cơ sở dữ liệu, tạo các câu lệnh SQL để thao tác dữ liệu và trả về kết quả cho lớp Service. Ngoài ra, để đảm bảo đúng tiêu chuẩn RESTful API, các ứng dụng Spring Boot cần tuân thủ các nguyên tắc và tiêu chuẩn sau: • 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 (resource). Trang 7 • Sử dụng định dạng JSON hoặc XML để trao đổi dữ liệu giữa client và server. • Sử dụng các URL thân thiện với người dùng để truy cập tài nguyên (ví dụ: /users/id thay vì /users?id=id).
• Sử dụng mã trạng thái HTTP (HTTP status code) để biểu thị trạng thái của yêu cầu (ví dụ: 200 OK, 404 Not Found, 500 Internal Server Error). • Đảm bảo rằng mã lỗi và thông báo lỗi được trả về đúng định dạng và đầy đủ thông tin để giúp client xử lý lỗi một cách chính xác. Trong hệ thống này em sẽ sử dụng JPA (Java Persistense API) làm giải pháp thay thế cho lớp DAO, sử dụng các Class Domain với kĩ thuật ORM để ánh xạ các đối tượng trong hệ thống đến các bảng trong cơ sở dữ liệu 1.6 Tổng quan về ORM ORM là viết tắt của "Object-Relational Mapping" (Ánh xạ đối tượng-quan hệ), là một kỹ thuật trong lập trình để ánh xạ dữ liệu giữa các đối tượng của ngôn ngữ lập trình với các bảng trong cơ sở dữ liệu quan hệ. Thay vì phải viết các truy vấn SQL để truy cập dữ liệu trong cơ sở dữ liệu, các đối tượng trong mã nguồn sẽ được sử dụng để tương tác với cơ sở dữ liệu.
Điều này giúp giảm bớt sự phức tạp trong việc tương tác với cơ sở dữ liệu, tăng tính bảo mật và giảm thiểu sự lỗi trong mã nguồn. Ví dụ, trong ORM, một lớp đối tượng có thể tương ứng với một bảng trong cơ sở dữ liệu và các thuộc tính của lớp đối tượng sẽ tương ứng với các cột của bảng. Khi một đối tượng được tạo mới hoặc sửa đổi, các thay đổi sẽ được tự động đồng bộ hóa với cơ sở dữ liệu mà không cần phải viết các truy vấn SQL. ORM được sử dụng phổ biến trong các ứng dụng web để tương tác với cơ sở dữ liệu, giúp giảm thiểu thời gian phát triển, tăng tính bảo mật và cải thiện hiệu suất của ứng dụng.7 Tổng quan về JPA JPA là viết tắt của Java Persistence API, là một API trong Java để tương tác với cơ sở dữ liệu quan hệ.
Nó là một phần của Java Enterprise Edition (Java EE) và được Trang 8 Chương 3 Phân tích và thiết kế hệ thống 3.1 Mô hình nghiệp vụ 3.1 Sơ đồ luồng dữ liệu mức 0 Sơ đồ luồng dữ liệu mức 0 là một sơ đồ đơn giản và trực quan hóa mức độ cao nhất trong phân tích luồng dữ liệu. Miêu tả các quy trình cơ bản và các tác nhân chính trong hệ thống mà không đề cập đến bất kỳ chi tiết cụ thể nào, cung cấp một cái nhìn tổng quan về kiến trúc của hệ thống. Dưới đây là sơ đồ luồng dữ liệu mức ngữ cảnh cho hệ thống quản trị phòng khám với 4 tác nhân chính: • Quản lý phòng khám • Nhân viên phòng khám • Bác sĩ • Bệnh nhân Trang 26 Hình 3.1: Sơ đồ luồng dữ liệu mức ngữ cảnh (mức 0) Trang 27 3.2 Sơ đồ luồng dữ liệu mức 1 Sau khi phân rã chức năng quản trị phòng khám tại biểu đồ luồng dữ liệu mức ngữ cảnh ta có sơ đồ luồng dữ liệu mức 1 như sau: Hình 3.2: Sơ đồ luồng dữ liệu mức 1 Trang 28 3.3 Sơ đồ luồng dữ liệu mức 2 Hình 3.3: Chức năng quản lý chung Hình 3.4: Chức năng quản lý phiên khám Trang 29 Hình 3.