Giới thiệu về ASP.NET Web API

Giới thiệu về ASP.NET Web API
access_time 10/23/2015 12:00:00 AM
person Đào Minh Giang

1.      Giới thiệu

Cùng với việc giới thiệu các công nghệ dịch vụ (service) trong thập niên gần đây, Microsoft đã tạo nên một chuỗi các công nghệ cho phép dễ dàng xây dựng và hỗ trợ các dịch vụ web trên nền tảng .NET:
Bắt đầu với XML Web Service, rồi sau đó được mở rộng thông qua  Windows Communication Foundation vài năm sau đó, Microsoft đã cho phép các nhà phát triển .NET có nhiều lựa chọn để xây dựng các dịch vụ trên cơ sở SOAP. Chỉ với một số thay đổi nhỏ trong cấu hình, sẽ cho phép bạn hỗ trợ rất nhiều thiết bị đa dạng về giao thức kết nối, cơ chế xác thực, định dạng thông báo cùng các chuẩn hỗ trợ bảo mật WS-* với WCF.
Nhưng khi thế giới các thiết bị kết nối phát triển, kéo theo nhu cầu về các giao tiếp đơn giản HTTP – chỉ sử dụng nền tảng dịch vụ - bỏ qua các yếu tố phức tạp như xác thực liên đoàn (federated authentication) hay mã hóa thông báo, cũng như không cần phải tạo phiên giao dịch (transaction), khám phá dịch vụ trên cơ sở Ngôn ngữ mô tả dịch vụ (Web Services Description Language – WSDL), …
Theo một cách đơn giản, đó là các giao tiếp dịch vụ di động (mobile-to-service) và trên cơ sở trình duyệt, các ứng dụng trang đơn lẻ (Single-Page Application – SPA). Khi đó các nhà phát triển có thể tạo các ứng dụng trên nền JavaScript, các ứng dụng mobile giá rất rẻ (nhỏ hơn 1 USD) – và các ứng dụng đó chỉ cần giao thức HTTP đơn giản, giao tiếp dữ liệu backend tương thích JSON.
Đáp lại đó, Microsoft đã tạo ra ASP.NET Web API, một nền tảng đầy hiệu quả mà rất đơn giản với giao thức HTTP và dịch vụ web theo mặc định sử dụng JSON. Các model làm việc  để xử lý và trả về được đóng gói qua các đối tượng đơn giản (Plain Old CLR Objects)

2.      Những lợi ích khi sử dụng ASP.NET Web API

a.       Cấu hình
Ngay khi bạn xây dựng một website, không cần bất kỳ cấu hình gì chúng ta đã có thể cài đặt và sử dụng dịch vụ trên nền ASP.NET Web API. Khái niệm điểm đầu cuối (xuất hiện trong WCF) không còn, và cũng không cần contract. Và bạn sẽ thấy ngay sau đây, một dịch vụ trên nền ASP.NET Web API được thiết lập lỏng lẻo nếu ta so sánh với dịch vụ WCF. Theo đó bạn chỉ cần sử dụng REST (Representational State Transfer – các bạn có thể xem chú giải vắn tắt về REST ở cuối bài) URL, cùng các tham số đầu vào, và kết quả trả về là các bản tin JSON hay XML.
b.      Mặc định sử dụng REST
Việc xây dựng các dịch vụ với ASP.NET Web API cung cấp cho ta hầu hết những thành phần thiết yếu để xây dựng kiến trúc REST. Đó là bởi vì tính năng điều hướng (Route) URL tích hợp ngay trong nền tảng, các địa chỉ dịch vụ với ASP.NET Web API là các điều hướng RESTful ánh xạ với các phương thức của controller. Vì thế cho phép sử dụng các đường dẫn theo phong cách REST rất thân thiện.
c.       Trìu tượng hóa với các Route
Tương tự như các giao diện dịch vụ và sự thực thi chúng trên WCF, các route cho phép nhà phát triển ASP.NET Web API tạo ra lớp trìu tương giữa bên yêu cầu nhìn thấy và sự thực thi ở lớp dưới. Nói theo cách khác thì bạn có thể gắn kết bất cứ URL nào với bất cứ phương thức nào của các controller.
Với sự thay đổi về phiên bản dịch vụ, chỉ đơn giản bằng cách thêm một route mới (ví dụ “v2”) vào trong URL cho phép ta duy trì song song nhiều phiên bản dịch vụ trên hệ thống mà không ảnh hưởng đến các dị vụ đang có.
d.      Mở rộng chức năng xử lý dạng đường ống đơn giản
ASP.NET Web API cung cấp khả năng mở rộng dạng đường ống thông qua các bộ lọc (filter) cho phép xử lý trước và sau khi thực thi các action của controller.
Bằng việc gắn các bộ lọc cho phép ta thực hiện lọc các action (theo tham số request), lọc vai trò (authorization) và lọc ngoại lệ
Để dùng có thể đơn giản bằng cách khai báo attribute, hay cấu hình toàn cục áp dụng cho tất cả các phương thức.

