XÂY DỰNG VÀ TRIỂN KHAI WEB SERVICE CHO ỨNG DỤNG DI ĐỘNGHiện nay, nhu cầu về sự tương tác giữa người dùng, giữa client – server trong các ứng dụng đang ngày càng nâng cao. Vì vậy, công nghệ Web Service được ra đời nhiều ưu điểm như: Có thể chạy trên nhiều nền tảng khác nhau, sử dụng các giao thức và các chuẩn mở, nâng cao khả năng tái sử dụng… Với lợi thế khi đa phần các kỹ thuật của Web Service đều được xây dựng dựa trên mã nguồn mở và được phát triển theo các chuẩn đã công nhận, công nghệ Web Service đang được các nhà phát triển ứng dụng lựa chọn như một giải pháp tối ưu và hiệu quả nhất. Cùng với xu thế đó, Web Service chính là một phần kiến thức không thể thiếu đối với các lập trình viên di động chuyên nghiệp. Môn học “Xây Dựng Và Triển Khai Web Service Cho Ứng Dụng Di Động” với hi vọng giúp bạn bổ sung những kiến thức cần thiết và nâng cao kỹ năng phát triển ứng dụng di động thực tế. Sau khi hoàn thành môn học này, các bạn sẽ có khả năng:Tự xây dựng Web Service hoàn chỉnh sử dụng: LinQ, Entity Framework.Triển khai Web Service lên server.Tương tác giữa Web Service với ứng dụng trên thiết bị di động.Tương tác Web Service với các Web Service khác.Tự xây dựng dự án với Web Service hoàn chỉnh.
Trang 1Xây dựng Web Service dùng API REST ful Service
Bài 1: Xây dựng Web Service dùng API RESTful Service (phần 1)
Trong bài này Tui sẽ trình bày cách tạo web service dùng API RESTful Service, mộtnền tảng mới được hỗ trợ từ net version 4.0 trở lên Những bạn lập trình về thiết bị
di động cần phải hiểu được các khái niệm cũng như cơ chế vận hành sử dụng API RESTful, theo Tui thấy nó khá hay và rất tiện lợi trong việc triển khai các dự án liên quan tới tương tác dữ liệu trên Server
Trước khi triển khai webservice, các bạn cần đọc và hiểu khái niệm qua 4 mục dưới đây:
1 Giới thiệu về ASP.NET Web API
2 Giới thiệu cơ bản về RESTful Service
3 Các nguyên tắc cơ bản để tạo ra RESTful Service
4 Xây dựng Web Service
1.Giới thiệu về ASP.NET Web API
ASP.NET Web API là gì?
Là framework giúp chúng ta tạo ra các Web API – API trên nền web (HTTP).
Web API là các dịch vụ Web (Web service) được xây dựng dựa trên HTTP sử dụng
mô hình lập trình convention (như ASP.NET MVC)
Trang 2Đặc điểm Web API (.NET 4.0 trơ lên)
Giúp cho việc xây dựng các HTTP service rất đơn giản, nhanh chóng
Mã nguồn mở (Open Source) và có thể được sử dụng bởi bất kì client nào hỗ trợ XML, JSON
Hỗ trợ đầy đủ các thành phần HTTP: URI, request/response headers, caching,versioning, content formats
Có thể host trong ứng dụng hoặc trên IIS
Kiến trúc lý tưởng cho các thiết bị có băng thông giới hạn như các thiết bị di động
Định dạng dữ liệu có thể là JSON, XML hoặc một kiểu dữ liệu bất kỳ
Làm mới và hiện đại hóa các mẫu dự án mặc định
Mẫu dự án trên điện thoại di động
Nhiều tính năng mới để hỗ trợ các ứng dụng di động
Tùy chỉnh sinh mã(code)
Tăng cường hỗ trợ cho các phương pháp bất đồng bộ
Đọc danh sách đầy đủ tính năng trong các ghi chú phát hành
Trang 3Ưu điểm của Web API
Cấu hình đơn giản hơn nhiều so với WCF
Hiệu suất(performance) cao
Hỗ trợ RESTfull đầy đủ
Hỗ trợ đầy đủ các thành phần MVC như: routing, controller, action result, filter, model binder, IoC container, dependency injection, unit test, …
Mã nguồn mở (Open source)
2 Giới thiệu cơ bản về RESTful Service
-Là một dịch vụ web đơn giản sử dụng HTTP và tính chất của REST
-Nó tuân thủ theo 4 nguyên tắc thiết kế cơ bản sau:
Sử dụng các phương thức HTTP một cách rõ ràng
Phi trạng thái
Hiển thị cấu trúc thư mục như URls
Chuyển đổi linh hoạt JavaScript Object Notation (JSON) và XML hoặc cả hai
3 Nguyên tắc cơ bản để tạo ra RESTful Service
4 nguyên tắc thiết kế cơ bản sau:
Nguyên tắc 1: Sử dụng các phương thức HTTP một cách rõ ràng
Thiết lập một ánh xạ 1-1 giữa các hành động: tạo, đọc, cập nhật và xoá (CRUD) các quá trình vận hành và các phương thức HTTP:
POST (HttpPost) – Tạo một tài nguyên trên máy chủ
GET (HttpGet) – Truy xuất một tài nguyên
Trang 4 PUT (HttpPut) – Thay đổi trạng thái một tài nguyên hoặc để cập nhật nó
DELETE (HttpDelete) – Huỷ bỏ hoặc xoá một tài nguyên
Nguyên tắc 2: Phi trạng thái
Ta xem mô hình giữa trạng thái và phi trạng thái để dễ so sánh:
Mô hình phi trạng thái:
Mô hình trạng thái:
Nguyên tắc 3: Hiển thị cấu trúc thư mục như URls
Cấu trúc địa chỉ của RESTful service:
Giấu các đuôi tài liệu mở rộng của bản gốc trong máy chủ (.jsp, php, asp)
Để mọi thứ là chữ thường (thực ra là không phân biệt, nhưng cũng nên tuân thủ để khỏi phải nhớ HOA-thường lung tung)
Thay thế các khoảng trống bằng gạch chân hoặc gạch nối (một trong hai loại)
Tránh các chuỗi yêu cầu
Trang 5 Thay vì sử dụng mã (404 Not Found) khi yêu cầu địa chỉ cho một phần đườngdẫn thì luôn luôn cung cấp một trang mặc định hoặc tài nguyên như một phản hồi.
Nguyên tắc 4: Chuyển đổi JavaScript Object Notation (JSON) và XML hoặc cả hai.
Là một bản tóm tắt các thuộc tính của những thứ trong mô hình dữ liệu hệ thống
Định dạng dữ liệu mà ứng dụng và trao đổi dịch vụ trong mức đáp ứng yêu cầu/ phản hồi hoặc trong phần thân của HTTP
Các chủ thể trong mô hình dữ liệu có liên quan với nhau
Cấu trúc dịch vụ sao cho nó tận dụng được phần đầu chấp nhận HTTP có sẵn bên trong – một loại MIME
4.Xây dựng Web Service
Tui liệt kê các bước tương đối (chi tiết sẽ trình bày trong bài kế tiếp):
Bước 3: Tạo ra các Web API
Nhấp chuột phải vào thư mục Controllers và chọn thêm controller
Web API 2 Controller Empty: tự viết các phương thức từ đầu.
Trang 6 Web API 2 Controller with read/write actions: phát sinh các phương thức
ví dụ để bạn có thể biết cách viết các service này
Bước 4: Chạy thử và kiểm tra.
Bài kế tiếp Tui sẽ trình bày chi tiết cách tạo Web API service, cách cấu hình cũng như sử dụng Service
Trang 7Bài 2: Xây dựng Web Service dùng API RESTful Service
Trong bài này Tui sẽ hướng dẫn chi tiết cách tạo Web API (lý thuyết ở đây), cách
cấu hình IIS, cách sử dụng công cụ Postman(với những ai dùng chrome), cách sử dụng HttpRequester (với những ai dùng Firefox) Postman và HttpRequester là
một trong những công cụ hiệu quả nhất để TEST coding của ta, nếu code của ta passqua được công cụ này thì có thể kết luận rằng Webservice của ta chắc chắn hoạt động tốt
Để cho có cảm giác Tui sẽ tạo một cơ sở dữ liệu SQL Server, WebAPI sẽ tương tác
dữ liệu này bằng cách sử dụng LinQ to SQL:
Bước 1: Tạo cơ sở dữ liệu tên “dbFood”, có một bảng “Food” gồm 4 cột (id để auto)
như dưới đây:
Các bạn có thể tải SQL Script ở đây để tạo CSDL cho
Bước 2: Tiến hành viết Web API
Để tạo Project sử dụng Web API có nhiều cách tạo, ở đây Tui sử dụng cách đơn giảnnhất để các bạn bớt rối
Từ Visual Studio 2013 vào menu File/chọn new/ chọn Project:
Trang 8Sau khi chọn Project, màn hình sau xuất hiện:
Chọn các cấu hình như trên, đặt tên Project là “FoodServer” rồi nhấn OK.
Project mặc định ban đầu như sau:
Giờ ta tiến hành tạo LinQ to SQL cho CSDL dbFood để dễ xử lý như sau:
Bấm chuột phải vào Project/ chọn :
Trang 9Màn hình tạo tên LINQ to SQL hiển thị lên, ta tạo tên rồi nhấn OK:
(chú ý đôi khi bạn sẽ không thấy LINQ to SQL Classes ở màn hình này), nếu không thấy thì chọn New Item:
Ta chọn các mục giống như bên dưới, tìm tới LINQ to SQL Classes rồi đặt tên DBFood tương tự như trên:
Trang 10Cả 2 cách cuối cùng cũng trạo được DBFood LINQ như sau:
– Ta tiến hành cấu hình để kéo Cơ sở dữ liệu vào làm các lớp tương tác:
Bạ mở Server Explorer (vào menu View/Server Explorer), bấm chọn theo các bước như bên dưới (lệ thuộc vào Server của bạn mà chọn Server name, User đăng nhập cho phù hợp):
Trang 11Khi khi bấm OK, bạn sẽ thấy Server Explorer có thêm mục sau:
Bạn kéo thả bảng Food vào mục bên phải như hình trên
Trang 12Tiếp theo bạn tạo 1 thư mục (tên gì cũng được), ở đây Tui đặt đại tên Controllers (bấm chuột phải vào Project/chọn Add/chọn New Folder):
Sau khi thư mục Controllers được tạo ra, bạn bấm chuột phải vào Thư Mục này rồi
chọn Add/Controller :
Sau khi bạn chọn Controller… màn hình sau xuất hiện:
Trang 13Ta chọn Web API 2 Controller – Empty rồi bấm Add, Visual sẽ hiển thị màn hình
đặt tên cho Controller:
Mặ
c định là chữ Default, bây giờ bạn đổi lại thành Food (thường ta làm API cho bảng nào thì lấy tên bảng đó), đó là lý do vì sao Tui đặt là Food:
Tậ
p tin FoodController.cs sẽ được tạo ra, nhưng ta chỉ lấy Food(bỏ chữ Controller
đằng sau đi) để tương tác (đây là cơ chế hoạt động) Ta xem cấu trúc Controller đượctạo ra:
Trang 14Cấu trúc có gì?
File WebApiConfig.cs được sinh ra trong thư mục App_Start, bạn để ý
routeTemplate: “api/{controller}/{id}”, tức là khi ta dùng thì viết: “api/food” để lấytoàn bộ danh sách, hay “api/food/3” để lấy chi tiết 1 Food có mã là 3
File FoodController.cs kế thừa từ ApiController
Bây giờ ta tiến hành viết các chức năng (viết trong file FoodController.cs) :
HttpGet: Truy vấn thông tin
HttpPost: Thêm mới thông tin
HttpPut: Thay đổi thông tin
HttpDelete: Xóa thông tin
Trước tiên ta làm HttpGet:
Trang 15DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
}
}
}
Chú ý là Web API nó không quan tâm tới tên phương thức (viết tên gì cũng được, nó
tự động lấy chính xác Service yêu cầu), (không cho phép trùng tên biến) Ví dụ nếu bạn cố tình tạo thêm 1 hàm:
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
}
Khi chạy sẽ báo lỗi ngày (vì hệ thống không quan tâm tên hàm), nó thấy 2
biến id giống nhau ở trên 2 hàm nó sẽ không biết dùng cái nào (vì chúng cùng nhóm HttpGet) Cụ thể là lỗi sau:
Trang 16“Multiple actions were found that match the request:
GetFood on type FoodServer.Controllers.FoodController
GetFood_test on type FoodServer.Controllers.FoodController”
Tiếp theo ta viết HttpPost (thêm mới):
/// <param name="price">đơn giá</param>
/// <returns>true thành công, false thất bại</returns>
DBFoodDataContext db = new DBFoodDataContext();
Food food = new Food();
/// <param name="id">mã food muốn sửa</param>
/// <param name="name">tên mới</param>
/// <param name="type">loại mới</param>
/// <param name="price">giá mới</param>
Trang 17DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x=>x.id==id);
if (food == null) return false;//không tồn tại false
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x => x.id == id);
if (food == null) return false;
Trang 18DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
/// <param name="price">đơn giá</param>
/// <returns>true thành công, false thất bại</returns>
DBFoodDataContext db = new DBFoodDataContext();
Food food = new Food();
Trang 19/// <param name="id">mã food muốn sửa</param>
/// <param name="name">tên mới</param>
/// <param name="type">loại mới</param>
/// <param name="price">giá mới</param>
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x=>x.id==id);
if (food == null) return false;//không tồn tại false
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x => x.id == id);
if (food == null) return false;
db.Foods.DeleteOnSubmit(food);
db.SubmitChanges();
return true;
}
Trang 21Bạn cấu hình như trên, Port tui chỉnh là 8888, bạn chọn Port nào cũng được, nhưng thường là 4 chữ số.
Sau đó bấm Create Virtual Directory:
Nếu Visual thông báo màn hình trên coi như bạn thành công
Bây giờ ta thử chức năng HttpGet để lấy toàn bộ Food và lấy 1 Food theo id bất kỳ:F5 để chạy Project:
Trang 22Bạn chỉnh lại: http://localhost:8888/api/food để lấy toàn bộ Food:
Trang 23Để lấy 1 Food có mã bất kỳ:
Ví dụ: Lấy Food có mã id=15: http://localhost:8888/api/food/15
Trang 24Hoặc: http://localhost:8888/api/food?id=15
Ta cần phải biết các
công cụ để test HttpGet,HttpPost,HttpPut và HttpDelete.
Bài kế tiếp Tui sẽ hướng dẫn cách dùng công cụ Postman và HttpRequester để xử lý
Trang 25Bài 3: Xây dựng Web Service dùng API REST ful Service
Trong bài này Tui hướng dẫn các bạn cách sử dụng 2 công
cụ HttpRequester (firefox addon) và Postman (chrome addon) Các bạn cần nắm
Trang 26Mục URL: Nhập URL Web API của bạn vào (http://localhost:8888/api/food) Bạn nhấn GET, chương trình sẽ lấy toàn bộ danh sách Food vào màn hình bên phải (bạn quan sát sẽ thấy).
Để Test lấy 1 Food theo mã nào đó bạn làm như sau:
Trang 27Bạn vào tab Parameters, nhập tên biến + giá trị rồi nhấn Add Sau đó bấm nút GET
để lấy dữ liệu, như bạn quan sát đó Tui nhập id=15 thì chương trình lấy ra được Food “Hột mít vùi tro”
-Test HTTP POST:
Đối với POST bạn cũng vào Parameters, nhập đủ parameters (phải giống như viết trong Web API), sau đó nhấn nút “POST”, bạn thấy kết quả trả về là true—> tức là thêm thành công Bạn có thể test lại chức năng HTTP GET để xem lại kết quả thêm mới này
Trang 28Giờ Tui làm tiếp trường hợp Delete:
Trong combobox, bạn chọn DELETE, nhập Parameter rồi bấm Submit, thấy kết quả
là true==> xóa thành công
Trang 29Kích hoạt postman để sử dụng.
Để lấy toàn bộ dữ liệu (HttpGet) ta chọn Get như hình dưới đây:
Để lấy 1 Food theo mã ta làm theo các bước dưới đây (Ví dụ lấy Food có id=1):
Trang 30Để sử dụng HttpPost (tạo Food mới) ta làm theo các bước dưới đây:
Ở trên khi bấm Send, trả về true==> thêm Food thành công
Để xóa một Food có mã bất kỳ:
Trang 31Trên đây là cách sử dụng HttpRequester và Postman, 2 công cụ này rất hiệu quả
giúp chúng ta kiểm tra quá trình thực hiện HttpPost,HttpGet,HttpPut,HttpDelete trước khi triển khai vào hệ thống thực
Trang 32Bài 4: Xây dựng Web Service dùng API REST ful Service
Trong bài bài 68 và bài 69 và bài 70 các bạn đã hiểu được RESTful cũng như cách thức hoạt động của HttpPost, HttpGet, HttpPut và HttpDelete Tuy nhiên để tương tác được với nó thì cần cấu hình lên Webserver, cụ thể là IIS, trước đây Tui có
hướng dẫn các bạn cách tạo lên somee.com, các bạn có thể xem lại bài hướng dẫn này ở đây
Trong bài này Tui sẽ hướng dẫn các bạn từng bước cài đặt lên IIS Server ở máy localcủa các bạn, việc test trên máy local cũng khá quan trọng vì khi test hoàn chỉnh xongthì ta mới publish ra ngoài
Dưới đây là chi tiết từng bước cách dựng IIS Server và cách triển khai FoodServer lên IIS này (Tui setup trên Win 10, 64 bit)
Bước 1: Vào Control panel chọn Programs and Features
Bước 2: Chọn Turn Windows features on or off:
Trang 33Bước 3:
Tiến hành lựa chọn để cài IIS Web Server theo màn hình dưới đây:
Trang 34Sau khi lựa chọn giống như khung khoanh màu đỏ, nhấn OK để tiến hành cài đặt, tùy thuộc vào máy
mà chương trình có thể cài từ 5-10 phút
Bước 4: Sử dụng IIS Web Server:
Sau khi cài xong IIS Web Server, bạn quay lại màn hình Control panel, bạn sẽ thấy Administrative Tools:
Trang 35Bạn click vào biểu tượng Administrative Tools, ta có giao diện tiếp theo:
B
ạn chọn “Internet Information Services (IIS) Manager” như hình trên:
Trang 36Trong màn hình quản trị bạn thấy có 2 vùng: Application Pools và Default Web site.
Bước 4.1 Cấu hình Application Pools:
Application Pool là gì?
Application Pool có thể chứa một hoặc nhiều ứng dụng và cho phép chúng ta cấu hình cấp độ giữa các ứng dụng web khác nhau Ví dụ, nếu bạn muốn cô lập tất cả các ứng dụng web chạy trong cùng một máy, bạn có thể làm điều này bằng cách tạo
ra Application Pool riêng biệt cho mỗi ứng dụng web và đặt chúng trong ApplicationPool tương ứng Bởi vì mỗi Application Pool chạy trong quá trình làm việc riêng củamình, các lỗi trong Application Pool sẽ không ảnh hưởng đến các ứng dụng đang chạy trong Application Pool khác Triển khai ứng dụng trong Application Pool là lợi thế chính của IIS trong quá trình làm việc ở chế độ cách ly bởi vì bạn có thể tùy chỉnh Application Pool để đạt được cấp độ tách biệt ứng dụng mà bạn cần
Khi bạn cấu hình Application Pool để sẵn sàng tối ưu, bạn cũng nên xem xét làm thếnào để cấu hình Application Pool bảo mật ứng dụng Ví dụ, bạn có thể cần phải tạo
ra Application Pool riêng cho ứng dụng đòi hỏi mức độ bảo mật cao, trong khi cho phép các ứng dụng đòi hỏi một mức độ thấp hơn của bảo mật để chia sẻ cùng
Application Pool
Bạn bấm chuột phải vào màn hình Application Pools/ chọn Add Application Pool… như hình dưới đây:
Trang 37Màn hình tạo mới Application Pool hiển thị lên, ta nhập “FoodServer_Pool” rồi
bấm OK:
Sau khi bấm OK, bạn quan sát: