Tải bản đầy đủ (.pdf) (116 trang)

(Đồ án hcmute) tìm hiểu spring framework xây dựng website quản lý api document sử dựng swagger tool

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.15 MB, 116 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH

ĐỒ ÁN TỐT NGHIỆP
NGÀNH CƠNG NGHỆ THƠNG TIN

TÌM HIỂU SPRING FRAMEWORK & XÂY DỰNG
WEBSITE QUẢN LÝ API DOCUMENT SỬ DỤNG
SWAGGER TOOL

GVHD:TRƯƠNG THỊ NGỌC PHƯỢNG
SVTT:NGUYỄN CHÍ TRUNG
MSSV:15110346
SVTT:TRẦN NGUYỄN THANH NHƯ Ý
MSSV:15110378

SKL 0 0 5 7 7 6

Tp. Hồ Chí Minh, tháng 07/2019

do an


TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
----------

NGUYỄN CHÍ TRUNG - 15110346
TRẦN NGUYỄN THANH NHƯ Ý - 15110378



Đề Tài:

TÌM HIỂU SPRING FRAMEWORK &
XÂY DỰNG WEBSITE QUẢN LÝ
API DOCUMENT SỬ DỤNG SWAGGER TOOL
KHÓA LUẬN TỐT NGHIỆP KỸ SƯ CNTT

GIÁO VIÊN HƯỚNG DẪN
ThS. TRƯƠNG THỊ NGỌC PHƯỢNG

KHÓA 2015 - 2019

do an


TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
----------

NGUYỄN CHÍ TRUNG - 15110346
TRẦN NGUYỄN THANH NHƯ Ý - 15110378
Đề Tài:

TÌM HIỂU SPRING FRAMEWORK &
XÂY DỰNG WEBSITE QUẢN LÝ
API DOCUMENT SỬ DỤNG SWAGGER TOOL
KHÓA LUẬN TỐT NGHIỆP KỸ SƯ CNTT


GIÁO VIÊN HƯỚNG DẪN
ThS. TRƯƠNG THỊ NGỌC PHƯỢNG

KHÓA 2015 - 2019

do an


ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HCM

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

KHOA CÔNG NGHỆ THÔNG TIN

Độc lập – Tự do – Hạnh phúc





PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên Sinh viên: Nguyễn Chí Trung

MSSV: 15110346

Họ và tên Sinh viên: Trần Nguyễn Thanh Như Ý

MSSV: 15110378

Ngành: Cơng nghệ Thơng tin

Tên đề tài: TÌM HIỂU SPRING FRAMEWORK & XÂY DỰNG WEBSITE QUẢN
LÝ API DOCUMENT SỬ DỤNG SWAGGER TOOL
Họ và tên Giáo viên hướng dẫn: ThS. Trương Thị Ngọc Phượng
NHẬN XÉT
1. Về nội dung đề tài & khối lượng thực hiện:
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
2. Ưu điểm:
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
3. Khuyết điểm:
.......................................................................................................................................
.......................................................................................................................................
4. Đề nghị cho bảo vệ hay không?
5. Đánh giá loại:
6. Điểm:
TP.HCM, ngày 15 tháng 07 năm 2019
Giáo viên hướng dẫn

ThS. Trương Thị Ngọc Phượng

do an


ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HCM

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM


KHOA CÔNG NGHỆ THÔNG TIN

Độc lập – Tự do – Hạnh phúc





PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Họ và tên Sinh viên: Nguyễn Chí Trung

MSSV: 15110346

Họ và tên Sinh viên: Trần Nguyễn Thanh Như Ý

MSSV: 15110378

Ngành: Cơng nghệ Thơng tin
Tên đề tài: TÌM HIỂU SPRING FRAMEWORK & XÂY DỰNG WEBSITE QUẢN
LÝ API DOCUMENT SỬ DỤNG SWAGGER TOOL
Họ và tên Giáo viên phản biện: ThS. Lê Thị Minh Châu
NHẬN XÉT
1. Về nội dung đề tài & khối lượng thực hiện:
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
2. Ưu điểm:
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................