3.      Một số đặc điểm nổi trội của ASP.NET Web API

a.       Thuận tiện cho các hành động (action) CRUD (create – read – update – delete)
Các action HTTP (như GET, POST) tự động gắn kết vào các phương thức của controller (chính là các controller action) thông qua tên của chúng. Ví dụ
V d cc action CRUD vi ASPNET Web API
b.      Thỏa thuận nội dung được tích hợp sẵn
Với MVC, để cho phép các phương thức controller trả về dữ liệu JSON hay XML thì phải tùy biến kết quả trả về ở dạng nguyên gốc (raw). Nhưng với ASP.NET Web API, các phương thức controller chỉ cần trả về dữ liệu gốc, toàn bộ phần còn lại sẽ tự động được chuyển đổi sang JSON hay XML tùy theo yêu cầu từ gọi tới. Trong đó, yêu cầu từ bên gọi tới cũng chỉ cần sử dụng tiêu đề (header) Accept hay Content-Type
c.       Cho phép sử dụng các attribute tiền tố điều hướng (route prefix) và route
Trong nhiều trường hợp nếu bạn không muốn các phương thức trong controller tuân theo quy tắc chung thì ta có thể sử dụng các attribute để cài đặt riêng như RouteAttribute, RoutePrefixAttribute, HttpGetAttribute, HttpPostAttribute, …
d.      Định nghĩa quy tắc ràng buộc cho route
Đặc điểm này cung cấp một cơ chế cho phép bạn chỉ ra các nguyên tắc nghiệp vụ riêng trong xử lý route:
Quy tc rng buc route
e.       Hỗ trợ CORS (Cross-Origin Resource Sharing ~ Chia sẻ giữa các nguồn tài nguyên gốc)
Trong ASP.NET Web API ta có thể kích hoạt chức năng này bằng việc đặt một attribute EnableCorsAttribute để cho phép các yêu cầu bằng JavaScript từ các domain khác có thể truy cập domain dịch vụ của bạn.
f.       Quản lý lỗi toàn cục
Đây là một cải thiện rất lớn từ phiên bản ASP.NET Web API 2.1. Theo đó, tất cả các exception không được bắt giờ có thể được ném ra và bắt thông qua một cơ chế tập trung. Việc hỗ trợ nhiều các ghi log ngoại lệ được thực hiện trong chính nền tảng (framework), tại đó cho phép ta truy xuất đến chính ngoại lệ bị ném ra cùng ngữ cảnh của nó.
g.      Giao diện IHttpActionResult
Việc thực thi giao diện này sẽ định nghĩa một HttpResponseMessage factory có thể tái sử dụng và thuận tiện khi xây dựng unit-test:
 
Thc thi giao din IHttpActionResult cho php tch ring x l kt qu tr v khi controller actionS dng lp thc thi IHttpActionResult trong controller action

----------------------------------------------------------------------------------------------------------------------

REST là gì?

REST được tạo bởi Roy Fielding, một trong những tác giả chính đưa ra đặc tả giao thức HTTP, theo đó REST sinh ra để tận dụng những lợi thế của chẩn và công nghệ trong giao thức HTTP hơn SOAP ở thời điểm nó ra đời.
Ví dụ, thay vì phải tạo phương thức SOAP phức tạo, các nhà phát triển REST API được khuyến nghị sử dụng chỉ các phương thức HTTP (HTTP verbs): Mặt khác REST cũng là tài nguyên trung tâm, theo đó các RESTful API sử dụng các phương thức HTTP để tương tác hay truy vấn thông tin về các tài nguyên: Theo cách nói của REST thì sẽ có các danh từ (như Nhiệm vụ, Người dùng, Khách hàng, Đơn hàng). Vì vậy, ta sử dụng các động từ tác động vào các danh từ (verbs acting on nouns), hay theo cách hiểu thì đó là ta thực hiện hành động tác động lên các tài nguyên.
Ngoài ra, REST còn tận dụng các lợi thế ở khía cạnh khác của các hệ thống HTTP như:
vertical_align_top
share
Chat...