Api web service là gì

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.

- Đâ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]

WCF REST Service

- 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]

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 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

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

WCFlà 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 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.

BTV.Trần Thị Thu Huyền
Phòng Truyền Thông IMicroSoft Việt Nam
Hotline: 0916 878 224
Email:

Tìm hiểu về RESTful web service

  • Báo cáo

Bài đăng này đã không được cập nhật trong 5 năm

Lời mở đầu

RESTful web service là các web service được viết dựa trên kiến trúc REST. REST đã được chọn sửa dụng rộng rãi thay thế cho các web service dựa trên SOAP và WSDL. RESTful web service nhẹ, có khả năng dễ mở rộng và bảo trì. Trong bài viết này mình muốn làm rõ các quy tắc, quy ước giúp chúng ta có thể viết được các web service đúng chuẩn REST. Bài viết hướng tới đối tượng là những người chưa biết hoặc chưa rõ về RESTful web service.

REST là gì?

Trước khi đi vào RESTful web service mình muốn giới thiệu qua về REST. Vậy REST là gì? REST là viết tắt của REpresentational State Transfer [dịch nôn na là chuyển trạng thái đại diện] là một kiểu kiến trúc lập trình, nó định nghĩa các quy tắc để thiết kết các web service chú trọng vào tài nguyên hệ thống. Trong kiến trúc REST mọi thứ đều được coi là tài nguyên, chúng có thể là: tệp văn bản, ảnh, trang html, video, hoặc dữ liệu động REST server cung cấp quyền truy cập vào các tài nguyên, REST client truy cập và thay đổi các tài nguyên đó. Ở đây các tài nguyên được định danh dựa vào URI, REST sử dụng một vài đại diện để biểu diễn các tài nguyên như văn bản, JSON, XML.

RESTful web service

Dưới đây trình bày bốn quy tắc cơ bản để cài đặt một RESTful web service:

Sử dụng các phương thức HTTP một cách rõ ràng

Điểm chú ý đầu tiên khi cài đặt RESTful web service là sử dụng một cách rõ ràng các phương thức HTTP theo cách mà chúng được định nghĩa bởi RFC 2616. Ví dụ phương thức GET được định nghĩa với mục đích để client sử dụng vào việc lấy dữ liệu từ server hoặc thực hiện một truy vấn để server tìm và trả về một tập các tài nguyên phù hợp. REST yêu cầu các nhà phát triển sử dụng một các rõ ràng các phương thức HTTP và nhất quán với cách mà chúng được định nghĩa. Quy tắc này của REST giúp thiết lập ánh xạ một một giữa các hành động tạo, đọc, cập nhật và xóa với các phương thức HTTP. Theo đó sẽ có:

  • Để tạo một tài nguyên trên server ta dùng phương thức POST.
  • Để lấy[đọc] tài nguyên trên server ta dùng phương thức GET.
  • Để update tài nguyên trên server ta dùng phương thức PUT.
  • Để xóa tài nguyển trên server ta dùng phương thức DELETE.

Ví dụ: Sử dụng sai phương thức

GET /adduser?name=Robert HTTP/1.1

Ở đây phương thức GET được sử dụng để tạo một bản ghi mới trong cơ sở dữ liệu. Như vậy vi phạm định nghĩa của GET chỉ để lấy và trả về dữ liệu. Theo REST để tạo một tài nguyên mới ta sử dụng POST. Resquest trên được sửa lại:

POST /users HTTP/1.1 Host: myserver Content-Type: application/xml Robert

Việc sử dụng các phương thức HTTP một cách không rõ ràng ví dụ như sử dụng GET để tạo hoặc cập nhật tài nguyên, dữ liệu hệ thống sẽ gây ra vấn đề về mặt ngữ nghĩa. Web server được thiết kế để phản hồi lại các yêu cầu GET bằng việc lấy và trả về chúng bằng một dạng nào đó, chứ không phải để tạo hoặc cập nhật bản ghi trong cơ sở dữ liệu. Tương tự với các phương thức HTTP khác, theo REST chúng nên được sử dụng đúng với các chức năng nêu trên. Ngoài mặt ngữ nghĩa, còn có một vấn đề nữa có thể dẫn đến việc thay đổi dữ liệu phía server một cách không chủ tâm.

Phi trạng thái

Theo REST trạng thái hoặc được giữ trên client hoặc được chuyển thành trạng thái của tài nguyên. Nói một cách khác một server sẽ không bao giờ giữ trạng thái thông tin trao đổi với bất kỳ client nào nó giao tiếp, mỗi request lên server thì client phải đóng gói thông tin đầy đủ để thằng server hiểu được. Điều này giúp hệ thống của bạn dễ phát triển,bảo trì, mở rộng vì không cần tốn công CRUD trạng thái của client. Ngoài ra còn một nguyên nhân quan trọng hơn đó là nó tách biệt client khỏi sự thay đổi của server.

Cấu trúc thư mục như URI

URI trong RESTful web service phải tự mô tả, hoặc tham chiếu được cái mà nó trỏ tới và các tài nguyên liên quan. Ngoài ra URI cũng phải đơn giản, có thể đoán biết được, và dễ hiểu. Để tạo ra URI với yêu cầu trên thì ta nên định nghĩa URI có câu trúc giống thư mục. Loại URI này có phân cấp, có gốc là một đường dẫn đơn, các nhánh từ gốc là các đường dẫn phụ dẫn đến các các vùng service chính.

Ví dụ về URI trong RESTful web service:

//www.myservice.org/discussion/topics/{topic} //www.myservice.org/discussion/2008/12/10/{topic}

Với URI có cấu trúc như thư mục cho phép nhà phát triển dễ dàng trong việc cài đặt service của mình hướng vào một loại tài nguyên cụ thể nào đó.

Chuyển đổi XML, JSON hoặc cả hai

Điều cuối cùng trong tập các ràng buộc khi thiết kế RESTful web service phải làm là định dạng dữ liệu mà ứng dụng và service trao đổi trong phụ tải request/response hoặc trong HTTP body. Cung cấp nhiều đại diện biểu diễn cho tài nguyên cho các request khác nhau. Cụ thể ở đây ta có thể sử dụng các một vài kiểu MIME thông dụng sau:

  • JSON
  • XML
  • XHTML

Điều này cho phép các service sử dụng bởi các client viết bởi các ngôn ngữ khác nhau, chạy trên nhiều nền tảng và thiết bị khác nhau. Sử dụng các kiểu MIME cho phép client chọn dạng dữ liệu phù hợp với nó.

Kết luận

REST đã nổi lên trong vài năm qua như là một mô hình thiết kế dịch vụ chiếm ưu thế. Trong thực tế, REST đã có những ảnh hưởng lớn và gần như thay thế SOAP và WSDL vì nó đơn giản và dễ sử dụng hơn rất nhiều. Với REST hệ thống không chỉ dễ mở rộng, dễ bảo trì mà còn linh động trong việc cung cấp các kiểu ứng dụng với các dữ liệu khác nhau. Trên đây mình vừa giới thiệu về các quy tắc để thiết kế và cài đặt RESTful web service. Bài viết còn nhiều thiếu sót mong các bạn thông cảm!

Tài liệu tham khảo


Video liên quan

Chủ Đề