Đặt vấn đề Trong thời đại bùng nổ công nghệ thông tin và cách mạng công nghiệp 4.0, cụ thể là Internet of Things, mọi vật đều được kết nối qua internet. Vai trò của internet là cực kì quan trọng đối với con người. Một trong những lợi ích cơ bản nhất của internet là giúp con người truy cập thông tin một cách dễ dàng nhất. Hiện nay, nhu cầu của người dùng internet là có thể có được những thông tin về một vấn đề cần thiết hoặc kết nối với nhau một cách dễ dàng, thuận tiện thông qua những website hoặc ứng dụng di động.
Từ đó, những nhà phát triển phần mềm ứng dụng cần phải nắm bắt được xu thế và tạo ra những sản phẩm đúng với mong muốn của người dùng. Hiện nay, khi người đi du lịch có thể dễ dàng tìm kiếm địa chỉ khách sạn qua các website và ứng dụng của nhiều nhà cung cấp như traveloka, trivago, booking.com, tripadvisor… Những sản phẩm trên đều là những sản phẩm có chất lượng tốt và được sử dụng rộng rãi, nhưng các sản phẩm đều hướng đến người dùng có nhu cầu ở khách sạn. Đối với sinh viên hay những người có thu nhập trung bình thì việc thuê khách sạn để ở lại vài ngày là một việc khá xa xỉ, nên họ thường có xu hướng tìm thuê các phòng trọ ở nơi mình đặt chân tới. Nhưng không phải ai cũng may mắn tìm được nhà rẻ, đặc biệt với những người du lịch nhiều nơi một lúc, họ thường đi đến những địa điểm nổi tiếng mà chưa đặt phòng hoặc tìm chỗ thuê phòng trọ trước, nên lúc tới nơi khá vất vả trong việc tìm được 1 chỗ ở ưng ý.
Xuất phát từ yêu cầu đó, em và các bạn trong nhóm đã chọn đề tài "Xây dựng dịch vụ tìm nhà trọ" để giúp những người như vậy dễ dàng tìm được chỗ ở ưng ý trong thời gian du lịch. 13 | P a g e download by : skknchat@gmail. Kịch bản hoạt động Hình 1-1. Kịch bản hoạt động của hệ thống 1.1 Quy mô Dữ liệu nhà trọ: Dữ liệu nhà trọ được lấy từ trang trivago Người dùng có thể xem tin cho thuê nhà trọ và đăng tin thuê nhà.
Phạm vi địa lý: Quốc gia Việt Nam. Thanh toán: Có thể có.2 Người sử dụng Người muốn thuê nhà trọ, khách sạn. Người muốn cho thuê nhà trọ, khách sạn.3 Tìm kiếm Tìm kiếm theo tên nhà trọ, khách sạn. Tìm kiếm theo vị trí hiện tại.
Tìm kiếm theo tiêu chí lọc, sắp xếp: theo giá, theo điểm đánh giá … 14 | P a g e download by : skknchat@gmail. Phân công công việc Đồ án này được hoàn thành bởi một nhóm gồm 2 thành viên, trong đó có em, thành viên còn lại tên là Trần Quang Huy, lớp ĐTTT03 – k58. Sau đây là bảng phân công công việc của nhóm: Person ST Task group Task name In T Charge Lập nhóm, đề xuất ý tưởng và 1 Cả nhóm tổng hợp các đề tài 2 Đánh giá, lựa chọn đề tài Cả nhóm Lập kế 3 hoạch Xác định quy mô dự án Huy Xây dựng và tạo bảng kế 4 Tú hoạch 5 Phân công công việc Tú Phân tích các yêu cầu chức Cả nhóm 6 năng, phi chức năng Xây dựng kịch bản sử dụng 7 Tú (use case) 8 Đặc tả các use case Tú 9 Thiết kế CRC cards Huy Xây dựng biểu đồ lớp (Class 10 diagram) Tú Phân tích Xây dựng biểu đồ hoạt động 11 (Activity diagram) Huy 12 Xây dựng biểu đồ tuần tự Huy (Sequence diagram) Xây dựng mô hình thực thể 13 và liên kết (Entity Relationship Huy Model) Thiết kế sơ đồ khối của hệ 14 Huy thống Thiết kế 15 Thiết kế cơ sở dữ liệu Tú 16 Thiết kế giao diện người dùng Cả nhóm 17 Crawl dữ liệu Tú 18 Xây dựng website backend Tú Triển khai 19 Xây dựng webservice Tú 20 Xây dựng ứng dụng android Huy 15 | P a g e download by : skknchat@gmail.com Tóm tắt chương: Chương này đã giới thiệu sơ qua về đề tài, quy mô của đề tài và phân công công việc giữa các thành viên trong nhóm. 16 | P a g e download by : skknchat@gmail.com CHƯƠNG 2.
CƠ SỞ LÝ THUYẾT Sau đây là một số công nghệ, công cụ được sử dụng trong hệ thống. Hệ quản trị cơ sở dữ liệu MySQL Hình 2-1. Hệ quản trị cơ sở dữ liệu MySQL Đa số các ứng dụng ngày nay đều phải thao tác tới cơ sở dữ liệu – nơi lưu trữ toàn bộ dữ liệu của hệ thống. Có nhiều cách lưu trữ dữ liệu khác nhau, trong đó có cách lưu theo dạng các bảng quan hệ.
MySQL là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở lớn nhất trên thế giới, sử dụng ngôn ngữ truy vấn có cấu trúc (SQL). Lý do khiến MySQL rất phổ biến là bởi vì: tốc độ truy vấn nhanh, ổn định, dễ sử dụng, tính bảo mật cao, có tính khả chuyển, nhẹ, dễ dàng cài đặt, hoạt động trên nhiều hệ điều hành, được hỗ trợ bởi nhiều ngôn ngữ lập trình và cung cấp một hệ thống lớn các hàm tiện ích rất mạnh [1]. Spring Boot và Spring Security Hình 2-2. Framework Spring boot 17 | P a g e download by : skknchat@gmail.com Spring là một framework mã nguồn mở rất phổ biến để xây dựng các ứng dụng doanh nghiệp viết bằng ngôn ngữ Java.
Spring Framework là một tập hợp của nhiều dự án con, chẳng hạn như Spring MVC, Spring Boot, Spring Data, Spring Clound, Spring Security… Spring Boot là điểm bắt đầu để xây dựng các ứng dụng dựa trên Spring. Spring boot được thiết kế để giúp lập trình viên có thể xây dựng và chạy ứng dụng nhanh nhất có thể, với việc tối thiểu hóa các cấu hình [2]. Spring Security tập trung vào việc xác thực và ủy quyền trong các ứng dụng viết bằng ngôn ngữ Java. Spring Security giúp bảo vệ ứng dụng khỏi các tấn công như: session fixation, clickjacking, cross site request forgery… [3] 2.
GraphQL Được Facebook giới thiệu cùng với Relay tại React.js Conf 2015, GraphQL là một ngôn ngữ truy vấn dữ liệu được tạo ra để miêu tả các phụ thuộc dữ liệu phức tạp, lồng nhau của các ứng dụng hiện đại [4]. GraphQL ra đời để thay thế cho RESTful API bởi sự hiệu quả, mạnh mẽ và linh hoạt hơn. Trước đây, khi client muốn lấy dữ liệu từ phía server, cần phải thông qua một webservice. REST là một loại web service rất phổ biến, tuy nhiên việc trả dữ liệu về cho client lại quá 18 | P a g e download by : skknchat@gmail.com cồng kềnh hoặc quá nhiều end-point, khiến cho việc thiết kế rất phức tạp.
GraphQL ra đời để xóa bỏ nhược điểm này. Nếu như trước đây, client chỉ muốn lấy một vài giá trị của một đối tượng nào đó từ phía server, thì REST vẫn trả về tất cả các dữ liệu liên quan đến đối tượng đó cho client, và client chỉ lấy những thứ mình cần, còn lại thì bỏ đi! Như vậy việc truyền tải nhiều thông tin dư thừa như vậy rõ rảng không hiệu quả chút nào. GraphQL thì khác phục nhược điểm này bằng cách chỉ trả về cho phía client đúng dữ liệu theo định dạng mà client đã gửi tới, giúp việc truyền tải nhanh hơn và không lãng phý. Sau đây là 1 số cú pháp viết câu lệnh truy vấn trong GraphQL: 2.
Query Hoạt động truy vấn trong GraphQL có cú pháp như sau [5]: query { object (argument:”arg_val”) { parameter1 parameter2 } } Trong đó object là đối tượng cần lấy dữ liệu, các parameter là các tham số của nó, argument là một đối số, dữ liệu trả về dưới dạng JSON { “data”:{ “object”:{ “parameter1”:”value1” “parameter2”:”value2” } } } 19 | P a g e download by : skknchat@gmail.com Truyền biến số vào hoạt động query: Biến số: { “variable”:”var_val” } Câu lệnh query như sau: query OporationName($variable: Variable) { Object(argument: $variable) { parameter } } 2. Mutation Những thay đổi dữ liệu bên server sẽ được thực hiện qua mutation. Câu lệnh mutation như sau [6]: Câu lệnh khai báo biến số: { “parameter1”: ”val1”, “parameter2”: { “parameter3”:”val2” “parameter4”:”val3” } } Câu lệnh mutation như sau: mutation CreateParameterForObject( $variable1: Variable1!, $variable2: Variable2!){ createNew(parameter1: $variable1, parameter2: $ variable2) { parameter3 parameter4 20 | P a g e download by : skknchat@gmail.com } } Kết quả trả về: { “data”: { “createNew”: { “parameter3”:”val2” “parameter4”:”val3” } } } 2. Schema và Type Type: Type là đối tượng của GraphQL, mô tả đối tượng JSON trả về.
Cấu trúc 1 type cơ bản như sau: Type Type { field1: object1! field2: [object2]! } Type là kiểu đối tượng GraphQL, là kiểu với một số trường. Đa số các trường là kiểu đối tượng. field1, field2 là các trường thuộc kiểu Type. Câu lệnh query trên kiểu Type chỉ có thể xuất hiện các trường này.
Object1! Là đối tượng, dấu chấm than là quy định trường không được có giá trị null. [Object2]! Là mảng các đối tượng. Kiểu query và mutation Một schema luôn có kiểu query, có hoặc không có kiểu mutation. schema { 21 | P a g e download by : skknchat@gmail.com query: Query mutation: Mutation } Với một câu lệnh query cần một kiểu Query tương ứng.
Google map API 2. Giới thiệu về google map Google Maps là một ứng dụng bản đồ trực tuyến trên web được cung cấp miễn phí bởi Google. Nó có thể dùng để nhúng vào các trang web của bên thứ ba thông qua Google Maps API. Nó cung cấp rất nhiều những tiện ích nâng cao giúp người dùng tìm kiếm đường đi,các địa điểm, các địa danh.
Google phát triển Google Maps API dành cho 4 mảng chính đó là: Các ứng dụng trên Android Các ứng dụng trên IOS Các ứng dụng web Các ứng dụng webservice Hàng triệu trang web và ứng dụng sử dụng Google Maps API để cung cấp kinh nghiệm tìm kiếm vị trí cho người dùng của họ.Ngoài ra google map API còn hoạt động tốt trên các thiết bị di động như IOS, Android. Giới thiệu về google map API Người dùng có thêm thêm bản đồ dựa trên dữ liệu Google Maps vào ứng dụng của mình. API tự động xử lý truy cập đến Google Maps servers, dữ liệu tải,dữ liệu hiển thị, và phản hồi những thay đổi của bản đồ. Người dùng cũng có thể dùng API để thêm điểm đánh dấu, hình vẽ cho một bản đồ cơ bản, thay đổi góc nhìn bản đồ của một khu vực cụ thể.
Những đối tượng này cung cấp thêm thông tin cho bản đồ, đồng thời cho phép người dùng tương tác với bản đồ [7]. 22 | P a g e download by : skknchat@gmail.