Đồ án HCMUTE: Tìm hiểu Spring Framework và xây dựng website quản lý API sử dụng Swagger

Đồ án nghiên cứu hcmute tìm hiểu spring framework xây dựng website quản lý api document sử dựng swagger tool, áp dụng công nghệ tiên tiến, tối ưu giải pháp kỹ thuật cho bài toán

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

khóa luận tốt nghiệp

2019

116
3
0

Phí lưu trữ

35 Point

Mục lục chi tiết

LỜI CẢM ƠN

ĐỀ CƯƠNG KHÓA LUẬN TỐT NGHIỆP

1. CHƯƠNG 1: SPRING FRAMEWORK

1.1. Sự ra đời của Spring

1.2. Đặc điểm của Spring

1.3. Ưu và nhược điểm của Spring

1.4. Spring Core

1.5. Spring Bean

1.6. Aspect Oriented Programming

2. CHƯƠNG 2: RESTFUL API

2.1. RESTful API là gì?

2.2. Cấu trúc REST

2.3. Ràng buộc REST

2.4. Các điểm cần lưu ý về API

2.5. Tại sao chọn RESTful API

2.6. Khó khăn khi sử dụng

3. CHƯƠNG 3: THYMELEAF

3.1. Thymeleaf so sánh với JSP

3.2. Tại sao chọn Thymeleaf

3.3. Spring Security với Thymeleaf

4. CHƯƠNG 4: SWAGGER TOOL

4.1. Giới thiệu bộ công cụ Swagger

4.2. Cấu trúc cơ bản của OAS trong Swagger

5. CHƯƠNG 5: WEBSOCKET

5.1. Giao thức bắt tay của WebSocket

5.2. Nhược điểm

6. CHƯƠNG 6: ỨNG DỤNG

6.1. Khảo sát hiện trạng

6.2. Xác định yêu cầu

6.3. Thiết kế hệ thống

6.4. Thiết kế dữ liệu

6.5. Thiết kế giao diện

6.6. Kiểm thử phần mềm

NHỮNG KẾT QUẢ ĐẠT ĐƯỢC

NHỮNG KHÓ KHĂN KHI THỰC HIỆN ĐỀ TÀI

KINH NGHIỆM ĐẠT ĐƯỢC

HƯỚNG PHÁT TRIỂN TRONG TƯƠNG LAI

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Giới thiệu Spring Framework và Swagger

Đề tài "Tìm hiểu Spring Framework & Xây dựng Website Quản lý API Document sử dụng Swagger Tool" tập trung vào việc ứng dụng Spring Framework, cụ thể là Spring Boot, Spring MVC, Spring Security, và Spring Data JPA, để xây dựng một website quản lý API Documentation. Website này sử dụng Swagger (hay Swagger UI) - một công cụ mạnh mẽ cho API DevelopmentAPI Design - để tạo ra, quản lý và hiển thị tài liệu API một cách trực quan. REST API được sử dụng làm kiến trúc cơ bản, đảm bảo tính RESTful Web Services. Ngôn ngữ lập trình chính là Java. Backend Development đóng vai trò chủ đạo trong dự án này, tập trung vào việc xây dựng và quản lý các Web API. Khóa luận cũng đề cập đến các khía cạnh quan trọng khác như Database Integration (có thể sử dụng MySQL, PostgreSQL, hoặc MongoDB), API Testing (sử dụng PostmanJUnit), Dependency Injection, AOP (Aspect-Oriented Programming), và Exception Handling. Việc sử dụng Spring Initializr đơn giản hóa quá trình thiết lập dự án. Maven hoặc Gradle có thể được sử dụng làm Build Tools.

1.1 Spring Framework Cốt lõi của ứng dụng