3. Khuyết điểm:
.......................................................................................................................................
.......................................................................................................................................
4. Đề nghị cho bảo vệ hay không?
5. Đánh giá loại:
6. Điểm:

TP.HCM, ngày 15 tháng 07 năm 2019
Giáo viên phản biện

ThS. Lê Thị Minh Châu

do an


LỜI CẢM ƠN
Nhóm em xin chân thành cám ơn khoa Công Nghệ Thông Tin, Bộ Môn Công Nghệ
Phần Mềm, trường Đại học Sư Phạm Kỹ Thuật TP. Hồ Chí Minh đã tạo điều kiện thuận
lợi cho chúng em thực hiện đề tài này.
Chúng em cũng xin được gửi lời cảm ơn chân thành nhất đến cô Trương Thị Ngọc
Phượng, người đã tận tình chỉ bảo và hướng dẫn nhóm em thực hiện đề tài này.
Bên cạnh đó, chúng em xin gửi lời cảm ơn đến các thầy cô giảng viên của trường
Đại Học Sư Phạm Kỹ Thuật TP. Hồ Chí Minh nói chung cũng như các thầy cơ giảng
viên khoa Cơng Nghệ Thơng Tin nói riêng, những người đã giảng dạy, tạo điều kiện cho
em tích lũy được những kiến thức quý báu trong những năm học qua.
Dù đã cố gắng hồn thành đề tài khóa luận đúng u cầu, nhưng do thời gian hạn
hẹp và khả năng còn hạn chế nên chắc chắn sẽ khơng tránh khỏi thiếu sót. Chúng em
mong nhận được sự thơng cảm và tận tình chỉ bảo của các thầy cơ và các bạn.
Nhóm em xin chân thành cảm ơn


do an


ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HCM

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

KHOA CÔNG NGHỆ THÔNG TIN

Độc lập – Tự do – Hạnh phúc





ĐỀ CƯƠNG KHÓA LUẬN TỐT NGHIỆP
Họ và tên SV thực hiện 1: Nguyễn Chí Trung

Mã Số SV: 15110346

Họ và tên SV thực hiện 2: Trần Nguyễn Thanh Như Ý

Mã Số SV: 15110378

Thời gian làm khóa luận tốt nghiệp: từ 15/03/2019 đến 15/07/2019
Chuyên ngành: Công Nghệ Phần Mềm
Tên đề tài: TÌM HIỂU SPRING FRAMEWORK & XÂY DỰNG WEBSITE QUẢN
LÝ API DOCUMENT SỬ DỤNG SWAGGER TOOL
Giáo viên hướng dẫn: Ths. Trương Thị Ngọc Phượng
Nhiệm Vụ Của Khóa Luận Tốt Nghiệp:

1. Tìm hiểu về Spring Framework: Spring Boot, Spring Security, Spring Data JPA.
2. Tìm hiểu về Swagger Tool, WebSocket, Thymeleaf, Restful API.
3. Áp dụng những kiến thức về Spring Framework và các kiến thức liên quan để xây
dựng một website quản lý API Document sử dụng Swagger Tool.
Thời gian thực hiện: Bắt đầu từ 15/03/2018 đến 15/07/2019

do an


KẾ HOẠCH THỰC HIỆN

STT
1

Thời gian

Cơng việc

Ghi chú

15/03/2019 đến

- Tìm hiểu các kiến thức về Spring

Phân công công

31/03/2019

Framework: Spring Boot, Spring


việc cho 2 thành

Security, Spring Data JPA.

viên thực hiện

- Tìm hiểu các kiến thức liên quan
Swagger Tool, WebSocket, Thymeleaf,
Restful API.
2

01/04/2019 đến

- Khảo sát, xác định yêu cầu cho ứng

Phân công công

15/04/2019

dụng minh họa.

việc cho 2 thành

- Thiết kế cơ sở dữ liệu.

viên thực hiện

- Thiết kế giao diện cho các màn hình.

