| Welcome to Huynh's Collections. We hope you enjoy your visit. You're currently viewing our forum as a guest. This means you are limited to certain areas of the board and there are some features you can't use. If you join our community, you'll be able to access member-only sections, and use many member-only features such as customizing your profile, sending personal messages, and voting in polls. Registration is simple, fast, and completely free. Join our community! If you're already a member please log in to your account to access all of our features: |
| Giới thiệu về RESTful Web Services | |
|---|---|
| Tweet Topic Started: Jan 15 2013, 07:42 PM (833 Views) | |
| Huynhnb8x | Jan 15 2013, 07:42 PM Post #1 |
|
Th1nk
![]() ![]() ![]() ![]() ![]()
|
Giới thiệu về RESTful Web Services – công nghệ tạo web services đơn giản so với các dạng web services trước kia Mục đích: Chủ đề của bài này giới thiệu về RESTful Web Services – một phương pháp mới để tạo web services sử dụng cách thức đơn giản để trao đổi dữ liệu độc lập platform với hiệu suất khá cao. Qua nội dung tổng quát của lư thuyết, chúng tôi sẽ thực hiện web services với chức năng đơn giản sử dụng RESTful web services Yêu cầu về kiến thức cơ bản cho các khái niệm về RESTFul Web Services Nắm vững các khái niệm về MVC, khái niệm liên quan đến Service Oriented Architecture (SOA), kiến trúc của Web Services Nắm vững các khái niệm về Web Services với các công nghệ và framework như AXIS 2 (Loạt bài về xây dựng web services với axis2) JAX-WS (Xây dựng Web Service sử dụng Web Server Tomcat và sử dụng service áp dụng MVC Pattern trên Web) JAX-RPC Nắm vững khái niệm về ngôn ngữ lập tŕnh Java, lập tŕnh thao tác hướng đối tượng Nắm vững khái niệm về lập tŕnh web sử dụng J2EE hay JavaEE với các kiến thức về Servlet, JSP Nắm vững khái niệm về cơ chế Filter và RequestDispatcher trong Servlet Nắm vững toàn bộ cách thức vận dụng và xây dựng ứng dụng hoàn chỉnh ứng dụng áp dụng web services với các công nghệ nêu trên Tổng quan về Web Service truyền thống Cơ chế thực hiện và hoạt động của Web Services truyền thống khá phức tạp JAX-RPC: người lập tŕnh phải định nghĩa các interface sử dụng ngôn ngữ lập tŕnh hay WSDL. Sau đó thực hiện cài đặt các phương thức đă được định nghĩa trong interface. Thực hiện cấu h́nh theo đúng chuẩn của SOA và deploy đến server có hỗ trợ web services JAX-WS: người lập tŕnh cài đặt trực tiếp các phương thức sau đó sử dụng các annotation để định ra các phương thức sẽ làm web services và dưới sử hỗ trợ của compiler và các server có hỗ trợ web services để thực hiện deploy ứng dụng Cơ chế thực hiện của web services đ̣i hỏi Người dùng sử dụng ngôn ngữ lập tŕnh để gọi services thông qua interface, cụ thể là WSDL, sau đó compiler thực hiện chuyển đổi và parsing lời gọi thông qua WSDL để chuyển đổi thành SOAP dưới sự hộ trợ của các API chuyển đổi tương ứng SOAP được bao bọc bởi HTTP protocol để chuyển đi kết hợp với TCP/IP Server nhận được HTTP thông qua port 80 sẽ trích xuất và nhận dạng SOAP thông qua HTTP Thực hiện validation nội dung của SOAP, dựa trên WSDL, lần nữa thực hiện convert SOAP trở thành object cụ thể ở Server và định vị phương thức thựcthi Kết quả sau khi xử lư phải thực hiện chuyển đổi thành SOAP response hay fault dựa trên WSDL v́ tất cả đang sử dụng theo API của ngôn ngữ lập tŕnh tại Server Và bao bọc bởi HTTP truyền đi về client và client phải thực hiện một quá tŕnh như server để lấy thông tin và chuyển về kết xuất của platform ở ngôn ngữ đích Cơ chế trên khá phức tạp đối với kết quả xử lư là dạng dữ liệu b́nh thường như chỉ là chuỗi đúng sai, một số nguyên gửi về sau tính toán Bên cạnh đó, HTTP Request và Response là object có khả năng đính kèm dữ liệu, do vậy quá tŕnh convert SOAP là không cần thiết Hơn thề nữa, với định dạng đơn giản người sử dụng có thể xử lư uyển chuyển hơn so với định dạng SOAP cố định Khái niệm về RESTful Web Services Chính khái niệm phức tạp về Web Services truyền thống, REST được đưa ra để áp dụng cách xây dựng và cơ thế thực hiện web service đơn giản hơn REST viết tắt của chữ Representational State Transfer – theo nghĩa cho phép người dùng truy cập tài nguyên – resource (có thể là dữ liệu trước và sau xử lư hay chức năng của ứng dụng) - của ứng dụng trên web services thông qua uri Thực hiện cơ chế nói chuyện giữa server và client là điểm điểm – point to point Dữ liệu được truyền trực tiếp trên HTTP và được truy cập thông qua HTTP theo đúng định dạng MIME mà không cần thông qua dạng SOAP – giảm bớt sự phức tạp – v́ đơn giản chúng ta sẽ coi dữ liệu và chức năng như là tham số truyền hay dữ liệu đính kèm trong HTTP Cho phép thao tác dữ liệu dưới 4/7 phương thức được định nghĩa trong HTTP đó là GET, POST, PUT, DELETE để qui định rơ cách thao tác dữ liệu trên server, cái nào được truy cập, các nào được sửa đổi, cái nào được hiển thị và dấu ẩn … Các yêu cầu khi sử dụng REST đó là Client-Server: Client và Server phải nói chuyện sử dụng cùng interface và protocol Sử dụng dạng kiến trúc layers và không lưu trữ trạng thái sau khi xử lư được response Cache: response được lưu trữ tại client Code on Demand: client lấy được dữ liệu trong response sau khi xử lư của server hoàn tất Uniform Interface: mỗi resource được client truy cập thông qua địa chỉ duy nhất và sử dụng 4 HTTP methods được qui định RESTful Web Services sử dụng HTTP để truyền hay nhận dữ liệu trực tiếp thông qua URI Cơ chế hoạt động Client gửi request yêu cầu resources thông qua HTTP Web services dựa trên request để đáp ứng yêu cầu và response kết quả trả về Response được trả về theo đúng định dạng yêu cầu của client Client xử lư kết quả từ response để đáp ứng yêu cầu của ḿnh 6.1.tif Một số thành phần của RESTful Web Services Resources: có thể là chuỗi, h́nh ảnh, xml, tập tin … JAX-RS Cung cấp chức năng và API cho việc xây dựng ứng dụng với RESTful Web Services JAX-RS API Một API của JavaEE Sử dụng tạo web service với các hàm API với annotations Định nghĩa Java class như là một Resource class Định nghĩa 02 loại resources: root resource và sub resource thông qua @Path. Trong đó sub resource được truy cập thông qua root Root resource thông thường là được khai báo ở đầu class Sub resource được khai báo trên các method, nghĩa là các method được truy cập thông qua root theo đường dẫn trên server Cú pháp của @Path @Path(“resourcePath/{param1}/…/{paramN}”) Package chứa các thành phần là javax.ws.rs Các method của HTTP được hỗ trợ thông qua các khai báo annotations Annotation Mô tả @GET Dùng cho HTTP GET method @POST Dùng cho HTTP POST method @PUT Dùng cho HTTP PUT method @Delete Dùng cho HTTP DELETE method Để trích xuất dữ liệu từ HTTP request và đưa vào services – resources xử lư @PathParam annotation Lấy giá trị từ URI trên đường dẫn sau / @QueryParam annotation Lấy query parameter từ request tương tự như getParameter của request Lấy giá trị từ URI sau dấu ? và các dấu & @FormParam annotation Lấy query parameter từ request nhưng được truyền từ form parameters Để xác định loại dữ liệu được xử lư trên server hay lấy về từ server @Produces annotation Xác định định dạng dữ liệu khi phương thức xử lư và trả về Định dạng qui định là dạng có trong MIME như text/plain, text/xml, application/xml, hay text/json Áp dụng cho các phương thức @GET, @POST, và @PUT @Consumes annotation Xác định loại dữ liệu được gửi từ client đến server cho xử lư trên server Các định dạng hỗ trợ text/plain, text/xml, hay application/x-www-form-urlencoded (hỗ trợ dạng phương thức POST) Áp dụng cho đầy đủ 4 phương thức của RESTful Các bước để phát triển web services sử dụng RESTful Bước 1: Tạo Web Application Chọn Web Server là Tomcat Chọn Java EE version là JavaEE5 Bước 2: Đưa Restful Web Services vào trong Web Application Bổ sung các thư viện hỗ trợ như JAX-RS 1.1 và Jersey Bước 3: Định nghĩa và cài đặt các phương thức cho Web Services Bước 4: Sử dụng annotation để định dạng cho các services được định nghĩa trong bước 3 @Path host web service – root resource và sub resource Loại HTTP methods dùng để truy vập Lấy dữ liệu về hay cập nhật dữ liệu trên server @Produces hay @Consumes Bước 5: Build Web Services, deploy Bước 6: Testing Web Services, phát sinh WSDL để sử dụng ở client Các bước để phát triển ứng dụng consumes web service sử dụng RESTful Bước 1: Tạo Web Application hay Desktop Application Bước 2: Đưa các thư viện hỗ trợ consume Web services sử dụng RESTful Bổ sung các thư viện hỗ trợ như JAX-RS 1.1 và Jersey Bước 3: Tạo giao diện và viết code trực tiếp truy cập Web Services Xác định url host web services Tạo Client object để lấy vị trị resource Tạo request để truyền yêu cầu đến server Lấy resource trở về để tŕnh bày ra kết quả Bước 4: Build, deploy (nếu là ứng dụng web) và testing ứng dụng Vận dụng các kiến thức nâng cao về Web services và các khái niệm của RESTful để xây dựng ứng dụng đơn giản nhất, đó là tính toán với 02 phép toán cộng trừ. Sau đó, dùng ứng dụng web để consume 02 services này Yêu cầu Nắm vững các khái niệm về MVC, khái niệm liên quan đến Service Oriented Architecture (SOA), kiến trúc của Web Services, RESTful Nắm vững về ngôn ngữ lập tŕnh Java, lập tŕnh thao tác hướng đối tượng Cách thức sử dụng JSP, Servlet Tools sử dụng ở đây là Netbeans 6.9.1 JDK 6 update 22 Server: Tomcat 6.0.26 Thư viện hỗ trợ: JAX-RS, Jersey Các bước thực hiện Tạo Web Application tương tự như kết hợp JavaFX với JSP và JDBC Tên project: RestFulCalculatorServices Server: Apache Tomcat 6.0.26 JavaEE version: JavaEE 5 Tạo Web Service với Restful cho Project Click Menu File, New File, chọn Web Services trong Categories, và chọn RESTful Web Services from Patterns trong File types Click Next Chọn Simple Root Resource để dùng API thiết kế Web Services Click Next Nhập vào package để phát sinh Chỉnh sửa lại Path của root resource nếu cần Xác định loại dữ liệu trả về trong MIME type, ở đây chúng ta thực hiện phép toán và trả ra kết quả, kiểu chuẩn trong MIME là String, do vậy chúng ta chọn text/plain và Representation là kiểu String Click nút Finish Màn h́nh REST Resources Configuration xuất hiện để cho phép chúng ta chọn lựa cách đưa RESTful vào ứng dụng Chúng ta chọn cấu h́nh trực tiếp vào trong web.xml tương tự như cách add các framework như struts hay jsf vào ứng dụng Và chỉnh sửa resources gốc nếu muốn trong phần REST resources path – đây có thể nói là root resources của class resources Click OK Code được phát sinh như sau Lưu ư Chúng ta thấy đường dẫn truy cập đến CalculatorResource là generic thông qua khai báo @Path. Và đây là sub resource so với resource trong bước cấu h́nh trên Có 02 phương thức mặc định cho phép get dữ liệu và đưa dữ liệu lên trên server Bên cạnh đó, web.xml được bổ sung cấu h́nh với servlet mapping reference đến RESTFul Chúng ta thực hiện thay đổi phương thức để phù hợp yêu cầu tính toán Sửa 02 phương thức mặc định là add và subtract với 02 tham số truyền Ở phương thức add chúng ta thiết lập giá trị mặc định thông qua @DefaultValue – khi không có áp dụng trị default Cũng ở phương thức add chúng ta lấy dữ liệu truyền thông qua parameter trong HTTP Request Hàm add sẽ lấy kết quả trả về cho người dùng nên chúng ta chọn Produces với dạng text/Plain Tương tự cho subtract, ngoại trừ không có Default values th́ giá trị tự động ép theo kiểu khai báo biến đó là kiểu double – nghĩa là khi không truyền, giá trị sẽ là 0.0 Chúng ta cũng để @Path cho từng phương thức services add và subtract để định nghĩa sub resource dưới root resources là generic trên từng phương thức để phân biệt các services khác nhau tại thời điểm truy cập Lưu ư: không được sử dụng kiểu dữ liệu không được hỗ trợ trong MIME, điều này dẫn đến phát sinh lỗi ở client khi sử dụng – không phải ở server tại thời điểm deploy Chúng ta có cấu trúc của project trong netbeans như sau Các thư viện hỗ trợ của project Chúng ta thực hiện clean and Build project Start Server Tomcat (nếu chưa start) Deploy ứng dụng trên server Chúng ta thực hiện test web services như sau Nhấn phải chuột trên phương thức cần test trong CalculatorResource/HTTPMethods/add hay subtract Chọn Test Resource URI Màn h́nh browser hiện thị mặc định không truyền tham số như sau Lưu ư: chúng ta thấy đang truy cập theo thứ tự contextPath/rootResouce/ClassResouces/MethodResouces Giá trị tham số không truyền và lấy mặc định Chúng ta thêm tham số trực tiếp trên url với ? và & với tên tham số định nghĩa trong @QueryParam Tương tự cho phép toán trừ Lưu ư: có một số trường hợp việc test xuất hiện lỗi như sau Vấn đề này xảy ra là do hệ thống thiếu đường dẫn đến method services, chúng ta chỉ cần đơn giản bổ sung bằng cách gơ tiếp được dẫn như các cách testing ở trên Ngoài ra, nếu lỗi là 404 hay test không được nghĩa là phương thức chúng ta phát sinh lỗi và không thể deploy thành web services. Chúng ta đơn giản kiểm tra lại phương thức, chỉnh sửa lỗi và deploy lại Chúng ta đă thực hiện thành công một web services đơn giản nhưng chưa sử dụng được nó. Chúng ta thấy kết quả trả về của REST rất đơn giản chỉ là text và không có thông tin như SOAP làm nặng nề hệ thống xử lư như WS truyền thống Chúng ta thực hiện việc tạo ứng dụng và sử dụng web services đă làm ở trên để sử dụng Tạo ứng dụng web tương tự như các bước ở trên Tên project: RestfulCalculatorWeb Server: Apache Tomcat 6.0.26 J2EE version: JavaEE5 Click phải chuột trên Library, chọn Add Library, chọn JAX-RS 1.1 và Jersey add vào Project. Chúng ta có cấu trúc project như sau Chúng ta chỉnh sửa trang index.jsp cho việc nhập liệu như sau Chúng ta tạo Servlet với tên Controller và thực hiện kết nối như sau Xác định url đến thành phần class resources Tạo Client object Thiết lập truyền yêu cầu trực tiếp đến để truy cập resources thông qua phương thức setFollowRedirecteds Xác định resources truy cập thông qua url để lấy về object WebResource Xác định tập tham số truyền truy cập resource, v́ chúng ta truyền 02 tham số do vậy chúng ta tạo ra map để chứa cập tham số truyền với MultivalueMap Trong trường hợp chỉ có 1 tham số chúng ta không cần thực hiện như thế v́ phương thức queryParam bên dưới cho phép 02 định dạng Đón nhận MultiValueMap Đón nhận 02 trị String, String Chúng ta thông qua object resources, xác định path sub resource với phương thức path Kết hợp tham số truyền khi truy cập sub resources đó dùng queryParams Và dùng phương thức get để lấy dữ liệu trả về và ép về kiểu chuẩn client định nghĩa và hỗ trợ bởi MIME, cụ thể ở đây là String In kết quả ra màn h́nh Tương tự cho phương thức subtract Clean and Build, Deploy ứng dụng Test Nhấn nút Add Nhấn nút subtract Chúng ta thực hiện consumes được web services với RestFul Qua cách consumes này chúng ta nhận thấy client không cần dùng WSDL, phát sinh các thành phần bên client phức tạp và tốn thời gian Client chỉ cần xác định services được host tại đâu có bao nhiêu tham số truyền và yêu cầu truy cập resources mà không cần biết định dạng interfaces cụ thể Các đường dẫn host thay đổi chỉ cần thay đổi uri dẫn đến ứng dụng uyển chuyển Bên cạnh đó, kiểu dữ liệu đơn giản giúp xử lư nhanh chóng và dễ dàng hơn Chúc mừng các bạn đă hoàn tất và nắm các khái niệm về sử dụng RESTful Web Services để tạo Web Services và tạo ứng dụng sử dụng Web Services đó. Qua đó chúng ta so sánh được giữa cách tạo Web Services truyền thống và RESTful Chúng tôi hy vọng nội dung của bài này giúp ích các bạn trong việc cài đặt web services với nhiều cách khác nhau và chọn lực sự uyển chuyển trong sử dụng. |
| Knowledge crawling | |
![]() |
|
| « Previous Topic · Tài liệu sưu tầm · Next Topic » |
| Track Topic · E-mail Topic |
9:00 AM Jul 11
|
Theme by James... of the ZBTZ and themeszetaboards.com





![]](http://z5.ifrm.com/static/1/pip_r.png)



9:00 AM Jul 11