Khóa luận nhấn mạnh vai trò trung tâm của Spring Framework trong việc xây dựng website. Spring Boot đơn giản hóa quá trình khởi tạo và cấu hình ứng dụng, giảm thiểu lượng mã code cần viết. Spring MVC cung cấp một khung kiến trúc vững chắc cho việc phát triển Web API. Spring Security đảm bảo tính bảo mật cho website bằng việc quản lý API AuthenticationAuthorization, có thể tích hợp với OAuth 2.0 hoặc JWT (JSON Web Token). Spring Data JPA giúp đơn giản hóa việc tương tác với cơ sở dữ liệu, hỗ trợ Hibernate và các ORM (Object Relational Mapping) khác. Việc áp dụng Dependency InjectionAOP giúp tăng tính modularity và maintainability của mã nguồn. Spring Data đóng vai trò quan trọng trong việc truy cập và thao tác dữ liệu. Application Development trong ngữ cảnh này tập trung vào xây dựng một ứng dụng web mạnh mẽ và bảo mật. Việc lựa chọn công nghệ phụ thuộc vào yêu cầu cụ thể của dự án, nhưng Spring Framework mang lại sự linh hoạt và hiệu quả cao. Khó khăn trong việc ứng dụng Spring Framework có thể liên quan đến sự phức tạp của một số khía cạnh nâng cao của framework này.

1.2 Swagger Quản lý và hiển thị API Documentation

Swagger (cùng với Swagger UI) là công cụ then chốt trong việc tạo và quản lý API Documentation. Nó cho phép tạo ra các tài liệu API theo chuẩn OpenAPI, giúp các nhà phát triển hiểu rõ cách thức tương tác với API. Swagger UI cung cấp một giao diện người dùng trực quan để khám phá và thử nghiệm API, hỗ trợ API Testing. Khóa luận đề cập đến cách tích hợp Swagger vào ứng dụng Spring, cho phép tự động sinh ra tài liệu API từ mã nguồn. API Management trở nên dễ dàng hơn với sự hỗ trợ của Swagger. API Security cũng được xem xét, bao gồm việc bảo vệ tài liệu API khỏi truy cập trái phép. Việc sử dụng Swagger giúp cải thiện quá trình phát triển và tích hợp hệ thống, giúp tăng hiệu quả cho Software DevelopmentWebsite Development. Tuy nhiên, việc thiết kế và duy trì tài liệu API cần sự cẩn thận để đảm bảo tính chính xác và cập nhật của thông tin.

II. Kiến trúc và triển khai

Dự án hướng đến một kiến trúc Microservices (nếu phù hợp), cho phép mở rộng và bảo trì dễ dàng hơn. Spring Cloud có thể được sử dụng để quản lý các microservices. API Gateway có thể được thêm vào để quản lý routing và bảo mật cho các API. Versioning API đảm bảo khả năng tương thích giữa các phiên bản API khác nhau. Continuous IntegrationContinuous Delivery (CI/CD) được khuyến khích để tự động hóa quá trình xây dựng, thử nghiệm và triển khai ứng dụng. Các công cụ như DockerKubernetes cho Containerization giúp đơn giản hóa việc triển khai. Cloud Deployment trên các nền tảng như AWS, Azure, hoặc Google Cloud Platform (GCP) có thể được xem xét để tăng khả năng mở rộng. Build Tools như Maven hay Gradle sẽ quản lý các dependencies và quá trình build ứng dụng. Việc quản lý exception và logging cũng được nhấn mạnh để đảm bảo tính ổn định và khả năng debug dễ dàng.

2.1 Kiến trúc ứng dụng

Kiến trúc ứng dụng dựa trên mô hình REST API, sử dụng Spring MVC để xử lý request và response. Spring Boot đơn giản hóa quá trình khởi tạo và cấu hình ứng dụng. Spring Security đảm bảo tính bảo mật của ứng dụng. Cơ sở dữ liệu được tích hợp thông qua Spring Data JPA, sử dụng Hibernate để ánh xạ đối tượng với cơ sở dữ liệu. Việc lựa chọn loại cơ sở dữ liệu (MySQL, PostgreSQL, MongoDB) phụ thuộc vào yêu cầu cụ thể của dự án. Reactive Programming với Spring WebFlux (nếu cần thiết) có thể được cân nhắc để tối ưu hiệu suất xử lý. API Gateway (nếu áp dụng) đảm bảo tính scalability và resilience của hệ thống. Thiết kế hệ thống cần chú trọng đến API Design để đảm bảo tính nhất quán và dễ sử dụng. API AuthenticationAuthorization được thực hiện bằng các cơ chế phù hợp như OAuth 2.0 hoặc JWT.

2.2 Triển khai và bảo trì

