CHƯƠNG 1: CƠ SỞ LÝ LUẬN 1.1 Tổng quan về đề tài Sản phẩm (web Khoa CNTT) thể hiện rõ nội dung trong chương trình đào tạo, kiến thức và kỹ năng đạt được trong quá trình học tập có thể xây dựng một sản phẩm như web Khoa CNTT. Web Khoa CNTT cung cấp tính năng tương tác và mở rộng hệ thống, để từ đó GV và SV Khoa CNTT có thể phát triển thêm các tiện ích mở rộng tích hợp vào web Khoa CNTT. Bên cạnh đó, web được thiết kế dưới dạng RESTful API, GV và SV theo hướng di động có thể phát triển các ứng dụng trên nền tảng này. Chọn lựa nền tảng để phát triển web Khoa CNTT được xem xét trên nhiều yếu tố.
Bên cạnh web Khoa CNTT là trang đăng tin truyền thống, thì web cũng cung cấp các tiện ích mở rộng và tích hợp vào web. Để từ đó tạo ra một hệ sinh thái với nhiều tiện ích trên web như: đăng nhập bằng Google, Facebook, GitHub, … hay đăng tin tuyển dụng, việc làm part- time, … Từ đó SV có được trải nghiệm dự án thực tế, là điểm nhấn trong CV khi SV đăng ký tuyển dụng. Đào tạo bám sát thực tiễn là xu hướng cũng là yêu cầu mà lãnh đạo Nhà trường xuyên suốt định hướng trong thời gian vừa qua. Bên cạnh việc đưa Giảng viên và Sinh viên ra doanh nghiệp để thực tập, trong chương trình đào tạo cũng cần phải thể hiện các nội dung kiến thức mà doanh nghiệp đang cần.
Chính vì vậy, thiết kế hệ thống hỗ trợ giảng dạy và học tập cho Khoa CNTT là một yêu cầu thiết yếu cần phải thực hiện. Đó cũng là mục tiêu chính của đề tài “Phát triển thư viện hỗ trợ giảng dạy và học tập cho sinh viên Khoa Công nghệ thông tin Trường Cao đẳng Công nghệ Thủ Đức”.2 Giới thiệu về hệ sinh thái phần mềm Hướng phát triển các ứng dụng web trên nền tảng mã nguồn mở là một trong những hướng mà Khoa CNTT đang đào tạo. Trong đề tài này, tác giả tìm hiểu chuyên về các nền tảng phát triển web theo định hướng trong chương trình đào tạo. Để từ đó, cho thấy rằng SV tham gia học tập có thể làm được các ứng dụng thực tế, cũng như trong quá trình học tập sinh viên có cơ hội tương tác và trải nghiệm với ứng dụng thực tế.
Hệ sinh thái (Ecosystem) là khái niệm ám chỉ một hệ thống gồm nhiều đối tượng, thiết bị, dịch vụ, … tương tác chặt chẽ với nhau. Để từ đó có được một môi trường tốt và đa dạng, đáp ứng tối đa nhu cầu người dùng thông qua nhiều tiện ích được tích hợp. Ví dụ thực tế về 3 hãng điện thoại lớn: Samsung, Apple, Nokia. Người dùng không chỉ sử dụng điện thoại để nghe-gọi-nhận-gửi mà người dùng còn muốn vui chơi giải trí trên điện thoại, muốn phát triển thêm các ứng dụng, ….
Nokia đã không đáp ứng được các yêu cầu đó nên đã mất thị trường người tiêu dùng điện thoại vào tay của Samsung, Apple. Phát triển web Khoa CNTT trên nền tảng Laravel, một nền tảng có hệ sinh thái tốt hiện nay với rất nhiều module hỗ trợ từ cộng đồng mã nguồn mở như: GitHub (https://github.com), Packalyst (https://packalyst.com), Packagist (https://packagist.org), … với hàng nghìn module đã được hiện thực. Đặc biệt, GitHub hiện nay đã thuộc về Microsoft nên được hỗ trợ rất nhiều dịch vụ trong quá trình phát triển phần mềm một cách chuyên nghiệp.3 Xác định nền tảng phát triển web Chương trình đào tạo Khoa CNTT được thiết kế dựa trên nhu cầu tuyển dụng từ các công ty thuộc khu vực phía Nam như TP. Hồ Chí Minh, Bình Dương, Biên Hòa, … Năm 2016 Khoa CNTT đã phát triển ứng dụng thu thập việc làm để thống kê yêu cầu tuyển dụng (do chính tác giả xây dựng).
Từ kết quả thu thập, thống kê được các công nghệ kỹ thuật cần thiết cần đào tạo trong Khoa CNTT. Bên cạnh đó, xu hướng phát triển công nghệ cũng được cộng đồng đánh giá trên Internet. Các trang mạng xã hội về công nghệ nổi bật như: GitHub, Stack Overflow, … là nơi đưa ra nhiều quan điểm về công nghệ. 2 Thông qua dữ liệu có được từ các nguồn trên, nhận thấy rằng Laravel là nền tảng phát triển web phù hợp nhất đối với Khoa CNTT hiện nay.
Xây dựng web Khoa CNTT với mong muốn đây không chỉ là trang web tin tức mà còn là nơi GV/SV có thể mở rộng các tiện ích để phát triển các sản phẩm dựa trên nền tảng này. 3 CHƯƠNG 2: PHÂN TÍCH KỸ THUẬT 2.1 Tìm hiểu về RESTful API RESTful API là một khái niệm phức hợp, để hiểu rõ hơn về khái niệm này. Cần tìm hiểu về các khái niệm liên quan. API (Application Programming Interface) Là một tập các quy tắc và cơ chế mà theo đó, ứng dụng hay thành phần này tương tác với ứng dụng hay thành phần khác.
Kiểu dữ liệu JSON hay XML là những kiểu dữ liệu phổ biến mà API gửi về. Các ứng dụng sử dụng kiến trúc REST được gọi là RESTful. REST sử dụng phương thức HTTP để giao tiếp giữa các máy. Thay vì, với một yêu cầu từ người dùng tương ứng với một URL, REST sẽ gửi yêu cầu HTTP với GET, POST, DELETE, PUT, PATCH đến một URL để xử lý yêu cầu phù hợp với người dùng.
RESTful API Là một tiêu chuẩn trong việc thiết kế API cho các ứng dụng web.1 - Thiết kế web với RESTful API 4 Hình mô tả cách hoạt động của RESTful API Hình 2.2 - Mô tả hoạt động của RESTful API (Nguồn: restful-api-design.io) REST hoạt động dựa vào giao thức HTTP. Các hoạt động cơ bản nêu trên sẽ sử dụng những phương thức HTTP riêng. ÷ GET (SELECT): Trả về một Resource hoặc một danh sách Resource ÷ POST (CREATE): Tạo mới một Resource ÷ PUT (UPDATE): Cập nhật thông tin cho Resource ÷ DELETE (DELETE): Xoá một Resource 2.2 Sự cần thiết Mock API Kiến trúc phần mềm (software architecture) là tổ chức hệ thống bao gồm rất nhiều các thành phần như web server, cơ sở dữ liệu, bộ nhớ và các lớp layer thực hiện việc giao tiếp. Chúng liên kết với nhau hoặc với một môi trường nhất định để giải quyết vấn đề của phát triển phần mềm.
Hiện nay có 2 mô hình phổ biến là kiến trúc khối (monolith architecture) và kiến trúc microservice (microservice architecture) 5 Monolith architecture Hình 2.3 - Kiến trúc monolith Monolith có xu hướng phù hợp với những dự án có quy mô nhỏ, có những ưu điểm với cách thiết kế này: ÷ Việc phát triển hệ thống được nhanh chóng, dễ dàng trong việc tìm hiểu để bảo trì Tuy nhiên hạn chế mà mô hình này đem lại cũng khá lớn: ÷ Khả năng mở rộng khi yêu cầu tích hợp thêm tính năng mới gặp hạn chế ÷ Tốn chi phí khi hạn chế việc tái sử dụng source code ÷ Với nhân sự mới, khó biết bắt đầu tiếp cận từ đâu trong 1 khối lớn tích hợp ÷ Bất kỳ sự thay đổi nhỏ nào trong dự án cũng đều phải build lại, kiểm thử lại toàn bộ dự án Microservice architecture Ngoài mô hình monolithic kể trên, hiện nay có 1 kiến trúc (architecture) khác đang nổi bật hiện nay, đó là microservice. Microservice đề cập đến quá trình phát triển theo hướng dịch vụ, chia hệ thống ra thành các dịch vụ. Mỗi dịch vụ này đều có một xử lý logic riêng, một trách nhiệm riêng và có thể được phát triển, vận hành riêng biệt. Một số thuộc tính của mô hình microservice 6 ÷ Mỗi dịch vụ sẽ xử lý một nghiệp vụ cụ thể nào đó (single responsibility) ÷ Việc phát triển và mở rộng một dịch vụ là hoàn toàn độc lập ÷ Tùy vào xử lý của từng dịch vụ, chọn nền tảng phát triển tương ứng.
Điều này giúp tối ưu hóa nền tảng cho xử lý logic cụ thể nào đó ÷ Giao tiếp giữa các service thông qua API Rõ ràng toàn bộ ý tưởng của mô hình microservice chia nhỏ yêu cầu để xử lý, nhờ đó có thể giảm tải sự phức tạp của hệ thống, làm cho việc quản lí trở nên nhanh chóng và dễ dàng, phản ánh sự thay đổi chính xác. Một số thuận lợi của mô hình microservice ÷ Mỗi microservice sẽ được chia nhỏ để tập trung vào một xử lý nghiệp vụ nào đó. ÷ Microservice được thiết kế rời rạc giữa các service, dễ dàng trong quá trình phát triển, vận hành, bảo trì và mở rộng. Mỗi service có dung lượng lưu trữ riêng và có thể có cơ sở dữ liệu riêng ÷ Microservices có thể phát triển với nhiều ngôn ngữ khác nhau, do đặc thù riêng lẻ nên tối ưu trong việc chọn lựa nền tảng phù hợp để phát triển service.
÷ Thành viên mới dễ dàng và nhanh chóng tham gia vào phát triển dự án. Một số nhược điểm của mô hình microservice ÷ Cần nhiều kiến thức để phát triển hệ thống ÷ Hệ thống phức tạp và khó quản lý. Thậm chí là tốn chi phí khi triển khai cho nhiều nền tảng cho các service. Khi phát triển giao diện hiển thị đối với người dùng cần sử dụng các API, trong khi việc phát triển các API chưa hoàn thành dẫn đến việc hiển thị giao diện chưa thể thiết kế chính xác.
Hoặc dịch vụ này gọi đến dịch vụ khác thông qua API, trong khi API được gọi chưa hoàn thành. Hai điều này dẫn đến sự phụ thuộc trong quá trình phát triển phần mềm.4 - Gọi API từ dịch vụ khác Nhằm giảm sự phụ thuộc về sử dụng API trong quá trình phát triển phần mềm, Mock API là một khái niệm để dựng lên các API “ảo”. Những nơi sử dụng có thể sử dụng API “ảo” này để xử lý công việc tiếp theo.5 - Gọi API từ Mock API Do vậy sự cần thiết có API mẫu để xử lý các công việc là điều cần thiết. Có nhiều cách để tạo ra các API mẫu như cài đặt các thư viện, hay tự phát triển, hay sử dụng một dịch vụ sẵn có trên internet.
Trong các phần sau sẽ mô tả một dịch vụ có sẵn trên internet để từ đó thấy được sự cần thiết của một hệ thống Mock API. Trên internet có hẳn 1 dịch vụ Mock API (www.io) cung cấp các API mẫu. Sau khi đăng ký là thành viên của Mock API, cấu hình các dữ liệu mẫu để tạo ra các API mẫu.6 - Màn hình ứng dụng mockapi.7 - Khởi tạo dự án trên mockapi.io Đây là tài khoản mới đăng nhập lần đầu nên chưa có một cái API nào cả, bây giờ ta sẽ bắt đầu giả lập một API mới.8 - Tạo mới project Chọn dấu cộng ở trên bên trái gần chữ Projects để tạo dự án API mẫu.9 - Thông tin project Sau đó sẽ hiện ra 1 hộp thoại để điền thông tin tạo project. ÷ Tạo đường dẫn đến API sau khi tạo project, ví dụ: https://***.