Phân cơng cơng


- Thiết kế xử lý.

việc cho 2 thành

16/04/2019 đến
3

16/06/2019 đến
4

viên thực hiện

15/06/2019
- Cài đặt phần mềm theo chức năng.

Phân công công

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

việc cho 2 thành
viên thực hiện

15/07/2019

Chữ ký của SV: Nguyễn Chí Trung
Chữ ký của SV: Trần Nguyễn Thanh Như Ý

TP.HCM, Ngày 15 Tháng 07 năm 2019
TRƯỞNG KHOA CNTT


GIÁO VIÊN HƯỚNG DẪN

(Ký và ghi rõ họ tên)

(Ký và ghi rõ họ tên)

T.S Đinh Công Đoan

ThS. Trương Thị Ngọc Phượng

do an


MỤC LỤC
PHẦN MỞ ĐẦU ............................................................................................................. 1
1. TÍNH CẤP THIẾT CỦA ĐỀ TÀI.........................................................................1
2. MỤC ĐÍCH CỦA ĐỀ TÀI....................................................................................1
3. CÁCH TIẾP CẬN VÀ PHƯƠNG PHÁP NGHIÊN CỨU ...................................2
4. PHÂN TÍCH NHỮNG CƠNG TRÌNH CĨ LIÊN QUAN ...................................2
5. KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC ......................................................................2
PHẦN NỘI DUNG .......................................................................................................... 3
1. CHƯƠNG 1: SPRING FRAMEWORK ............................................................... 3
1.1.

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

1.2.

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


1.3.

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

1.4.

Spring Core .....................................................................................................4

1.5.

Các dự án của Spring ......................................................................................7

2. CHƯƠNG 2: RESTFUL API ..............................................................................14
2.1.

RESTful API là gì? .......................................................................................14

2.2.

Cấu trúc REST .............................................................................................. 14

2.3.

Ràng buộc REST ..........................................................................................14

2.4.

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


2.5.

Tại sao chọn RESTful API ...........................................................................18

2.6.

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

3. CHƯƠNG 3: THYMELEAF .................................................................................19
3.1. Thymeleaf là gì? ............................................................................................. 19
3.2. Thymeleaf so sánh với JSP .............................................................................20
3.3. Tại sao chọn Thymeleaf..................................................................................20
3.4. Thymeleaf Fragment .......................................................................................20
3.5. Spring Security với Thymeleaf .......................................................................21
4. CHƯƠNG 4: SWAGGER TOOL ..........................................................................23
4.1.

OpenAPI là gì? ............................................................................................. 23

4.2.

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

4.3.

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

5. CHƯƠNG 5: WEBSOCKET .................................................................................27

do an



5.1.

WebSocket là gì? ..........................................................................................27

5.2.

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

5.3.

Ưu điểm ........................................................................................................28

5.4.

Nhược điểm ..................................................................................................29

6. CHƯƠNG 6: ỨNG DỤNG ....................................................................................30
6.1. Khảo sát hiện trạng .........................................................................................30
6.2. Xác định yêu cầu ............................................................................................ 32
6.3. Thiết kế hệ thống ............................................................................................ 55
6.4. Thiết kế dữ liệu ............................................................................................... 67
6.5. Thiết kế giao diện ...........................................................................................74
6.6. Kiểm thử phần mềm .......................................................................................93
KẾT LUẬN ................................................................................................................... 96
1. NHỮNG KẾT QUẢ ĐẠT ĐƯỢC ......................................................................96
2. NHỮNG KHÓ KHĂN KHI THỰC HIỆN ĐỀ TÀI ...........................................96
3. ƯU ĐIỂM ............................................................................................................98
4. HẠN CHẾ ...........................................................................................................98

5. KINH NGHIỆM ĐẠT ĐƯỢC ............................................................................98
6. HƯỚNG PHÁT TRIỂN TRONG TƯƠNG LAI ................................................99
TÀI LIỆU THAM KHẢO ........................................................................................... 100

do an