Quá trình triển khai ứng dụng được tối ưu hóa thông qua CI/CD. DockerKubernetes có thể được sử dụng để container hóa ứng dụng và quản lý triển khai. Cloud Deployment cung cấp khả năng mở rộng và linh hoạt. Việc giám sát và bảo trì ứng dụng là rất quan trọng. Logging hiệu quả giúp debug và giải quyết sự cố. Unit TestingIntegration Testing đảm bảo chất lượng phần mềm. Postman là một công cụ hữu ích để API Testing. Quản lý phiên bản (Versioning API) giúp dễ dàng cập nhật và bảo trì API. Exception Handling được xử lý một cách cẩn thận để đảm bảo tính ổn định của ứng dụng. Việc lựa chọn nền tảng Cloud Deployment (AWS, Azure, GCP) phụ thuộc vào yêu cầu cụ thể của dự án.

01/02/2025

Trích đoạn nội dung tài liệu

CHƯƠNG 1: SPRING FRAMEWORK 1. Sự ra đời của Spring Vào năm 2002, Spring Framework phát hành phiên bản đầu tiên bởi Rod Johnson. Việc xây dựng các ứng dụng doanh nghiệp trở nên đơn giản và dễ dàng hơn. Theo đà phát triển đó, Spring đã trở thành framework mã nguồn mở phổ biến nhất để xây dựng các ứng dụng doanh nghiệp.

Theo một số nguồn, trên 50% các ứng dụng web Java hiện nay đang sử dụng Spring. Để ngăn chặn sự phức tạp trong phát triển các ứng dụng, Spring Framework thường dựa trên các quan điểm như sau:  Đơn giản hóa công việc phát triển thông qua việc sử dụng các POJO (Plain Old Java Object).  Nới lỏng ràng buộc giữa các thành phần thông qua việc sử dụng Dependency Injection.  Giảm thiểu các mã nghi thức và soạn sẵn (boilerplate) thông qua việc sử dụng các khuôn mẫu (template) và các khía cạnh.

Đặc điểm của Spring Spring Framework cung cấp một mô hình lập trình và cấu hình toàn diện cho các ứng dụng doanh nghiệp dựa trên Java hiện đại - trên bất kỳ loại nền tảng triển khai nào. Spring nhẹ và trong suốt (nhẹ: kích thước nhỏ, version cơ bản chỉ khoảng 2MB; trong suốt: hoạt động một cách trong suốt với lập trình viên). Spring là một mã nguồn mở, được phát triển, chia sẻ và có cộng đồng người dùng rất lớn. Spring Framework được xây dựng dựa trên 2 nguyên tắc design chính là: Dependency Injection (DI) và Aspect Oriented Programming (AOP).

Những tính năng core (cốt lõi) của Spring có thể được sử dụng để phát triển Java Desktop, ứng dụng mobile, Java Web. Mục tiêu chính của Spring là giúp phát triển các ứng dụng J2EE một cách dễ dàng hơn dựa trên mô hình sử dụng POJO (Plain Old Java Object). Ưu và nhược điểm của Spring  Ưu điểm:  Xác định template trước: Spring Framework cung cấp những template cho Hibernate, Struts, JDBC, v. Vì vậy, lập trình viên không cần phải viết quá nhiều code và có thể bỏ qua những bước cơ bản.

 Dễ dàng kiểm thử: Dependency Injection làm cho việc kiểm thử phần mềm, ứng dụng được tiến hành dễ dàng hơn.  Dung lượng nhỏ: Spring Framework có dung lượng nhỏ nhờ vào mô hình POJO. Spring Framework không bắt lập trình viên phải kế thừa các lớp hay thực hiện qua bất kì giao diện nào. Đó là lí do Spring Framework được coi là bất khả xâm phạm.

 Phát triển nhanh: Dependency Injection tạo nên tính năng đặc biệt của Spring Framework giúp hỗ trợ các framework khác và giúp cho việc phát triển ứng dụng JavaEE dễ dàng hơn.  Hỗ trợ khai báo: Spring Framework cung cấp những hỗ trợ khai báo về bộ nhớ đệm, xác nhận, giao dịch và định dạng.  Tính trừu tượng: Nó cung cấp sự trừu tượng hóa cao cho các chi tiết JavaEE như JMS, JDBC, JPA và JTA.  Spring hỗ trợ sử dụng khá nhiều công nghệ như ORM Framework, các logging framework, JEE, các thư viện tạo lịch trình (Quartz và JDK timer).

 Nhược điểm  Vì cốt lõi Spring là Dependency Injection và Aspect Oriented Programming nên nó mang nhược điểm của 2 nguyên tắc design này: mã lệnh và luồng chạy chương trình phức tạp.  Tuy Spring khá dễ tiếp cận nhưng để thuần hóa nó thực sự là điều không hề dễ dàng, điều này đòi hỏi người phát triển phải có nhiều kinh nghiệm. Spring Core Spring Core chính là thành phần trung tâm, cốt lõi của Spring Framework. Lược đồ dưới đây mô tả mối quan hệ giữa Spring Core với các thành phần khác trong Spring Framework: 4 do an Hình 1.

