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:

Username:   Password:
Add Reply
Giới thiệu về RESTful Web Services
Topic Started: Jan 15 2013, 07:42 PM (833 Views)
Huynhnb8x
Member Avatar
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
Offline Profile Quote Post Goto Top
 
« Previous Topic · Tài liệu sưu tầm · Next Topic »
Add Reply


Theme by James... of the ZBTZ and themeszetaboards.com