DANH MỤC BẢNG BIỂU
Bảng 1. Bảng khảo sát hiện trạng ..................................................................................30
Bảng 2. Nhận diện tác nhân và các chức năng trong sơ đồ use case............................. 32
Bảng 3. Phân quyền sử dụng chức năng cho các role trong dự án ................................ 33
Bảng 4. Đặt tả use case Login .......................................................................................34
Bảng 5. Đặt tả use case Register ...................................................................................35
Bảng 6. Đặt tả use case Reset Password........................................................................37
Bảng 7. Đặt tả use case Change Password ....................................................................38
Bảng 8. Đặt tả use case Update Profile .........................................................................39
Bảng 9. Đặt tả use case Change 2FA ............................................................................40
Bảng 10. Đặt tả use case Create API Document ...........................................................41
Bảng 11. Đặt tả use case Create Project ........................................................................42
Bảng 12. Đặt tả use case Edit Project ............................................................................42
Bảng 13. Đặt tả use case Delete Project ........................................................................43
Bảng 14. Đặt tả use case Search Project........................................................................44
Bảng 15. Đặt tả use case Upload file JSON or YAML .................................................45
Bảng 16. Đặt tả use case View API Document ............................................................. 45
Bảng 17. Đặt tả use case Edit API Document ............................................................... 46
Bảng 18. Đặt tả use case View Activity ........................................................................47
Bảng 19. Đặt tả use case Comment about API Document ............................................47
Bảng 20. Đặt tả use case Add Contributor ....................................................................48
Bảng 21. Đặt tả use case Edit Contributor ....................................................................49
Bảng 22. Đặt tả use case Delete Contributor .................................................................50

Bảng 23. Đặt tả use case Update User ...........................................................................50
Bảng 24. Đặt tả use case Delete User ............................................................................51
Bảng 25. Đặt tả use case Search User ...........................................................................52
Bảng 26. Đặt tả use case Revert Version File ............................................................... 53
Bảng 27. Đặt tả use case View notifications .................................................................53
Bảng 28. Table user_account ........................................................................................68
Bảng 29. Table role .......................................................................................................68
Bảng 30. Table project ..................................................................................................69
Bảng 31. Table file_upload ...........................................................................................69
Bảng 32. Table verificationtoken ..................................................................................70
Bảng 33. Table passwordresettoken ..............................................................................70
Bảng 34 Table comment ................................................................................................ 71
Bảng 35. Table auth_control .........................................................................................71
Bảng 36. Table auth_ operation.....................................................................................73
Bảng 37. Table activity_code ........................................................................................73
Bảng 38. Table activity..................................................................................................73
Bảng 39. Danh sách xử lý trang login ...........................................................................74
Bảng 40. Danh sách xử lý trang register .......................................................................75

do an


Bảng 41. Danh sách xử lý trang reset password ............................................................ 76
Bảng 42. Danh sách xử lý trang change password ........................................................76
Bảng 43. Danh sách xử lý trang update profile ............................................................. 77
Bảng 44. Danh sách xử lý trang change 2FA ................................................................ 79
Bảng 45. Danh sách xử lý trang create API Documment .............................................80
Bảng 46. Danh sách xử lý trang create project .............................................................. 81
Bảng 47. Danh sách xử lý trang edit project .................................................................81
Bảng 48. Danh sách xử lý trang delete project .............................................................. 83

Bảng 49. Danh sách xử lý trang search project ............................................................. 84
Bảng 50. Danh sách xử lý trang upload file JSON or YAML ......................................85
Bảng 51. Danh sách xử lý trang view API Document ..................................................86
Bảng 52. Danh sách xử lý trang edit API Document ....................................................87
Bảng 53. Danh sách xử lý trang view activity............................................................... 87
Bảng 54. Danh sách xử lý trang comment about API Document .................................88
Bảng 55. Danh sách xử lý trang manage contributor ....................................................89
Bảng 56. Danh sách xử lý trang revert version file .......................................................90
Bảng 57. Danh sách xử lý trang view nofitication ........................................................91
Bảng 58. Danh sách xử lý trang manage user ............................................................... 92
Bảng 59. Test case – Login & Registration ...................................................................93
Bảng 60. Test case – Màn hình My Project ..................................................................94
Bảng 61. Khó khăn cơng nghệ trong dự án ...................................................................96
Bảng 62. Khó khăn quy trình nghiệp vụ trong dự án ....................................................97
Bảng 63. Khó khăn con người trong dự án ...................................................................97