Spring Framework Runtime 1. Spring Bean Spring Bean là trung tâm của Spring Core và là trái tim của một ứng dụng Spring. Trái ngược với EJB, Spring Framework được thiết kế từ lõi bằng cách sử dụng các POJO hay các Spring Bean. Spring Bean có thể được hiểu là các đối tượng Java đơn giản.

Điều này khá tương đồng với nguyên lý thiết kế “Đơn trách nhiệm” (single responsibility) của Robert C Martin trong lập trình hướng đối tượng. Khái niệm Dependency Injection (có thể dịch tiêm các thành phần phụ thuộc) là một sức mạnh nổi bật của Spring Framework. Dependency Injection là một mẫu thiết kế phần mềm mà các đối tượng phụ thuộc sẽ được inject vào một lớp nào đó. Dependency Injection là một implementation cụ thể của khái niệm Inversion of Control (đảo ngược điều khiển).

Ta sẽ có một ví dụ đơn giản về Dependency Injection như sau: Bạn có một web controller có nhiệm vụ lưu thông tin gửi từ form người dùng. Theo nguyên lý Đơn trách nhiệm, bạn không muốn lớp controller tương tác với cơ sở dữ liệu. Thay vào đó, bạn sẽ sử dụng một lớp service để làm công việc này. Như vậy, controller của bạn sẽ chỉ phải xử lý dữ liệu của form (get form data, validate data,…) rồi gọi một phương thức của lớp service được inject để lưu dữ liệu.

Controller không cần phải quan tâm hay lo lắng về 5 do an kết nối cơ sở dữ liệu, pooling hay bảng nào sẽ được update. Cũng như service không cần phải biết request có những thông tin gì. Ưu và nhược điểm  Ưu điểm:  Làm cho clients độc lập hơn dễ dàng hơn để kiểm tra đơn vị.  Thúc đẩy tái sử dụng, kiểm thử và bảo trì.

 Giảm mã boilerplate trong các đối tượng áp dụng từ tất cả các công việc để khởi tạo hoặc thiết lập phụ thuộc được xử lý bởi một thành phần cung cấp.  Dependency Injection cho phép phát triển đồng thời hoặc độc lập.  Nhược điểm:  Các nhà phát triển phải tham khảo nhiều tập tin theo cách một hệ thống thực hiện.  Dependency Injection thường đòi hỏi nhiều dòng code để thực hiện cùng một code thừa kế.

Aspect Oriented Programming 1. Khái niệm Aspect Oriented Programming (AOP) – lập trình hướng khía cạnh: là một kỹ thuật lập trình (kiểu như lập trình hướng đối tượng) nhằm phân tách chương trình thành cách module riêng rẽ, phân biệt, không phụ thuộc nhau. Khi hoạt động, chương trình sẽ kết hợp các module lại để thực hiện các chức năng nhưng khi sửa đổi 1 chức năng thì chỉ cần sửa 1 module. AOP không phải dùng để thay thế OOP mà để bổ sung cho OOP.

Aspect Oriented Programming 6 do an 1. Ưu và nhược điểm  Ưu điểm:  Thiết kế đơn giản: “You aren’t gonna need it (YAGNI)” – chúng ta chỉ cài đặt những thứ chúng ta thực sự cần mà không bao giờ cài đặt trước.  Cài đặt chương trình một cách trong sáng: mỗi một module chỉ làm cái mà nó cần phải làm, giải quyết được hai vấn đề code tangling và code scattering.  Tái sử dụng dễ dàng.

 Nhược điểm:  Khái nhiệm khá trừu tượng, độ trừu tượng của chương trình cao.  Luồng chương trình phức tạp. Spring Context Spring Context mang mọi thứ lại với nhau. Spring Context kế thừa các tính năng của Spring Bean và bổ sung các hỗ trợ cho internationalization (ví dụ như các resource bundle), event propagation, resource loading … Ngoài ra, Spring Context cũng hỗ trợ các tính năng của Java EE như EJB, JMX và truy cập từ xa cơ bản.

