Như vây, Android là hệ điều hành chiếm thị phần cao nhất trong các nền tảng thiết bị điện thoại thông minh, tiếp theo là iOS, Windows Phone, … Hình 2.14: Thị phần các nền tảng di động to
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG KHOA CÔNG NGHỆ THÔNG TIN
NGUYỄN VĂN BÉ
XÂY DỰNG ỨNG DỤNG “GỌI XE NHA TRANG”
TRÊN THIẾT BỊ DI ĐỘNG
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Ngành: Công nghệ thông tin
Nha Trang – 2016
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG KHOA CÔNG NGHỆ THÔNG TIN
NGUYỄN VĂN BÉ
XÂY DỰNG ỨNG DỤNG “GỌI XE NHA TRANG”
TRÊN THIẾT BỊ DI ĐỘNG
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Ngành: Công nghệ thông tin
CÁN BỘ HƯỚNG DẪN:
ThS TRẦN MINH VĂN
Nha Trang – 2016
Trang 3Với mục đích tiếp cận các mô hình mới này, cũng như để học hỏi các kiến
thức mới và cách để tạo ra một ứng dụng như vậy, tôi đã thực hiện đề tài “Xây dựng ứng dụng ‘Gọi Xe Nha Trang’ trên thiết bị di động” Phần mềm sẽ được viết bằng
ngôn ngữ Java, sử dụng công cụ phát triển Android Studio và được phát triển trên nền tảng Android 4.0.3 Ngoài ra, kết hợp phần mềm sẽ là một Web Service được phát triển dựa trên ngôn ngữ PHP và sử dụng Yii Framework
Phần mềm “Gọi Xe Nha Trang” sẽ giúp kết nối những người sử dụng ứng dụng với những người lái xe để có thể gọi và đặt xe khi nào muốn di chuyển từ một địa điểm đến địa điểm khác với mức cước phí rẻ hơn phí đi bằng các phương tiện khác như taxi, và cùng với đó là sự tiện lợi và nhanh chóng Phần mềm sẽ giúp cho những người nhàn rỗi, mà đặc biệt là những người lái xe thồ, có thêm thu nhập ngoài công việc chính của mình
Tôi xin chân thành cảm ơn thầy Trần Minh Văn, giảng viên bộ môn Hệ thống thông tin, thuộc khoa Công nghệ thông tin, trường Đại học Nha Trang đã tận tình hướng dẫn và giúp đỡ để tôi có thể hoàn thành đề tài này Vì là lần đầu tiên xây dựng một ứng dụng Android, nên phần mềm sẽ còn nhiều thiếu sót Vì vậy rất mong nhận được nhiều sự góp ý từ các thầy cô để phần mềm có thể hoàn thiện hơn
Sinh viên thực hiện Nguyễn Văn Bé
Trang 4MỤC LỤC
CHƯƠNG 1 TỔNG QUAN 1
1.1 Đặt vấn đề 1
1.2 Mục tiêu của đề tài 1
1.3 Nội dung cơ bản 1
CHƯƠNG 2 GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH ANDROID 3
2.1 Android là gì? 3
2.2 Lịch sử Android 3
2.3 Các phiên bản Android 5
2.3.1 Android 1.0 – 9/2008 5
2.3.2 Android 1.1 – 2/2009 5
2.3.3 Android 1.5 (Cupcake) – 4/2009 6
2.3.4 Android 1.6 (Donut) – 9/2009 7
2.3.5 Android 2.0 / 2.1 (Éclair) – 9/2009 7
2.3.6 Android 2.2 (Froyo) – 5/2010 8
2.3.7 Android 2.3 (Gingerbread) – 12/2010 8
2.3.8 Android 3.0 (Honeycomb) – 2/2011 9
2.3.9 Android 4.0 (Ice Cream Sandwich) – 10/2011 9
2.3.10 Android 4.1 / 4.2 / 4.3 (Jelly Bean) – 7/2012 10
2.3.11 Android 4.4 (Kitkat) – 10/2013 10
2.3.12 Android 5.0 (Lollipop) – 11/2014 11
2.3.13 Android 6.0 (Marshmallow) – 10/2015 11
2.3.14 Android N Developer Preview 3 – 5/2016 12
2.4 Thị phần của Android so với các nền tảng di động khác 12
2.5 Kiến trúc của hệ điều hành Android 12
2.5.1 Nhân Linux (Linux Kernel) 13
2.5.2 Thư viện Android (Android Libraries) và Android Runtime 13
2.5.3 Khung ứng dụng (Application Framework) 15
2.5.4 Ứng dụng (Applications) 15
2.6 Đại cương về lập trình ứng dụng cho Android 15
2.6.1 Thành phần của Ứng dụng 16
2.6.2 Kích hoạt Thành phần 20
2.6.3 Tệp Bản kê khai 21
CHƯƠNG 3 GIỚI THIỆU VỀ RESTFUL WEB SERVICE 22
Trang 53.1 Service là gì? 22
3.2 Web service là gì? 22
3.2.1 Một vài định nghĩa về Web service 22
3.2.2 Đặc điểm của Web service 23
3.2.3 Ưu và nhược điểm của Web service 24
3.2.4 Các kiến trúc của Web service 25
3.2.5 Các loại Web service 25
3.3 Big web service 26
3.3.1 Giới thiệu 26
3.3.2 Cách thức hoạt động 26
3.3.3 Các thành phần 26
3.3.3.1 WSDL – Web Service Description Language 26
3.3.3.2 UDDI – Universal Description, Discovery, and Integration 27
3.3.3.3 SOAP – Simple Object Access Protocol 28
3.3.4 Khi nào sử dụng Big web service? 28
3.4 RESTful web service 29
3.4.1 REST là gì? 29
3.4.2 Các ràng buộc của REST 29
3.4.2.1 Client-Server 29
3.4.2.2 Stateless 29
3.4.2.3 Cache 30
3.4.2.4 Uniform Interface 30
3.4.2.5 Layered System 31
3.4.2.6 Code-On-Demand 31
3.4.3 Các ràng buộc giao diện trong hệ thống REST 31
3.4.3.1 Tài nguyên và định danh tài nguyên 31
3.4.3.2 Đại diện và điều khiển tài nguyên qua các đại diện 31
3.4.3.3 Các thông điệp tự mô tả 32
3.4.3.4 Hypermedia as the engine of application state (HATEOAS) 32
3.4.4 Lợi ích của RESTful web service 34
3.4.5 Một vài khẳng định về REST để tránh các quan niệm sai lầm 34
3.4.5.1 REST không phụ thuộc vào giao thức bất kỳ nào 34
3.4.5.2 REST không ánh xạ CRUD với các phương thức của HTTP 35
3.4.5.3 REST sẽ không phải là REST nếu không có HATEOAS 35
3.4.5.4 REST không thể so sánh trực tiếp với SOAP 35
Trang 6CHƯƠNG 4 GOOGLE MAPS, GOOGLE MAPS APIS VÀ CÁC DỊCH VỤ
CỦA GOOGLE 36
4.1 Giới thiệu về Google Maps 36
4.2 Giới thiệu về Google Maps APIs 36
4.3 Google Maps Android API 37
4.4 Google Maps APIs Web Services 38
4.4.1 Giới thiệu 38
4.4.2 Sử dụng Google Maps Web services 38
4.4.3 Giới thiệu về Google Maps Directions API 38
4.4.4 Giới thiệu về Google Maps Geocoding API 39
4.4.5 Giới thiệu về Google Places API Web Service 39
4.5 Giới thiệu về Google Cloud Messaging 40
4.5.1 Google Cloud Messaging là gì? 40
4.5.2 Các tính năng của Google Cloud Messaging 40
4.5.3 Dòng tiến trình của Google Cloud Messaging 42
CHƯƠNG 5 XÂY DỰNG ỨNG DỤNG 44
5.1 Phân tích thiết kế hệ thống 44
5.1.1 Hiện trạng của ứng dụng 44
5.1.2 Mục tiêu của ứng dụng 44
5.1.3 Những lợi thế của ứng dụng so với các ứng dụng khác 45
5.1.4 Đặc tả hệ thống 45
5.1.5 Mô hình thực thể liên kết mở rộng (EER diagram) 47
5.2 Giới thiệu về ứng dụng 53
5.2.1 Giới thiệu về Web service của ứng dụng và trang quản lý 53
5.2.2 Giới thiệu về ứng dụng “Gọi Xe Nha Trang” dành cho khách hàng 57
5.2.3 Giới thiệu về ứng dụng “Gọi Xe Driver” dành cho người lái xe 64
CHƯƠNG 6 KẾT LUẬN 71
6.1 Ưu điểm và khuyết điểm của các ứng dụng đã xây dựng 71
6.1.1 Ưu điểm 71
6.1.2 Khuyết điểm 71
6.1.3 Hướng khắc phục trong tương lai 71
6.2 Các kết quả đã đạt được 72
Trang 7DANH MỤC CÁC BẢNG
Bảng 5.1: Chi tiết bảng user 48
Bảng 5.2: Chi tiết bảng driver 48
Bảng 5.3: Chi tiết bảng fee 49
Bảng 5.4: Chi tiết bảng vehicle_producer 50
Bảng 5.5: Chi tiết bảng vehicle 50
Bảng 5.6: Chi tiết bảng order 50
Bảng 5.7: Chi tiết bảng favorite 51
Bảng 5.8: Chi tiết bảng rating 52
Trang 8DANH MỤC HÌNH ẢNH
Hình 2.1: Hình ảnh biểu trưng của hệ điều hành Android 3
Hình 2.2: HTC G1 – Chiếc điện thoại chạy Android đầu tiên 6
Hình 2.3: Hình biểu tượng Android 1.5 6
Hình 2.4: Hình biểu tượng Android 1.6 7
Hình 2.5: Hình biểu tượng Android 2.0 – 2.1 7
Hình 2.6: Hình biểu tượng Android 2.2 8
Hình 2.7: Hình biểu tượng Android 2.3 8
Hình 2.8: Hình biểu tượng Android 3.0 9
Hình 2.9: Hình biểu tượng Android 4.0 9
Hình 2.10: Hình biểu tượng Android 4.1 / 4.2 / 4.3 10
Hình 2.11: Hình biểu tượng Android 4.4 10
Hình 2.12: Hình biểu tượng Android 5.0 11
Hình 2.13: Hình biểu tượng Android 6.0 11
Hình 2.14: Thị phần các nền tảng di động toàn cầu quý 1/2016 12
Hình 2.15: Kiến trúc 4 lớp của Android 13
Hình 3.1: Kiến trúc của Big web service 26
Hình 3.2: HATEOAS trong Twitter API 33
Hình 3.3: Các hành động có thể có trong trang đấu giá eBay 33
Hình 3.4: HATEOAS trong eBay API 34
Hình 4.1: Các tính năng của Google Cloud Messaging 40
Hình 4.2: Dòng tiến trình của Google Cloud Messaging 42
Hình 5.1: Mô hình thực thể liên kết mở rộng 47
Hình 5.2: Giao diện trang quản trị 53
Hình 5.3: Giao diện khi vừa mở ứng dụng 58
Hình 5.4: Giao diện đăng nhập và đăng ký 58
Hình 5.5: Giao diện chính của ứng dụng 59
Hình 5.6: Giao diện sau khi nhấn PICKUP 59
Hình 5.7: Giao diện tìm kiếm địa điểm 60
Hình 5.8: Giao diện kết quả tìm đường đi và người lái xe 61
Hình 5.9: Thông tin chi tiết của người lái xe 62
Hình 5.10: Giao diện xem vị trí người lái xe theo thời gian thực 62
Hình 5.11: Giao diện sau khi hoàn tất chuyến đi 63
Trang 9Hình 5.12: Giao diện lịch sử đặt xe và danh sách yêu thích 64
Hình 5.13: Giao diện ban đầu của “Gọi Xe Driver” 65
Hình 5.14: Giao diện đăng nhập của ứng dụng 65
Hình 5.15: Giao diện màn hình chính của ứng dụng 66
Hình 5.16: Chi tiết thu nhập trong một ngày 67
Hình 5.17: Thông báo xuất hiện khi có đơn hàng mới 68
Hình 5.18: Giao diện chi tiết đơn đặt hàng 68
Hình 5.19: Giao diện khi người lái xe chấp nhận đơn hàng 69
Hình 5.20: Thống kê đã được làm mới sau khi hoàn tất đơn hàng 70
Trang 10Bên cạnh đó, cũng có một bộ phận sinh viên muốn kiếm thêm thu nhập sau giờ học chính để trang trải tiền học phí và chi phí sinh hoạt hàng ngày Hầu hết sinh viên đều làm thêm với những nghề như gia sư, phục vụ quán cà phê, tiếp thị… Thế nhưng do những nghề này phải làm theo giờ cố định, có khi tối muộn mới có thể về đến nhà khiến họ gặp nhiều khó khăn trong việc sắp xếp lịch học
Vì vậy, để giải quyết vấn đề này cần có một ứng dụng giúp cho những người lái xe thồ có thể dễ dàng có thêm được khách hàng, cũng như giúp cho những bạn sinh viên có thể kiếm thêm thu nhập mà vẫn chủ động về thời gian Đó là lý do ứng dụng “Gọi Xe Nha Trang” được phát triển
1.2 Mục tiêu của đề tài
Rèn luyện kỹ năng về lập trình ứng dụng: cơ sở dữ liệu, web service, lập trình thiết bị di động Android
Viết chương trình ứng dụng cộng đồng giúp kết nối người lái xe thồ và khách hàng trên địa bàn thành phố Nha Trang thông qua thiết bị di động
1.3 Nội dung cơ bản
Về lý thuyết:
Tìm hiểu về phân tích thiết kế hệ thống thông tin
Tìm hiểu về lập trình cơ sở dữ liệu
Tìm hiểu về xây dựng ứng dụng Web Service RESTful
Tìm hiểu về xây dựng ứng dụng trên thiết bị di động Android
Tìm hiểu về dịch vụ Google Maps
Trang 11Về cài đặt, thực nghiệm:
Xây dựng ứng dụng cộng đồng kết nối người lái xe và khách hàng tại thành phố Nha Trang trên thiết bị di động có các tính năng sau:
Xây dựng cơ sở dữ liệu quản lý thông tin về người lái xe
Khách hàng có thể tìm kiếm người lái xe thông qua bản đồ, gọi xe
Tính toán khoảng cách di chuyển, cước phí
Người lái xe xác định khách hàng qua bản đồ
Trang 12CHƯƠNG 2
GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH ANDROID
Hình 2.1: Hình ảnh biểu trưng của hệ điều hành Android
2.1 Android là gì?
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng Không những thế, hiện nay hệ điều hành Android còn được các nhà sản xuất tùy chỉnh nó để cài đặt được trên các Smart TV (Ti vi thông minh), máy chơi game, các thiết bị điện tử khác…
2.2 Lịch sử Android
Tổng công ty Android (Android, Inc.) được thành lập tại Palo Alto, California vào tháng 10 năm 2003 bởi Andy Rubin (đồng sáng lập công ty Danger), Rich Miner (đồng sáng lập Tổng công ty Viễn thông Wildfire), Nick Sears (từng là Phó giám đốc T-Mobile), và Chris White (trưởng thiết kế và phát triển giao diện tại WebTV) để phát triển, theo lời của Rubin, "các thiết bị di động thông minh hơn có thể biết được vị trí và sở thích của người dùng" Mục đích ban đầu của công ty là phát triển một hệ điều hành nâng cao cho các thiết bị máy ảnh số Nhưng khi nhận ra rằng thị trường cho các thiết bị này không đủ lớn, công ty đã chuyển hướng sang sản xuất một hệ điều hành cho điện thoại thông minh, đối đầu với hai hệ điều hành lớn lúc này
là Symbian và Microsoft Windows Mobile Mặc dù những người thành lập và nhân
Trang 13viên đều là những người có tiếng tăm, Tổng công ty Android hoạt động một cách âm thầm, chỉ tiết lộ rằng họ đang làm phần mềm dành cho điện thoại di động Trong năm
đó, Rubin hết kinh phí Steve Perlman, một người bạn thân của Rubin, mang cho ông 10.000 USD tiền mặt nhưng từ chối tham gia vào công ty
Google mua lại Tổng công ty Android vào ngày 17 tháng 8 năm 2005 với giá
50 triệu USD, biến nó thành một bộ phận trực thuộc Google Những nhân viên của chủ chốt của Tổng công ty Android, gồm Rubin, Miner và White, vẫn tiếp tục ở lại công ty làm việc sau thương vụ này Vào thời điểm đó không có nhiều thông tin về Tổng công ty, nhưng nhiều người đồn đoán rằng Google dự tính tham gia thị trường điện thoại di động sau bước đi này Tại Google, nhóm do Rubin đứng đầu đã phát triển một nền tảng thiết bị di động phát triển trên nền nhân Linux Google quảng
bá nền tảng này cho các nhà sản xuất điện thoại và các nhà mạng với lời hứa sẽ cung cấp một hệ thống uyển chuyển và có khả năng nâng cấp Google đã liên hệ với hàng loạt hãng phần cứng cũng như đối tác phần mềm, bắn tin cho các nhà mạng rằng họ sẵn sàng hợp tác với các cấp độ khác nhau
Ngày càng nhiều suy đoán rằng Google sẽ tham gia thị trường điện thoại di động xuất hiện trong tháng 12 năm 2006 Tin tức của BBC và Nhật báo phố Wall (The Wall Street Journal) chú thích rằng Google muốn đưa công nghệ tìm kiếm và các ứng dụng của họ vào điện thoại di động và họ đang nỗ lực làm việc để thực hiện điều này Các phương tiện truyền thông truyền thống lẫn online cũng viết về tin đồn rằng Google đang phát triển một thiết bị cầm tay mang thương hiệu Google Một vài
tờ báo còn nói rằng trong khi Google vẫn đang thực hiện những bản mô tả kỹ thuật chi tiết, họ đã trình diễn sản phẩm mẫu cho các nhà sản xuất điện thoại di động và nhà mạng Tháng 9 năm 2007, InformationWeek (một tạp chí số có trụ sở tại California) đăng tải một nghiên cứu của Evalueserve cho biết Google đã nộp một số đơn xin cấp bằng sáng chế trong lĩnh vực điện thoại di động
Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở (Open Handset Alliance), một hiệp hội bao gồm nhiều công ty trong đó có Texas Instruments, Tập đoàn Broadcom, Google, HTC, Intel, LG, Tập đoàn Marvell Technology, Nvidia, Motorola, Qualcomm, Samsung Electronics, Sprint Nextel và T-Mobile được thành lập với mục đích phát triển các tiêu chuẩn mở cho thiết bị di động Cùng ngày,
Trang 14Android cũng được ra mắt với vai trò là sản phẩm đầu tiên của Liên minh, một nền tảng thiết bị di động được xây dựng trên nhân Linux phiên bản 2.6 Chiếc điện thoại chạy Android đầu tiên được bán ra là HTC Dream (hay còn gọi là T-Mobile G1), phát hành ngày 22 tháng 10 năm 2008
Từ tháng 10 năm 2008, hệ điều hành Android đã chính thức trở thành phần mềm mã nguồn mở Theo đó, các công ty thứ ba được phép thêm những ứng dụng của riêng của họ vào Android và bán chúng mà không cần phải hỏi ý kiến Google Với mục đích là hệ điều hành Linux dành cho di động (LiMO), Google Android mong muốn mang lại điều tương tự ở phạm vi rộng lớn và thống nhất hơn, và qua đó thu hút một lượng khách hàng không nhỏ trong tương lai Kết quả là Liên minh OHA ra mắt gói phát triển phần mềm Android SDK cho nhà lập trình vào ngày 12 tháng 11 năm 2008
2.3 Các phiên bản Android
Từ năm 2008, Android đã trải qua nhiều lần cập nhật để dần dần cải tiến hệ điều hành, bổ sung các tính năng mới và sửa các lỗi trong những lần phát hành trước Phiên bản đầu tiên của hệ điều hành Android 1.0 ra đời vào ngày 23 tháng 9 năm
2008 và phiên bản nâng cấp 1.1 sau đó vào ngày 9 tháng 2 năm 2009 không có tên gọi chính thức Về sau, những phiên bản tiếp theo ra đời với tên gọi được đặt tên theo một món ăn tráng miệng, với vần đầu là các chữ cái theo thứ tự trong bảng Alphabet
2.3.1 Android 1.0 – 9/2008
Thiết bị nổi bật: HTC G1 (hay HTC Dream)
Tích hợp chặt chẽ với các ứng dụng của Google như Gmail và YouTube
Kho ứng dụng Android Market phiên bản thử nghiệm Beta ra mắt, nhưng chỉ có khoảng 35 ứng dụng
Thanh thông báo kéo từ trên xuống và các widget (tiện ích) trên màn hình chính
2.3.2 Android 1.1 – 2/2009
Tính năng cập nhật qua mạng OTA (Over The Air)
Trang 15Hình 2.2: HTC G1 – Chiếc điện thoại chạy Android đầu tiên
2.3.3 Android 1.5 (Cupcake) – 4/2009
Hình 2.3: Hình biểu tượng Android 1.5
Thiết bị nổi bật: HTC myTouch 3G (hay HTC Magic)
Bản phím ảo trên màn hình lần đầu tiên xuất hiện
Lần đầu tiên hỗ trợ khả năng quay phim
Cải tiến Widget: kho ứng dụng widget phong phú và đa dạng hơn
Trang 16Hình 2.5: Hình biểu tượng Android 2.0 – 2.1
Thiết bị nổi bật: Motorola DROID, HTC Nexus One
Hỗ trợ nhiều tài khoản người dùng: lần đầu tiên, nhiều tài khoản Google
có thể được đăng nhập trên cùng một thiết bị Android
Hình nền động (Live Wallpaper)
Cải tiến bàn phím ảo, hỗ trợ HTML5 cho trình duyệt, hỗ trợ Bluetooth 2.1
Trang 172.3.6 Android 2.2 (Froyo) – 5/2010
Hình 2.6: Hình biểu tượng Android 2.2
Thiết bị nổi bật: Motorola DROID 2
Xuất hiện tính năng trạm phát Wifi (Wifi Hotspot)
Trình duyệt được thêm engine Chrome V8 JavaScript và được hỗ trợ Adobe Flash
2.3.7 Android 2.3 (Gingerbread) – 12/2010
Hình 2.7: Hình biểu tượng Android 2.3
Thiết bị nổi bật: Samsung Nexus S
Bàn phím ảo được cải thiện để nâng cao độ chính xác và tốc độ gõ
Chức năng sao chép và dán được cải thiện với hai thanh chặn văn bản giúp việc chọn một hay nhiều từ trở nên tiện lợi
Lần đầu tiên hỗ trợ chuẩn trao đổi dữ liệu không dây NFC (near-field communication)
Hỗ trợ camera trước, có công cụ quản lý pin và ứng dụng rất hiệu quả
Trang 182.3.8 Android 3.0 (Honeycomb) – 2/2011
Hình 2.8: Hình biểu tượng Android 3.0
Thiết bị nổi bật: Motorola Xoom
Phiên bản tối ưu cho máy tính bảng
Thiết kế giao diện người dùng mới được gọi là “Holographic”
2.3.9 Android 4.0 (Ice Cream Sandwich) – 10/2011
Hình 2.9: Hình biểu tượng Android 4.0
Thiết bị nổi bật: Samsung Galaxy Nexus
Hợp nhất hệ điều hành dành cho điện thoại thông minh và máy tính bảng làm một
Hỗ trợ bộ font mới tên là Roboto, hệ thống thông báo (notification) bổ sung tính năng trượt ngang để xóa, …
Trang 192.3.10 Android 4.1 / 4.2 / 4.3 (Jelly Bean) – 7/2012
Hình 2.10: Hình biểu tượng Android 4.1 / 4.2 / 4.3
Thiết bị nổi bật: Asus Nexus 7, LG Nexus 4, Samsung Nexus 10
Project Butter: giúp cải thiện rất nhiều hiệu năng cảm ứng và tốc độ xử lý
độ họa trên điện thoại và máy tính bảng
Google Now với khả năng điều khiển bằng giọng nói hoạt động không cần kết nối mạng Wifi hay 3G
Chức năng Daydream hiển thị thông tin khi điện thoại ở chế độ màn hình khóa
2.3.11 Android 4.4 (Kitkat) – 10/2013
Hình 2.11: Hình biểu tượng Android 4.4
Thiết bị nổi bật: LG Nexus 5
Hỗ trợ chế độ toàn màn hình, hiệu ứng chuyển cảnh màn hình, …
Ứng dụng nhắn tin truyền thống được gộp chung với ứng dụng nhắn tin và liên lạc online Hangouts
Trang 202.3.12 Android 5.0 (Lollipop) – 11/2014
Hình 2.12: Hình biểu tượng Android 5.0
Thiết bị nổi bật: Motorola Nexus 6
Thiết kế “Material” mới
Hệ thống thông báo thêm tính năng báo nhắc bằng cách nhảy ra (pop up)
mà không can thiệp vào những gì bạn đang xem hoặc đang thao tác trên màn hình
Hỗ trợ chip 64 bit
Hỗ trợ chụp ảnh với định dạng RAW
2.3.13 Android 6.0 (Marshmallow) – 10/2015
Hình 2.13: Hình biểu tượng Android 6.0
Thiết bị nổi bật: LG Nexus 5X, Huawei Nexus 6P
Google Now on Tap: có khả năng quét chữ trên màn hình hiện tại và đưa
ra các đề xuất tương ứng
Hỏi quyền sử dụng permission chỉ khi cần thiết, tắt bật từng permission riêng lẻ
Chính thức hỗ trợ cảm biến vân tay và USB Type-C
Hệ thống sao chép, cắt dán văn bản thay đổi: trình đơn (menu) xuất hiện trực tiếp trên văn bản đã chọn
Trang 21 DOZE: tính năng giúp giám sát thiết bị và điều chỉnh hoạt động ứng dụng cho phù hợp để tăng tuổi thọ pin
2.3.14 Android N Developer Preview 3 – 5/2016
Instant Apps: Trải nghiệm ứng dụng nhanh kể cả khi chưa cài ứng dụng
Đa nhiệm đa cửa sổ
Trả lời ngay trên thanh thông báo
Hỗ trợ Java 8, Unicode 9
2.4 Thị phần của Android so với các nền tảng di động khác
Theo báo cáo mới nhất về doanh số điện thoại thông minh trong Quý 1/2016, Android chiếm đến 84.1% thị phần Như vây, Android là hệ điều hành chiếm thị phần cao nhất trong các nền tảng thiết bị điện thoại thông minh, tiếp theo là iOS, Windows Phone, …
Hình 2.14: Thị phần các nền tảng di động toàn cầu quý 1/2016
2.5 Kiến trúc của hệ điều hành Android
Hệ điều hành Android là một ngăn xếp của các thành phần ứng dụng (stack of software components), có thể chia thành 5 phần và 4 lớp như trong sơ đồ kiến trúc Android trong hình 2.15:
Trang 22Hình 2.15: Kiến trúc 4 lớp của Android
2.5.1 Nhân Linux (Linux Kernel)
Nằm ở tầng dưới cùng là lớp Linux kernel - Linux 3.6 với khoảng 115 bản vá lỗi Lớp này liên hệ với phần cứng và nó chứa tất cả driver phần cứng cần thiết như camera, bàn phím, màn hình…
2.5.2 Thư viện Android (Android Libraries) và Android Runtime
Phía trên tầng Linux kernel là tầng Libraries, chứa những thư viện hỗ trợ Một
số có thể kể đến như là bộ máy trình duyệt web mã nguồn mở WebKit, thư viện libc,
cơ sở dữ liệu SQLite tiện lợi cho việc lưu trữ và chia sẻ dữ liệu, thư viện hỗ trợ thu phát âm thanh và video, thư viện SSL giúp bảo mật mạng…
Trang 23Tầng này chứa tất cả các thư viện Java, được viết đặc biệt cho Android như các thư viện framework, các thư viện xây dựng giao diện, đồ họa và cơ sở dữ liệu Dưới đây là một số thư viện quan trọng mà các lập trình viên nên biết:
android.app - Cung cấp quyền truy cập tới mô hình ứng dụng và là nền tảng của mọi ứng dụng Android applications
android.content - Cho phép truy cập nội dung, phát hành và tin nhắn giữa các ứng dụng và các thành phần trong một ứng dung
android.database - Được dùng để truy cập vào dữ liệu được đưa ra bởi
bộ phận cung cấp nội dung, bao gồm các lớp quản lý cơ sở dữ liệu SQLite
android.opengl - Cho phép tương tác với thư viện đồ họa OpenGL ES 3D
android.os - Giúp ứng dụng truy cập những dịch vụ cơ bản của hệ điều hành bao gồm tin nhắn, dịch vụ hệ thống và liên lạc nội bộ (inter-process communication)
android.text - Được dùng để vẽ và thao tác văn bản trên màn hình
android.view - Các khối xây dựng cơ bản của giao diện người dùng
android.widget - Một tập hợp rất nhiều thành phần giao diện được xây dựng sẵn như nút bấm (button), nhãn (label), danh sách hiển thị (list views), quản lý bố cục (layout managers)…
android.webkit - Tập hợp các lớp (classes) cho phép trình duyệt web được nhúng vào ứng dụng
Trong tầng này còn có một phần không kém phần quan trọng là Android Runtime Android Runtime chứa Dalvik Virtual Machine (DVM) - một biến thể của Java Virtual Machine (Máy ảo Java), đặc biệt thiết kế và tối ưu hóa cho Android DVM giúp mỗi ứng dụng Android chạy trong chính tiến trình (process) của nó với một đại diện (instance) của DVM Ngoài ra, Android Runtime cũng chứa tập hợp các thư viện quan trong cho phép người lập trình viết ứng dụng sử dụng ngôn ngữ lập trình Java
Trang 242.5.3 Khung ứng dụng (Application Framework)
Application Framework cung cấp nhiều dịch vụ cấp cao dưới dạng các lớp viết bằng Java (Java classes) Lập trình viên được phép sử dụng các lớp này để tạo ra các ứng dụng
Android Framework chứa các dịch vụ quan trọng như:
Activity Manager - Quản lý tất cả các phần của vòng đời (lifecycle) ứng dụng và các hoạt động ngăn xếp (activity stack)
Content Providers - Cho phép ứng dụng phát hành và chia sẻ dữ liệu với ứng dụng khác
Resource Manager - Cho phép truy cập tới những tài nguyên không phải là mã nguồn như chuỗi, cài đặt màu, bố cục giao diện
Notifications Manager - Giúp ứng dụng hiển thị thông báo và nhắc nhở người dùng
View System - Một tập hợp mở rộng giúp tạo giao diện người dùng
2.5.4 Ứng dụng (Applications)
Ở tầng trên cùng là các ứng dụng Android để tương tác với người dùng Các ứng dụng này có thể là ứng dụng đi kèm với hệ điều hành như Danh bạ, Trình duyệt web, Games… hay các ứng dụng do lập trình viên và bên thứ ba phát triển
2.6 Đại cương về lập trình ứng dụng cho Android
Ứng dụng Android được viết bằng ngôn ngữ lập trình Java Bộ công cụ SDK Android sẽ biên dịch mã của bạn - cùng với bất kỳ tệp dữ liệu và tài nguyên nào -
vào một APK: một gói Android, đó là một tệp lưu trữ có hậu tố apk Một tệp APK
chứa tất cả nội dung của một ứng dụng Android và là tệp mà các thiết bị dựa trên nền tảng Android sử dụng để cài đặt ứng dụng
Sau khi được cài đặt lên một thiết bị, từng ứng dụng Android sẽ ở bên trong hộp cát bảo mật1 của chính nó:
Hệ điều hành Android là một hệ thống Linux đa người dùng trong đó mỗi ứng dụng là một người dùng khác nhau
1 Sandbox: là một kỹ thuật nhằm ngăn chăn các phần mềm độc hại, giúp bảo vệ hệ thống cũng như tránh bị đánh cắp các thông tin cá nhân
Trang 25 Theo mặc định, hệ thống gán cho từng ứng dụng một ID người dùng Linux duy nhất (ID chỉ được sử dụng bởi hệ thống và không xác định đối với ứng dụng) Hệ thống sẽ đặt quyền cho tất cả tệp trong một ứng dụng sao cho chỉ ID người dùng được gán cho ứng dụng đó mới có thể truy cập chúng
Mỗi tiến trình có máy ảo (VM) riêng của mình, vì thế mã của một ứng dụng sẽ chạy độc lập với các ứng dụng khác
Theo mặc định, mọi ứng dụng chạy trong tiến trình Linux của chính nó Android khởi động tiến trình khi bất kỳ thành phần nào của ứng dụng cần được thực thi, sau đó tắt tiến trình khi không còn cần nữa hoặc khi hệ thống phải khôi phục bộ nhớ cho các ứng dụng khác
Bằng cách này, hệ thống Android triển khai nguyên tắc đặc quyền ít nhất Cụ
thể, theo mặc định, mỗi ứng dụng chỉ có thể truy cập vào các thành phần mà nó cần
để thực hiện công việc của mình và không hơn Điều này tạo ra một môi trường rất bảo mật mà trong đó một ứng dụng không thể truy cập các bộ phận của hệ thống mà
nó không được cấp quyền
Tuy nhiên, có nhiều cách để một ứng dụng chia sẻ dữ liệu với các ứng dụng khác và để một ứng dụng truy cập vào các dịch vụ của hệ thống:
Có thể sắp xếp để hai ứng dụng chia sẻ cùng ID người dùng Linux, trong trường hợp đó chúng có thể truy cập các tệp của nhau Để tiết kiệm tài nguyên của hệ thống, các ứng dụng có cùng ID người dùng cũng có thể sắp xếp để chạy trong cùng tiến trình Linux và chia sẻ cùng VM (các ứng dụng cũng phải được ký bằng cùng chứng chỉ)
Một ứng dụng có thể yêu cầu quyền truy cập dữ liệu của thiết bị chẳng hạn như danh bạ của người dùng, tin nhắn SMS, thiết bị lưu trữ gắn được (thẻ SD), máy ảnh, Bluetooth và nhiều nữa Tất cả quyền ứng dụng đều phải được cấp bởi người dùng tại thời điểm cài đặt
Đó là cách mà một ứng dụng Android tồn tại trong hệ thống
2.6.1 Thành phần của Ứng dụng
Thành phần của ứng dụng là những khối dựng thiết yếu của một ứng dụng Android Mỗi thành phần là một điểm khác nhau mà qua đó hệ thống có thể vào ứng
Trang 26dụng của bạn Không phải tất cả thành phần đều là các điểm nhập2 thực tế cho người dùng và một số phụ thuộc vào nhau, nhưng mỗi thành phần tồn tại như một thực thể riêng và đóng một vai trò riêng - mỗi thành phần là một khối dựng duy nhất giúp định nghĩa hành vi chung của ứng dụng của bạn
Có bốn loại thành phần ứng dụng khác nhau Mỗi loại có một mục đích riêng
và có một vòng đời riêng, xác định cách thành phần được tạo lập và hủy
Sau đây là bốn loại thành phần ứng dụng:
Hoạt động (Activity)
- Một hoạt động biểu diễn một màn hình đơn với một giao diện người
dùng Ví dụ, một ứng dụng e-mail có thể có một hoạt động với chức năng hiển thị một danh sách e-mail mới, một hoạt động khác để soạn e-mail, và một hoạt động khác để đọc e-mail Mặc dù các hoạt động cùng nhau tạo thành một trải nghiệm người dùng gắn kết trong ứng dụng e-mail, mỗi hoạt động lại độc lập với nhau Như vậy, một ứng dụng khác có thể khởi động bất kỳ hoạt động nào trong số này (nếu ứng dụng e-mail cho phép nó) Ví dụ, một ứng dụng máy ảnh
có thể khởi động hoạt động trong ứng dụng e-mail có chức năng soạn thư mới, để người dùng chia sẻ một bức ảnh
- Hoạt động được triển khai như một lớp con của Activity
Dịch vụ (Service)
- Một dịch vụ là một thành phần chạy ngầm để thực hiện các thao tác
chạy lâu hoặc để thực hiện công việc cho các tiến trình từ xa Dịch
vụ không cung cấp giao diện người dùng Ví dụ, một dịch vụ có thể phát nhạc dưới nền trong khi người dùng đang ở một ứng dụng khác, hoặc nó có thể tải dữ liệu qua mạng mà không chặn người dùng tương tác với hoạt động Một thành phần khác, chẳng hạn như một hoạt động, có thể khởi động dịch vụ và để nó chạy hoặc gắn kết với
Trang 27 Trình cung cấp Nội dung (Content Provider)
- Một trình cung cấp nội dung sẽ quản lý một tập dữ liệu ứng dụng
được chia sẻ Bạn có thể lưu trữ dữ liệu trong hệ thống tệp, một cơ
sở dữ liệu SQLite, trên web, hay bất kỳ vị trí lưu trữ liên tục nào khác mà ứng dụng của bạn có thể truy cập Thông qua trình cung cấp nội dung, các ứng dụng khác có thể truy vấn hay thậm chí sửa đổi dữ liệu (nếu trình cung cấp nội dung cho phép) Ví dụ, hệ thống Android cung cấp một trình cung cấp nội dung có chức năng quản
lý thông tin danh bạ của người dùng Như vậy, bất kỳ ứng dụng nào
có các quyền phù hợp đều có thể truy vấn bất kỳ phần nào của trình cung cấp nội dung (chẳng hạn như ContactsContract.Data) để đọc
và ghi thông tin về một người cụ thể
- Trình cung cấp nội dung cũng hữu ích với việc đọc và ghi dữ liệu riêng tư đối với ứng dụng của bạn và không được chia sẻ Ví dụ, ứng dụng Note Pad sử dụng một trình cung cấp nội dung để lưu các ghi chú
- Trình cung cấp nội dung được triển khai như một lớp con của ContentProvider và phải triển khai một tập các API3 tiêu chuẩn cho phép các ứng dụng khác thực hiện giao tác
Hàm nhận quảng bá (Broadcast Receiver)
- Một hàm nhận quảng bá là một thành phần có chức năng hồi đáp
lại các thông báo quảng bá trên toàn hệ thống Nhiều quảng bá khởi nguồn từ hệ thống - ví dụ, một quảng bá thông báo rằng màn hình
đã tắt, pin yếu, hoặc một bức ảnh được chụp Các ứng dụng cũng
có thể khởi tạo quảng bá - ví dụ như để các ứng dụng khác biết rằng một phần dữ liệu đã được tải xuống thiết bị và có sẵn để họ sử dụng Mặc dù các hàm nhận quảng bá không hiển thị giao diện người dùng, chúng có thể tạo một thông báo thanh trạng thái để cảnh báo người tiếp nhận khi xảy ra một sự kiện quảng bá Tuy nhiên trường
3 Application Programming Interface: Giao diện lập trình ứng dụng là một tập các lệnh và các tiêu chuẩn lập trình để truy cập ứng dụng phần mềm
Trang 28hợp phổ biến hơn đó là hàm nhận quảng bá chỉ là một "cổng kết nối" tới các thành phần khác và nhằm mục đích thực hiện lượng công việc rất ít Ví dụ, nó có thể khởi tạo một dịch vụ để thực hiện một số công việc dựa trên sự kiện
- Hàm nhận quảng bá được triển khai như một lớp con của BroadcastReceiver và mỗi quảng bá được chuyển giao như một đối tượng Intent
Một khía cạnh độc đáo trong thiết kế hệ thống Android đó là bất kỳ ứng dụng nào cũng có thể khởi động một thành phần của ứng dụng khác Ví dụ, nếu bạn muốn người dùng chụp ảnh bằng máy ảnh của thiết bị, có thể có một ứng dụng khác có chức năng đó và ứng dụng của bạn có thể sử dụng nó thay vì phát triển một hoạt động
để tự chụp ảnh Bạn không cần tích hợp hay thậm chí là liên kết với mã từ ứng dụng của máy ảnh Thay vào đó, bạn đơn giản có thể khởi động hoạt động đó trong ứng dụng máy ảnh có chức năng chụp ảnh Khi hoàn thành, ảnh thậm chí được trả về ứng dụng của bạn để bạn có thể sử dụng nó Đối với người dùng, có vẻ như máy ảnh là một bộ phận thực sự trong ứng dụng của bạn
Khi hệ thống khởi động một thành phần, nó sẽ khởi động tiến trình cho ứng dụng đó (nếu tiến trình không đang chạy) và khởi tạo các lớp cần thiết cho thành phần Ví dụ, nếu ứng dụng của bạn khởi động hoạt động trong ứng dụng máy ảnh có chức năng chụp ảnh, hoạt động đó sẽ chạy trong tiến trình thuộc về ứng dụng máy ảnh chứ không chạy trong tiến trình của ứng dụng của bạn Vì thế, không như ứng dụng trên hầu hết các hệ thống khác, ứng dụng Android không có một điểm nhập duy nhất (ví dụ, không có phương thức main())
Vì hệ thống chạy từng ứng dụng trong một tiến trình riêng với các quyền của tệp mà hạn chế truy cập vào các ứng dụng khác, ứng dụng của bạn không thể trực tiếp kích hoạt một thành phần từ một ứng dụng khác Tuy nhiên, hệ thống Android
có thể Vì thế, để kích hoạt một thành phần trong một ứng dụng khác, bạn phải chuyển
giao một thông báo tới hệ thống trong đó nêu rõ ý định của bạn để khởi động một
thành phần cụ thể Sau đó, hệ thống sẽ kích hoạt thành phần cho bạn
Trang 292.6.2 Kích hoạt Thành phần
Ba trong bốn loại thành phần - hoạt động, dịch vụ và hàm nhận quảng bá - sẽ
được kích hoạt bằng một thông báo không đồng bộ gọi là ý định Ý định sẽ gắn kết
từng thành phần với nhau vào thời gian chạy (bạn có thể nghĩ chúng như là các hàm nhắn tin có chức năng yêu cầu một hành động từ các thành phần khác), dù thành phần
đó thuộc về ứng dụng của bạn hay ứng dụng khác
Một ý định được tạo thành bằng một đối tượng Intent, nó định nghĩa một thông
báo để kích hoạt một thành phần cụ thể hoặc một loại thành phần cụ thể - tương ứng,
một ý định có thể biểu thị hoặc không biểu thị
Đối với các hoạt động và dịch vụ, ý định có chức năng định nghĩa một hành động sẽ thực hiện (ví dụ, "xem" hoặc "gửi" gì đó) và có thể chỉ định URI4 của dữ liệu
để hành động dựa trên đó Ví dụ, một ý định có thể truyền tải một yêu cầu để một hoạt động hiển thị một hình ảnh hay mở một trang web Trong một số trường hợp, bạn có thể khởi động một hoạt động để nhận kết quả, trong trường hợp đó, hoạt động cũng trả về kết quả trong một đối tượng Intent (ví dụ, bạn có thể phát hành một ý định để cho phép người dùng chọn một liên lạc cá nhân và yêu cầu trả nó về cho bạn
- ý định trả về bao gồm một URI chỉ đến liên lạc được chọn)
Đối với hàm nhận quảng bá, ý định chỉ định nghĩa thông báo đang được quảng
bá (ví dụ, một quảng bá để báo rằng pin của thiết bị yếu sẽ chỉ bao gồm một xâu hành động chỉ báo rằng "pin yếu")
Loại thành phần còn lại, trình cung cấp nội dung, không được kích hoạt bởi ý định Thay vào đó, nó được kích hoạt khi được nhằm tới bởi một yêu cầu từ một ContentResolver Bộ giải quyết nội dung xử lý tất cả giao tác trực tiếp với trình cung cấp nội dung sao cho thành phần mà đang thực hiện giao tác với trình cung cấp sẽ không cần mà thay vào đó gọi các phương pháp trên đối tượng ContentResolver Điều này để lại một lớp tóm tắt giữa trình cung cấp nội dung và thành phần yêu cầu thông tin (để bảo mật)
Có các phương pháp riêng để kích hoạt từng loại thành phần:
4 Uniform Resource Identifier (Định dạng tài nguyên thống nhất): là một chuỗi kí tự được sử dụng để định danh tên hoặc tài nguyên trên Internet.
Trang 30 Bạn có thể khởi động một hoạt động (hoặc giao cho nó việc gì mới để làm) bằng cách chuyển một đối tượng Intent vào phương thức startActivity() hoặc startActivityForResult() (khi bạn muốn hoạt động trả về một kết quả)
Bạn có thể khởi động một dịch vụ (hoặc gửi chỉ dẫn mới tới một dịch vụ đang diễn ra) bằng cách chuyển một đối tượng Intent vào phương thức startService() Hoặc bạn có thể gắn kết với một dịch vụ bằng cách chuyển một đối tượng Intent vào phương thức bindService()
Bạn có thể khởi tạo một quảng bá bằng cách chuyển một đối tượng Intent tới các phương thức như sendBroadcast(), sendOrderedBroadcast() hoặc sendStickyBroadcast()
Bạn có thể thực hiện một truy vấn tới một trình cung cấp nội dung bằng cách gọi phương thức query() trên một đối tượng ContentResolver
2.6.3 Tệp Bản kê khai
Trước khi hệ thống Android có thể khởi động một thành phần ứng dụng, hệ thống phải biết rằng thành phần đó tồn tại bằng cách đọc tệp AndroidManifest.xml của ứng dụng (tệp "bản kê khai") Ứng dụng của bạn phải khai báo tất cả thành phần của nó trong tệp này, nó phải nằm ở gốc của thư mục dự án của ứng dụng
Bản kê khai làm nhiều việc bên cạnh việc khai báo các thành phần của ứng dụng, chẳng hạn như:
Xác định bất kỳ quyền (permission) của người dùng nào mà ứng dụng yêu cầu, chẳng hạn như quyền truy cập Internet hay quyền truy cập đọc vào danh bạ của người dùng
Khai báo mức API tối thiểu mà ứng dụng yêu cầu dựa trên những API
mà ứng dụng sử dụng
Khai báo các tính năng phần cứng và phần mềm được sử dụng hoặc yêu cầu bởi ứng dụng, chẳng hạn như máy ảnh, dịch vụ Bluetooth, hoặc màn hình cảm ứng đa điểm
Các thư viện API mà ứng dụng cần được liên kết với (ngoài các API khuôn khổ Android), chẳng hạn như thư viện Google Maps
Trang 31Một ví dụ đơn giản của service chính là hoạt động của một nhà hàng Khi khách hàng vào nhà hàng và gọi thức ăn, khách hàng đang tiến hành gởi yêu cầu cho service “phục vụ khách hàng” của nhà hàng Nhân viên nhà hàng nhận được yêu cầu của khách hàng, nếu món ăn khách hàng yêu cầu nhà hàng không có hoặc đã hết, nhân viên nhà hàng sẽ từ chối Nếu nhà hàng có thể đáp ứng được yêu cầu của khách, món ăn sẽ được chế biến và mang ra cho khách hàng thưởng thức sau một khoảng thời gian chờ Ở đây, yêu cầu chính là món ăn mà khách hàng muốn thưởng thức, còn kết quả trả về của service “phục vụ khách hàng” chính là từ chối (nếu nhà hàng không đáp ứng được yêu cầu của khách) hay là món ăn mà khách hàng cần
3.2 Web service là gì?
3.2.1 Một vài định nghĩa về Web service
Web service (dịch vụ Web) là một hiện thực của service sử dụng các giao thức web để giao tiếp, hay nói cách khác web service là một service trên môi trường web
Web service là một phương thức giao tiếp giữa hai thiết bị điện tử thông qua mạng Internet
Web service thường dùng để mô tả một dịch vụ mà một máy client (máy khách,
ví dụ: máy tính, điện thoại ) có thể gọi từ xa một phương thức, thủ tục hay hàm chạy trên một máy khác với máy client thông qua mạng internet bằng các giao thức web như HTTP
Web service là một chuẩn để xây dựng và phát triển ứng dụng phân tán, có khả năng làm việc trên mọi hệ điều hành, mở rộng khả năng phối hợp giữa các
Trang 32ứng dụng, có thể tái sử dụng, tăng cường sự giao tiếp giữa Client và Server thông qua môi trường Web
Theo định nghĩa của W3C5, Web service là một hệ thống phần mềm được thiết
kế để hỗ trợ khả năng tương tác giữa các ứng dụng trên các máy tính khác nhau thông qua mạng Internet
3.2.2 Đặc điểm của Web service
Web service cho phép client và server tương tác được với nhau ngay cả trong những môi trường khác nhau Ví dụ, đặt Web server cho ứng dụng trên một máy chủ chạy hệ điều hành Linux trong khi người dùng sử dụng máy tính chạy
hệ điều hành Windows, ứng dụng vẫn có thể chạy và xử lý bình thường mà không cần thêm yêu cầu đặc biệt để tương thích giữa hai hệ điều hành này
Phần lớn kĩ thuật của Web service được xây dựng dựa trên mã nguồn mở và được phát triển từ các chuẩn đã được công nhận, ví dụ như XML, JSON
Một Web service bao gồm có nhiều mô-đun và có thể công bố lên mạng Internet
Là sự kết hợp của việc phát triển theo hướng từng thành phần với những lĩnh vực cụ thể và cơ sở hạ tầng Web, đưa ra những lợi ích cho cả doanh nghiệp, khách hàng, những nhà cung cấp khác và cả những cá nhân thông qua mạng Internet
Một ứng dụng khi được triển khai sẽ hoạt động theo mô hình client – server (khách – chủ) Nó có thể được triển khai bởi một phần mềm ứng dụng phía server ví dụ như PHP, Oracle Application server hay Microsoft.Net…
Ngày nay Web service đang rất phát triển, những lĩnh vực trong cuộc sống có thể áp dụng và tích hợp Web service là khá rộng lớn như dịch vụ chọn lọc và phân loại tin tức (hệ thống thư viện có kết nối đến cổng thông tin web để tìm kiếm các thông tin cần thiết); ứng dụng cho các dịch vụ du lịch (cung cấp giá
vé, thông tin về địa điểm…), các đại lý bán hàng qua mạng, thông tin thương
5 World Wide Web Consortium: là một tổ chức lập ra các chuẩn cho Internet, nhất là cho World Wide Web
Trang 33mại như giá cả, tỷ giá hối đoái, đấu giá qua mạng… hay dịch vụ giao dịch trực tuyến (cho cả B2B6 và B2C7) như đặt vé máy bay, thông tin thuê xe…
Các ứng dụng có tích hợp Web service đã không còn là xa lạ, đặc biệt trong điều kiện thương mại điện tử đang bùng nổ và phát triển không ngừng cùng với sự lớn mạnh của Internet Bất kì một lĩnh vực nào trong cuộc sống cũng
có thể tích hợp với Web service, đây là cách thức kinh doanh và làm việc có hiệu quả bởi thời đại ngày nay là thời đại của truyền thông và trao đổi thông tin qua mạng Do vậy, việc phát triển và tích hợp các ứng dụng với dịch vụ Web đang được quan tâm phát triển là điều hoàn toàn dễ hiểu
3.2.3 Ưu và nhược điểm của Web service
- Nâng cao khả năng tái sử dụng
- Thúc đẩy đầu tư các hệ thống phần mềm đã tồn tại bằng cách cho phép các tiến trình/chức năng nghiệp vụ đóng gói trong giao diện dịch vụ Web
- Tạo mối quan hệ tương tác lẫn nhau và mềm dẻo giữa các thành phần trong hệ thống, dễ dàng cho việc phát triển các ứng dụng phân tán
- Thúc đẩy hệ thống tích hợp, giảm sự phức tạp của hệ thống, hạ giá thành hoạt động, phát triển hệ thống nhanh và tương tác hiệu quả với
hệ thống của các doanh nghiệp khác
Trang 34Nhược điểm:
- Những thiệt hại lớn sẽ xảy ra vào khoảng thời gian chết của Web service, giao diện không thay đổi, có thể lỗi nếu một máy khách không được nâng cấp, thiếu các giao thức cho việc vận hành
- Có quá nhiều chuẩn cho Web service khiến người dùng khó nắm bắt
- Phải quan tâm nhiều hơn đến vấn đề an toàn và bảo mật
3.2.4 Các kiến trúc của Web service
Hệ thống Web service đơn giản nhất gồm có 2 thành phần tham gia:
Thành phần sản xuất service (hay thành phần cung cấp, phía server)
Thành phần sử dụng service (hay thành phần yêu cầu, phía client) Một hệ thống phức tạp hơn bao gồm:
Một thành phần đăng ký, đóng vai trò trung gian trong Web service
Thành phần cung cấp, có thể công bố service lên thành phần đăng ký
Thành phần sử dụng, có thể khám phá service trên thành phần đăng ký
3.2.5 Các loại Web service
Web service có thể được thực hiện bằng nhiều cách khác nhau Trong đó cách phân loại phổ biến là chia thành hai loại: “Big” web service và “RESTful” web service
Trang 353.3 Big web service
3.3.3 Các thành phần
3.3.3.1 WSDL – Web Service Description Language
Web Service Description Language (Ngôn ngữ mô tả dịch vụ Web) là một ngôn ngữ định nghĩa cách mô tả dịch vụ Web theo cú pháp tổng quát của XML, bao gồm các thông tin:
- Tên dịch vụ
- Giao thức và kiểu mã hóa sẽ được sử dụng khi gọi các hàm của Web service
Trang 36- Loại thông tin: thao tác, tham số, những kiểu dữ liệu (có thể là giao diện của Web service cộng với tên cho giao diện này)
Một WSDL hợp lệ gồm hai phần: phần giao diện (mô tả giao diện và phương thức kết nối) và phần thi hành mô tả thông tin truy xuất CSDL Cả hai phần này sẽ được lưu trong 2 tập tin XML tương ứng là tập tin giao diện dịch vụ và tập tin thi hành dịch vụ Giao diện của một Web service được miêu tả trong phần này đưa ra cách thức làm thế nào để giao tiếp qua Web service Tên, giao thức liên kết và định dạng thông điệp yêu cầu để tương tác với Web service được đưa vào thư mục của WSDL
WSDL thường được sử dụng kết hợp với XML schema8 và SOAP để cung cấp Web service qua Internet Một client khi kết nối tới Web service có thể đọc WSDL
để xác định những chức năng sẵn có trên server Sau đó, client có thể sử dụng SOAP
để lấy ra chức năng chính xác có trong WSDL
3.3.3.2 UDDI – Universal Description, Discovery, and Integration
Về cơ bản Universal Description, Discovery, and Integration là một tập các quy tắc đăng ký và tìm kiếm thông tin các Web service Nó đóng vai trò như dịch vụ trung gian cho phép người sử dụng dịch vụ tìm đúng nhà cung cấp dịch vụ cần tìm
8 Là dạng tài liệu theo chuẩn XML, dùng để mô tả cấu trúc và các kiểu dữ liệu của một tài liệu XML
Trang 373.3.3.3 SOAP – Simple Object Access Protocol
Simple Object Access Protocol (Giao thức truy cập đối tượng đơn giản) là một giao thức do W3C định nghĩa, dùng để truy xuất, truyền tải dữ liệu với Web service
SOAP có cấu trúc như XML Nó được xem là cấu trúc xương sống của các ứng dụng phân tán được xây dựng từ nhiều ngôn ngữ và các hệ điều hành khác nhau SOAP là giao thức thay đổi các thông điệp dựa trên XML qua mạng máy tính, thông thường sử dụng giao thức HTTP
Ví dụ cấu trúc của SOAP:
3.3.4 Khi nào sử dụng Big web service?
Khi ứng dụng của bạn cần những thứ sau:
Xử lý không đồng bộ
Sự tin cậy, bảo mật, an toàn
Các hoạt động lưu giữ trạng thái (Stateful operations)
Trang 383.4 RESTful web service
REST là kiến trúc phần mềm phổ biến nhất hiện nay trên internet Web service
áp dụng kiến trúc phần mềm này được gọi là RESTful Web service
3.4.1 REST là gì?
Những khái niệm đầu tiên về REST được đưa ra vào năm 2000 trong luận văn tiến sĩ của Roy Thomas Fielding (đồng sáng lập giao thức HTTP) Trong luận văn ông giới thiệu khá chi tiết về các ràng buộc, quy ước cũng như cách thức thực hiện với hệ thống để có được một hệ thống REST
REST (REpresentational State Transfer – Chuyển giao trạng thái đại diện) là
một kiểu kiến trúc phần mềm cho các hệ thống phân tán siêu phương tiện (hypermedia) như World Wide Web Đơn giản hơn, nó là một bộ các ràng buộc và nguyên tắc, mà nếu áp dụng đầy đủ thì ta sẽ có một hệ thống REST
3.4.2 Các ràng buộc của REST
3.4.2.1 Client-Server
Nguyên tắc thứ nhất đó là sử dụng kiểu kiến trúc client-server Hay nói cách khác, client và server sẽ riêng lẽ, độc lập với nhau Sự phân cách này sẽ giúp client không cần phải quan tâm đến những tác vụ như kết nối database, quản
lý cache, …
Các lợi ích khác như:
Dễ dàng phát triển giao diện người dùng theo nhiều nền tảng khác nhau
Nâng cao khả năng mở rộng cho server bằng cách đơn giản hóa các thành phần của server
Server và client có thể được thay thế và phát triển mà không phụ thuộc vào nhau
3.4.2.2 Stateless
Giao tiếp giữa client và server phải phi trạng thái (stateless) Server không lưu giữ ngữ cảnh, trạng thái giữa các lần request (yêu cầu) của client Có nghĩa là mỗi request từ client lên server phải bao gồm tất cả các thông tin cần thiết để server có thể hiểu được
Ràng buộc này có một số ưu và nhược điểm như:
Server được đơn giản hóa vì mỗi request không phụ thuộc vào nhau
Trang 39 Cải thiện độ tin cậy
Cải thiện khả năng mở rộng vì server không cần phải lưu trạng thái phiên (session state) hay quản lý tài nguyên giữa các request
Giảm hiệu suất mạng vì phải gia tăng lượng thông tin cần truyền tải ở mỗi request
3.4.2.3 Cache
Các response (trả lời) từ server có thể được cache tại client hoặc tại cache server Các response này phải ngầm định hoặc rõ ràng xác định rằng nó có thể cache được hay không, nhằm ngăn việc client có thể sử dụng các dữ liệu cũ hoặc không thích hợp
Lợi ích của ràng buộc này là nó giúp nâng cao trải nghiệm người dùng, hiệu năng hệ thống vì có thể loại bỏ một phần hay hoàn toàn một vài tương tác, làm giảm độ trễ mạng Thế nhưng, nó có thể làm giảm độ tin cậy nếu như dữ liệu
cũ trong cache khác với dữ liệu đáng lẽ sẽ nhận được nếu request đó gửi thẳng lên server
3.4.2.4 Uniform Interface
Tính năng trung tâm của kiến trúc REST phân biệt nó với các kiến trúc nền tảng mạng khác chính là việc chú trọng vào một giao diện thống nhất giữa các thành phần
Để có được một giao diện thống nhất, cần có nhiều ràng buộc kiến trúc để hướng dẫn hành vi của các thành phần REST được định nghĩa bằng bốn ràng buộc về giao diện:
Identification of resources – Sự định danh của các tài nguyên
Manipulation of resources through representations – Điều khiển tài nguyên thông qua các đại diện
Self-descriptive messages – Thông điệp tự mô tả
Hypermedia as the engine of application state – Siêu phương tiện như một công cụ của trạng thái ứng dụng
Các ràng buộc này sẽ được trình bày rõ hơn trong mục 3.4.3
Trang 403.4.2.5 Layered System
Hệ thống được chia thành từng lớp, mỗi lớp chỉ sử dụng lớp ở dưới nó và giao tiếp với lớp ở ngay trên nó Điều này giúp giảm độ phức tạp của hệ thống, giúp các thành phần tách biệt nhau từ đó dễ dàng mở rộng từng thành phần
Một số ưu và nhược điểm của ràng buộc này:
Cho phép chia sẻ cache trên toàn mạng
Nâng cao khả năng mở rộng qua việc cache và cân bằng tải
Đơn giản hóa client bằng việc giấu đi các thông tin không mong muốn
3.4.3 Các ràng buộc giao diện trong hệ thống REST
3.4.3.1 Tài nguyên và định danh tài nguyên
Trong REST, tài nguyên (resource) là bất cứ thông tin gì có thể gọi tên được, như: một tài liệu hay hình ảnh, một dịch vụ tạm thời, một tập hợp các tài nguyên khác, một đối tượng không ảo (ví dụ con người), …
REST sử dụng một định danh tài nguyên (resource identifier) để xác định một tài nguyên cụ thể tham gia vào một tương tác giữa các thành phần Một điều quan trọng là ràng buộc thống nhất giao diện của REST không chuẩn hóa định danh tài nguyên này, mà nó chỉ chuẩn hóa cú pháp để thể hiện định danh tài nguyên Trong đó cú pháp phổ biến nhất chính là cú pháp Uniform Resource Identifier (URI) của Web
Hay nói đơn giản hơn, trong REST, một URI dùng để xác định chỉ một tài nguyên
3.4.3.2 Đại diện và điều khiển tài nguyên qua các đại diện
Các thành phần của REST thực hiện các hành động trên một tài nguyên bằng việc sử dụng một đại diện để nắm bắt trạng thái hiện tại hoặc trạng thái có ý định của tài nguyên đó và chuyển giao đại diện đó giữa các thành phần Một