do an


DANH MỤC HÌNH ẢNH
Hình 1. Spring Framework Runtime ...............................................................................5
Hình 2. Aspect Oriented Programming ...........................................................................6
Hình 3. Sơ lược các thành phần trong Spring Framework ..............................................8
Hình 4. Minh họa Spring Boot ........................................................................................9
Hình 5. Kiến trúc JPA ...................................................................................................10
Hình 6. Kiến trúc Hibernate ..........................................................................................11
Hình 7. Client và Server tương tác thông qua RESTful API ........................................15
Hình 8. Layered system (phân lớp hệ thống) ................................................................ 16
Hình 9. Ví dụ Thymeleaf ............................................................................................... 19
Hình 10. Ví dụ Thymleaf Fragment ..............................................................................21

Hình 11. Dependencies Thymeleaf ...............................................................................21
Hình 12. Spring Security Configuration ........................................................................21
Hình 13. Spring Dialert .................................................................................................22
Hình 14. Servers Swagger ............................................................................................. 25
Hình 15. Paths Swagger ................................................................................................ 25
Hình 16. Schema Swagger ............................................................................................ 26
Hình 17. Client request – Server response ....................................................................28
Hình 18. Giao thức bắt tay của WebSocket ..................................................................28
Hình 19. Sơ đồ use case.................................................................................................33
Hình 20. Sơ đồ sequence diagram login ........................................................................55
Hình 21. Sơ đồ sequence diagram register ....................................................................56
Hình 22. Sơ đồ sequence diagram upload file JSON and YAML.................................57
Hình 23. Sơ đồ sequence diagram display member list ................................................58
Hình 24. Sơ đồ sequence diagram create project ..........................................................59
Hình 25. Sơ đồ sequence diagram update project .........................................................60
Hình 26. Sơ đồ sequence diagram delete project ..........................................................61
Hình 27. Sơ đồ sequence diagram display project list ..................................................62
Hình 28. Sơ đồ sequence diagram access project detail ................................................62
Hình 29. Sơ đồ sequence diagram view activity ...........................................................63
Hình 30. Sơ đồ sequence diagram display contributor list ...........................................63
Hình 31. Sơ đồ sequence diagram manage contributor .................................................64
Hình 32. Sơ đồ sequence diagram comment about API Document .............................. 65
Hình 33. Sơ đồ sequence diagram revert version file ...................................................66
Hình 34. Sơ đồ sequence diagram view nofications .....................................................66
Hình 35. Mơ hình cơ sở dữ liệu .....................................................................................67
Hình 36. Giao diện trang login ......................................................................................74
Hình 37. Giao diện trang register ..................................................................................75
Hình 38. Giao diện trang reset password.......................................................................75
Hình 39. Giao diện trang change password ...................................................................76
Hình 40. Giao diện trang update profile ........................................................................77


do an


Hình 41. Giao diện trang change 2FA ...........................................................................78
Hình 42. Giao diện trang create API Documment ........................................................80
Hình 43. Giao diện trang create project.........................................................................81
Hình 44. Giao diện trang edit project ............................................................................81
Hình 45. Giao diện trang delete project.........................................................................82
Hình 46. Giao diện trang search project ........................................................................84
Hình 47. Giao diện trang upload file JSON or YAML .................................................85
Hình 48. Giao diện trang view API Document ............................................................. 86
Hình 49. Giao diện trang edit API Document ............................................................... 86
Hình 50. Giao diện trang view activity .........................................................................87
Hình 51. Giao diện trang comment about API Document ............................................88
Hình 52. Giao diện trang manage contributor ............................................................... 89
Hình 53. Giao diện trang revert version file ..................................................................90
Hình 54. Giao diện trang view nofitication ...................................................................91
Hình 55. Giao diện trang manage user ..........................................................................92
Hình 56. Thống kê kết quả test màn hình đăng nhập, đăng ký .....................................95
Hình 57. Thống kê kết quả test màn hình quản lý dự án ...............................................95