Interface ApplicationContext là tiêu điểm của Spring Context. Spring Expression Language (SpEL) Spring Expression Language là một ngôn ngữ ngắn gọn giúp cho việc cấu hình Spring Framework trở nên linh hoạt hơn. Internationalization (i18n) Spring cung cấp các hỗ trợ mở rộng đa ngôn ngữ cho mục đích quốc tế hóa (Internationalization) (i18n) thông qua việc sử dụng Spring Interceptor, Locale Resolvers và Resource Bundles cho các địa phương khác nhau. Các dự án của Spring Trên thực tế Spring Framework là một tập hợp của nhiều dự án con.

Spring Core như chúng ta đã tìm hiểu là nền tảng của các dự án trong Spring Framework. Một một dự án sẽ đảm nhận một chức năng riêng trong việc xây dựng các ứng dụng. Các dự án lớn của Spring Framework bao gồm: 7 do an Spring MVC: Được thiết kế dành cho việc xây dựng các ứng dụng nền tảng web. Đây là một dự án chúng ta không thể bỏ qua khi xây dựng các ứng dụng Java web.

Spring Data: Cung cấp một cách tiếp cận đúng đắn để truy cập dữ liệu từ cơ sở dữ liệu quan hệ, phi quan hệ, map-reduce và thậm chí còn hơn thế nữa. Spring Security: Dự án này cung cấp các cơ chế xác thực (authentication) và phân quyền (authorization) cho ứng dụng của bạn. Spring Boot: Spring Boot là một framework giúp chúng ta phát triển cũng như chạy ứng dụng một cách nhanh chóng. Spring Batch: Dự án này giúp chúng ta dễ dàng tạo các lịch trình (scheduling) và tiến trình (processing) cho các công việc xử lý theo mẻ (batch job).

Spring Integration: Là một implementation của Enterprise Integration Patterns (EIP). Dự án này thiết kế một kiến trúc hướng thông điệp hỗ trợ việc tích hợp các hệ thống bên ngoài. Spring XD: Mục tiêu của dự án này là đơn giản hóa công việc phát triển các ứng dụng Big Data. Spring Social: Dự án này sẽ kết nối ứng dụng của bạn với các API bên thứ ba của Facebook, Twitter, Linkedin … Hình 3.

Sơ lược các thành phần trong Spring Framework Trong giới hạn của đề tài, chúng ta sẽ tìm hiểu kỹ hơn về các dự án phục vụ việc phát triển web: 8 do an 1. Spring Boot Spring Boot là một Project nằm trên tầng IO Execution (Tầng thực thi) của Spring IO Framework. Spring Boot là một bước tiếp theo của Spring, để làm cho Spring dễ dàng hơn trong việc thiết lập và phát triển ứng dụng. Với Spring Boot, các cấu hình Spring được giảm thiểu tối đa.

Spring Boot hỗ trợ các bộ chứa nhúng (embedded containers) điều này cho phép các ứng dụng web có thể chạy độc lập mà không cần phải trên khai lên các Web Server. Spring Boot có thể giải thích một cách đơn giản bởi hình minh họa dưới đây: Hình 4. Minh họa Spring Boot Lợi ích của Spring Boot:  Nó rất dễ dàng để phát triển các ứng dụng dựa trên Spring với Java hoặc Groovy.  Nó giảm thiểu thời gian phát triển và tăng năng xuất.

 Nó tránh việc phải viết nhiều mã nguyên mẫu (boilerplate Code), Annotations và các cấu hình XML.  Nó dễ dàng để bạn tương tác các ứng dụng Spring Boot với các hệ sinh thái của Spring như Spring JDBC, Spring ORM, Spring Data, Spring Security.  Nó đi theo cách tiếp cận “Nguyên tắc cấu hình mặc định” để giảm thiểu thời gian và nỗ lực cần thiết để phát triển ứng dụng.  Nó cung cấp các Server nhúng (Embedded HTTP servers) như là Tomcat, Jetty.

để phát triển và test các ứng dụng web nhanh chóng và dễ dàng.  Nó cung cấp công cụ CLI (Command Line Interface) để phát triển và test các ứng dụng Spring Boot (Java hoặc Groovy) từ các dòng lệnh (command prompt) rất dễ dàng và nhanh chóng.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