Giới thiệu
Hiện nay trong kỷ nguyên hậu PC, smartphone và tablet lên ngôi, nhu cầu xây dựng các ứng dụng mobile trên Windows Phone, iOS, Android đồng bộ dữ liệu đến server theo mô hình điện toán đám mây đang trở nên rất hot. Nếu quyết định xây dựng phía server sử dụng .NET Framework (với phiên bản mới nhất 4.5.3) thì lập trình viên có thể tạo ra các HTTP service bằng rất nhiều công nghệ khác nhau như là:
- Web service (ASMX)
- WCF service
- WCF REST service
- Web API service
Điều này rất tốt vì nó cho phép lập trình viên có nhiều lựa chọn hơn trong việc xây dựng các HTTP service dựa trên nền .NET nhưng với những người mới tiếp cận .NET Framework sẽ rối không biết cần phải sử dụng công nghệ nào để bắt đầu. Trong bài viết này chúng ta sẽ cùng điểm qua các công nghệ này để thấy được sự khác nhau giữa chúng từ đó có một cái nhìn toàn diện nhất về các công nghệ service trên .NET đồng thời quyết định được công nghệ nào là phù hợp nhất với nhu cầu của mình.
Web Service
- Đây là công nghệ cũ nhất của .NET Framework
- Nó dựa trên
SOAP (Simple Object Access protocol)
dữ liệu trả về dạng XML - Chỉ hỗ trợ giao thức HTTP
- Không phải Open Source nhưng có thể sử dụng được với bất cứ client nào hỗ trợ XML
- Chỉ có thể host trên IIS
Ưu điểm:
- Code và Test đơn giản
Nhược điểm:
- Chỉ hỗ trợ giao thức SOAP để truyền nhận dữ liệu nên performance không cao
- Không thể tạo ra service dạng REST hỗ trợ định dạng dữ liệu JSON
WCF (.NET 3.0 trở lên)
- Cũng dựa trên SOAP và trả về dữ liệu dạng XML
- Phát triển dựa trên Web service và hỗ trợ thêm rất nhiều giao thức khác nhau như: TCP, HTTP, HTTPS, Named Pipes, MSMQ.
- Giống Web service không phải Open Source nhưng có thể sử dụng bởi các client hỗ trợ XML
- Có thể host được trong ứng dụng, trên IIS hoặc Windows Service
Ưu điểm:
- Hỗ trợ nhiều giao thức với nhiều kiểu binding khác nhau đặc biệt là HTTPS
- Hỗ trợ nhiều định dạng dữ liệu XML, ATOM…
Nhược điểm:
- Cấu hình rất phức tạp và rối rắm, chắc chắn các lập trình viên mới dùng không thể cấu hình được nếu không sử dụng Configuration Tool & Google
- Kiến trúc rất phức tạp và cồng kềnh
WCF REST (.NET 3.5 trở lên)
- Là bản nâng cấp đáng giá của WCF với việc trên .NET 3.5 Microsoft bổ sung webHttpBinding để hỗ trợ RESTful service
- Hỗ trợ 2 HTTP verb GET, POST để truyền nhận dữ liệu với 2 thuộc tính tương ứng là WebGet và WebInvoke
- Muốn sử dụng các HTTP verb khác như PUT, DELETE cần cấu hình thêm trên IIS
- Hỗ trợ các định dạng dữ liệu XML, ATOM, JSON
Ưu điểm:
- Bổ sung hỗ trợ RESTful service với định dạng dữ liệu JSON nhẹ hơn SOAP với dữ liệu XML rất nhiều
- Cho phép cấu hình tham số WebGet qua URI sử dụng UriTemplate
Nhược điểm:
- Chưa hoàn toàn phải là RESTful service, mới chỉ hỗ trợ mặc định GET, POST
- Cấu hình khó nhớ (cố hữu của WCF)
Nếu bạn muốn biết cách thức xây dựng một service dạng này từng bước như thế nào, hãy xem qua bài viết sau:
Web API (.NET 4 trở lên)
- Đây là một framework mới giúp cho việc xây dựng các HTTP service rất đơn giản và nhanh chóng
- 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ư smartphone, tablet
- Định dạng dữ liệu có thể là JSON, XML hoặc một kiểu dữ liệu bất kỳ
Ưu điểm:
- Cấu hình hết sức đơn giản khi so với WCF
- Performance cao
- Hỗ trợ RESTful đầ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
- Open Source
Nhược điểm:
- Còn rất mới nên chưa có nhiều đánh giá về nhược điểm của Web API
Nếu bạn muốn biết cách thức xây dựng một service dạng này từng bước như thế nào, hãy xem qua bài viết sau:
Vậy tôi nên lựa chọn framework nào để phát triển HTTP Service?
Câu trả lời sẽ tùy thuộc vào yêu cầu công việc cụ thể của bạn như thế nào?
Web Service:
- Lựa chọn khi bạn chỉ cần xây dựng một service đơn giản
WCF là lựa chọn số một khi xây dựng:
- Service cần hỗ trợ những ngữ cảnh đặc biệt như: message queue, duplex communication…
- Service sử dụng những kênh truyền dữ liệu ở tầng thấp cho nhanh như: TCP, Named Pipes, UDP…
WCF Rest, Web API được sử dụng khi xây dựng:
- Service RESTful hỗ trợ đầy đủ các thành phần HTTP: URI, request/response headers, caching, versioning, content formats
- Service cung cấp dữ liệu cho nhiều client khác nhau với băng thông giới hạn như: browser, mobile, tablet…
Kết luận
Qua bài viết này chúng ta đã có một cái nhìn tổng quan hơn về 4 công nghệ hỗ trợ tạo HTTP service trên nền tảng .NET: Web Service, WCF, WCF REST, Web API. Với sự phát triển vũ bão của các thiết bị smartphone, tablet như hiện nay các công nghệ WCF REST và mới đây nhất là WEB API đang nổi lên là những công nghệ lý tưởng nhất cho việc xây dựng các ứng dụng điện toán đám mây. Việc nắm bắt được các công nghệ này là nhu cầu cấp thiết của các lập trình viên vì vậy trong các bài viết sau chúng ta sẽ cùng tìm hiểu chi tiết về cách tạo và sử dụng các service này.
Happy sharing. Stay tuned.
Nguyễn Anh Bằng says
Cho cái ví dụ Web API anh ơi 😀
tungnt185 says
OK chú Bằng cuối tuần anh sẽ post lên. Vui lòng chờ nhé.
trungnd1985 says
WCF phải nói từ 3.0 trở lên chứ từ 3.5 trở xuống nó không chính xác
tungnt185 says
Thanks Trung béo nhé. Bạn đã sửa lại rồi
tùng says
việc support https của 4 công nghệ này thì thế nào? bạn nói rõ giúp mình nhé.
tungnt185 says
Cả 4 công nghệ trên đều support https tùng nhé.
tung says
OK, cam on ban nhieu
Thien Nguyen Hoang says
[WebMethod]
public string HelloWorld()
{
return “Hello World”;
}
như vậy là kiểu nào của mấy kiểu trên vậy chủ top
tungnt185 says
Chào Thien,
Đây chính là Web Service asmx thông thường trên .NET. Nó là kiểu một ở trên.
Regards.
Thìn says
Cảm ơn anh nhé, bài viết rất hay!
Đợi bài viết tới của anh.
Song Nguyen Van says
Mình thấy trong webservice asmx thông thường cũng có thể trả về dạng Json được. mình sử dung thư viện System.Web.Script.Serialization để Serialize nó trả về dạng json. Vậy là đúng hay sai ạ
tungnt185 says
Hi Song,
Web service asmx cũng có thể trả json nhưng nó không phải mặc định là có.
Một số giới hạn như chỉ chạy với POST request (tất nhiên vẫn có thể cấu hình hỗ trợ cả GET nhưng khá thủ công).
Cảm ơn bạn đã phản hồi.
Thao Trinh says
Cảm ơn bạn vì bài viết.
tungnt185 says
Cảm ơn Thao,
Hãy subsribe blog để ủng hộ mình nhé.
Thanks
nhanh hanh says
ban ay chua hieu ro va het ve Wcf restful , nen bai viet dam noi la
1-khong ho tro day du restful….
2-cau hinh kho nho
Thiện says
Cám ơn bạn về bài viết!
Mình nghĩ có một vấn đề nhỏ cần bạn làm rõ hơn ở cách gọi “HTTP service” ở đầu bài viết.
Theo mình hiểu 4 loại “HTTP service” bạn nêu ra đều là API chạy thông qua network và gọi là web service.
Còn loại 1 bạn gọi là Web Service thì ko biết thế nào?
Cám ơn bạn,
Thiện
tungnt185 says
Thanks Thiện đã góp ý.
Đúng là cả 4 loại đều là web service, loại web service đầu tiên thì đang muốn nói đến web service cơ bản nhất trên .NET là asmx nên gọi là web service luôn cho dễ hình dung chứ cũng chưa biết đặt tên là gì khác bạn ạ.
Regards
Khánh says
Cho hỏi ngu cái.
Với những tính năng và đặc điểm như trên, mình có thể làm 1 trang (có thể dùng asp.net hay asp classic hay pascal…) mà khi truyền: html template -> web page, xml template -> xml data, json template -> json data…Việc Resfull thì đọc và xử lý header verb thôi.
Cần gì phải sử dụng nhiều cái rối rắm vậy?
tungnt185 says
Hi bạn, trang web thì thường dùng để hiển thị ra cho người dùng. Còn restful service thì tương tác phía đằng sau hệ thống nên người ta mới tạo ra nhiều công nghệ web service như vậy. Mục đích cuối cùng cũng là cung cấp những framework để làm web service nhanh và dễ dàng hơn cho developer.
Regards.
Nguyễn Trung Phú says
Hi anh ! Em có 2 vấn đề mong anh giúp với !
1. Em cần một web service chạy restful để thao tác
2. Đối với web service đó sẽ trả lại xml hoặc json vậy chúng ta có thể lấy đầu ra của web service đó để tạo một web service khác bằng restful được không . Em tìm hiểu trên Internet thì chỉ toàn mô phỏng bằng dữ liệu trên localhost. Nhưng bây giờ thì em muốn tạo một web service bằng restful để đọc lại dữ liệu từ web service khác chạy restful ấy ah ! Mong anh chỉ bảo !
tungnt185 says
Hi Phú,
1) Web service thì e cứ dùng ASP.NET Web API cho đơn giản
2) Việc lấy dữ liệu từ web service để làm đầu vào cho service khác là chuyện bình thường, đó chỉ là logic code như code thông thường thôi e. E nên thử có gì khó cần mô tả cụ thể a mới trợ giúp được.
Thanks