do an


DANH MỤC CÁC TỪ VIẾT TẮT
API – Application Programming Interface
BA – Business Analyst
EJB – Enterprise JavaBeans
JDBC – Java Dabase Connectivity

JMS – Java Message Service
JPA – Java Persistence API
JTA – Java Transaction API
JDK – Java Development Kit
JavaEE – Java Enterprise Edition
JVM – Java Virtual Machine
ORM – Object Relational Mapping

do an


PHẦN MỞ ĐẦU
1. TÍNH CẤP THIẾT CỦA ĐỀ TÀI
Ngày nay, Spring Framework đang được hàng triệu lập trình viên ưu thích, sử dụng.
Bởi lẽ Spring Framework giúp tạo các ứng dụng có hiệu năng cao, dễ kiểm thử, sử dụng
lại code. 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, là một framework giúp các nhà phát triển xây dựng những hệ thống và ứng
dụng chạy trên JVM một cách đơn giản, tiện gọn, nhanh chóng và mềm dẻo. Vì vậy,
việc tìm hiểu các kiến thức và áp dụng lập trình các phần mềm sử dụng Spring
Framework rất cần thiết đối với một lập trình viên.
Hiện nay, trong các dự án của các công ty phần mềm, việc lấy yêu cầu từ khách hàng
và tạo API Document để làm rõ các yêu cầu của khách hàng, trách sai sót, hiểu lầm giữa
các bên, dẫn đến dự án khơng hồn thành theo tiến độ. Và quan trọng là việc truyền tải
các yêu cầu của khách hàng chính xác, đúng đắn đến đội ngũ lập trình viên và đội ngũ
kiểm thử phần mềm của dự án. Việc thiết kế API Document là việc rất cần thiết với mỗi
dự án. Để phục vụ công việc này dễ dàng, hệ thống hơn thì cần thiết kế, xây dựng một
website hỗ trợ viết và quản lý các API Document này. Website cần hỗ trợ người dùng
trong việc trực quan hóa bằng giao diện để dễ hình dung về nghiệp vụ của API đang cần
viết. Thêm vào đó, website là nơi mà đội ngũ lập trình viên, BA và độ ngũ kiểm thử có
thể tham gia đóng góp và trao đổi những điểm chưa rõ ràng về yêu cầu, giúp thống nhất

hơn giữa các bên liên quan trong dự án để dự án hoàn thành và đạt yêu cầu của khách
hàng.
Bên cạnh đó, nếu một bên thứ ba muốn sử dụng API của bạn để phát triển và tích hợp
hệ thống phần mềm của bạn với ứng dụng của họ. Khi đó, website sẽ là nơi họ có thể
truy cập vào với quyền hạn cho phép để có thể xem API Document, là nơi mà các lập
trình viên thứ ba có thể tham khảo, tìm hiểu và giúp giảm thiểu thời gian trao đổi các
thắc mắc của họ về API mà họ muốn sử dụng.
2. MỤC ĐÍCH CỦA ĐỀ TÀI
- Tìm hiểu về Spring Framework: Spring Boot, Spring Security, Spring Data JPA.
- Tìm hiểu về Swagger Tool, WebSocket, Thymeleaf, Restful API.
- Áp dụng những kiến thức về Spring Framework và các kiến thức liên quan để xây
dựng một website quản lý API Document sử dụng Swagger Tool.
1

do an


3. CÁCH TIẾP CẬN VÀ PHƯƠNG PHÁP NGHIÊN CỨU
- Đối tượng nghiên cứu
+ Spring Framework: Spring Boot, Spring Security, Spring Data JPA.
+ Swagger Tool, WebSocket, Thymeleaf, Restful API.
- Phạm vi nghiên cứu
Với khóa luận tốt nghiệp này, nhóm em sẽ tập trung tìm hiểu và thực hiện các
nội dung sau:
+ Giới thiệu sơ lược và trình bày những nội dung cơ bản, những điểm mạnh, điểm
yếu hay lợi ích mang lại cho nhà phát triển phần mềm của Spring Framework, cụ
thể là trình bày 3 module: Spring Boot, Spring Security, Spring Data JPA.
+ Tìm hiểu các nội dung, kiến thức về Swagger Tool, WebSocket, Thymeleaf,
Restful API.
+ Sau khi tìm hiểu, nhóm sẽ tập trung vận dụng những kiến thức đã tìm hiểu, đặt

biệt là Spring Framework để xây dựng một website quản lý API Document sử dụng
Swagger Tool.
4. PHÂN TÍCH NHỮNG CƠNG TRÌNH CĨ LIÊN QUAN
Hiện nay số lượng ứng dụng quản lý API Document trên thị trường cịn ít, có thể kể
tên một số ứng dụng như SwaggerHub, StopLight,… Các ứng dụng này có ưu điểm là
giao diện đẹp, nhiều tính năng hỗ trợ người dùng nhưng nhược điểm là đa số hướng đến
cá nhân, để bảo mật thì phải tốn chi phí và khá tốn thời gian để học cách sử dụng.
5. KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC
- Hiểu rõ kiến thức về Spring Framework: Spring Boot, Spring Security, Spring Data
JPA.
- Hiểu rõ kiến thức về Swagger Tool, WebSocket, Thymeleaf, Restful API.
- Xây dựng thành công một website quản lý API Document sử dụng Swagger Tool với
việc áp dụng những kiến thức đã tìm hiểu.

2

do an


PHẦN NỘI DUNG
1. CHƯƠNG 1: SPRING FRAMEWORK
1.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 khn mẫu (template) và các khía cạnh.
1.2. Đặ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 tồ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).
3

do an


1.3. Ư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ì 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.
1.4. 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.4.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.
1.4.2. Dependency Injection (DI)
1.4.2.1. 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ì.
1.4.2.2. Ư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ế.
1.4.3. Aspect Oriented Programming
1.4.3.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.

Hình 2. Aspect Oriented Programming
6

do an


1.4.3.2. Ư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.

1.4.4. 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.
1.4.5. 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.
1.4.6. 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.
1.5.

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 ngồ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.5.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ó cung cấp rất nhiều các plugin để phát triển và test các ứng dụng Spring Boot
nhanh chóng sử dụng các công cụ Build như Maven và Gradle.
9


do an


 Nó cung cấp nhiều plugin để làm việc với các cơ sở dữ liệu nhúng (embedded
database) và các cơ sở dữ liệu lưu trữ trên bộ nhớ (in-memory Databases) một
cách dễ dàng.
1.5.2. Spring Data JPA
1.5.2.1. JPA là gì?
JPA (Java Persistence API) là một giao diện lập trình ứng dụng Java, nó mơ tả cách
quản lý các mối quan hệ dữ liệu trong ứng dụng sử dụng Java Platform. JPA cung cấp
một mơ hình POJO persistence cho phép ánh xạ các table/các mối quan hệ giữa các table
trong database sang các class/mối quan hệ giữa các object.
Một số khái niệm trong JPA:
Entity: là các đối tượng thể hiện tương ứng 1 table trong cơ sở dữ liệu. Khi lập trình,
entity thường là các class POJO đơn giản, chỉ gồm các method getter, setter.
EntityManager: là một giao diện (interface) cung cấp các API cho việc tương tác với
các Entity như persist (lưu một đối tượng mới), merge (cập nhật một đối tượng),
remove (xóa 1 đối tượng).
EntityManagerFactory: được dùng để tạo ra một thể hiện của EntityManager.
Kiến trúc của JPA:

Hình 5. Kiến trúc JPA

10

do an


×