Thứ Hai, 15 tháng 8, 2016

Xây dựng ứng dụng áp dụng RESTful Web Services – xử lý object – truyền và nhận object trong RESTful Web Services ở server cũng như client

Xây dựng ứng dụng áp dụng RESTful Web Services – xử lý object – truyền và nhận object trong RESTful Web Services ở server cũng như client

Mục đích: Chủ đề của bài này giới thiệu về cách xử lý nâng của của kỹ thuật xây dựng web services với RESTful Web Services – nâng cao kỹ thuật xây dựng web services với object. Qua nội dung này chúng ta thấy được tính đơn giản và nhẹ nhàng khi áp dụng web services để truyền dữ liệu từ client đến server và truyền kết quả xử lý là một object từ server đến client

Xây dựng ứng dụng áp dụng RESTful Web Services – xử lý object – truyền và nhận object trong RESTful Web Services ở server cũng như client

Mục đích: Chủ đề của bài này giới thiệu về cách xử lý nâng của của kỹ thuật xây dựng web services với RESTful Web Services – nâng cao kỹ thuật xây dựng web services với object. Qua nội dung này chúng ta thấy được tính đơn giản và nhẹ nhàng khi áp dụng web services để truyền dữ liệu từ client đến server và truyền kết quả xử lý là một object từ server đến client

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
    • JAX-RS (Xây dựng Web Services đơn giản với RESTful Web Services)
  • Nắm vững khái niệm về ngôn ngữ lập trình Java, lập trình thao tác hướng đối tượng
  • Nắm vững khái niệm về lập trì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

Khái niệm tổng quan về xử lý object RESTful Web Services

  • Một trong những framework hỗ trợ web services truyền thống cho việc chuyển đổi WSDL hay XML Schema trở thành Java object và convert Java object trở thành XML Schema là JAXB
  • Web Services truyền thống ngoài sự hỗ trợ của công nghệ nêu trên còn áp dụng API xử lý chuyển đổi SOAP là SAAJ cùng với sự hỗ trợ của JAX-RPC hay JAX-WS runtime để chuyển đổi dữ liệu từ client trở thành dữ liệu trung gian – WSDL hay XML Schema – và transfer đi. Kết quả xử lý trở về cũng tương tự. Ở Server đòi hỏi phải convert SOAP trở thành object thực sự của server để xứ lý. Quá trình rất phức tạp
  • Do vậy, nếu chúng ta coi kết xuất object chỉ là XML có cấu trúc và truyền XML này đi và trở thành phần attachment trong request và response thì công việc sẽ đơn giản hơn rất nhiều. Chúng ta không cần tốn nhiều thời gian để convert, gắn các thành phần định nghĩa, tạo SOAP và convert
  • Công việc ở đây đó là server xác định kiểu dữ liệu trả về cho request là cấu trúc XML. Client đón nhận XML và xử dụng JAXB hỗ trợ để chuyển đổi thành object mà cấu trúc họ có thể không cần biết trước và truy vấn trạng thái -  state của object cùng với hành vi – phương thức method của nó để truy xuất dữ liệu
  • Với khái niệm nêu trên, chúng ta đang transfer về client là một thành phần stream dạng XML và xử lý nó
  • RESTful Webservices ngoài hỗ trợ XML còn hỗ trợ dạng cho JavaScript như JSON, images, …

Vận dụng các kiến thức nâng cao về Web services và các khái niệm cơ bản và tương tác object của RESTful để xây dựng ứng dụng thực tế như mô tả yêu cầu bên dưới. Sau đó, dùng ứng dụng web để consume 02 services này

Vận dụng MVC vào việc phân tích và cài đặt một ứng dụng cụ thể

  • Ứng dụng ở đây mô tả việc xây dựng một ứng dụng cung cấp chức năng như sau
    • Ngưởi dùng muốn truy cập vào hệ thống phải thực hiện login để kiểm tra username và password có hợp lệ hay không
    • Hệ thống thông qua DB kiểm tra tính xác thực của dữ liệu
      • Nếu username và password không chính xác hay không tồn tại ứng dụng thông báo cho người dùng thông tin “Invalid username and password”
      • Nếu user tồn tại thì chương trình bày form Search. Đặc biệt, trên đầu trang phải sử dụng session để lưu trữ user và tất cả các trang phải có câu “Welcome, tênUser”
    • Form Search cho phép người dùng tìm kiếm một user bất kỳ khi biết một phần tên của họ
      • Kết quả Search sẽ trình bày trên lưới dữ liệu
      • Nếu tìm không thấy sẽ in ra câu “No Result is matched!”
  • DB chúng tôi thao tác có dạng như sau

  • 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 trình Java, lập trình thao tác hướng đối tượng
    • Nắm vững cách thức cài đặt của JAX-RPC, JAX-WS, Axis2, JAX-RS
    • 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. Driver 4 loại 4 kết nối DB (sqljdbc.jar, sqljdbc4.jar)
  • Các bước thực hiện
    • Tạo Web Application tương tự như Giới thiệu về RESTful Web Services
      • Tên project: RestFulCRUDDemo
      • Server: Apache Tomcat 6.0.26
      • JavaEE version: JavaEE 5
    • Tạo Web Service với Restful cho Project tương tự như Giới thiệu về RESTful Web Services
      • Chọn Simple Root Resource để dùng API thiết kế Web Services
      • Nhập vào package  sample.rest để 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
      • Tập tin GenericResouce.java được phát và tập tin 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 đề bài. Cụ thể xây dựng phương thức Login với 02 tham số truyền là username và password
        • Path của phương thức là checkLogin
        • Phương thức áp dụng là GET
        • Produce annotation được sử dụng với dạng trả về là text/plain
        • Tham số truyền được lấy từ tham số truyền

        • Phương thức checkLogin trong DBUtils class như sau

        • Lưu ý: đưa thư viện hỗ trợ kết nối DB vào project – cụ thể tập tin sqljdbc.jar hay sqljdbc4.jar
        • Cấu trúc Project đến hiện tại như sau

        • Thực hiện clean and build, Deploy

        • Thực hiện testing với RESTful WebServices với chức năng login

          • Nhập tham số với trị đúng

          • Nhập tham số với trị sai

    • Chúng ta thực hiện hoàn tất chức năng Login ở Web Service, chúng thực hiện consume chức năng này ở client
    • Tạo ứng dụng web tương tự như các bước ở trên
      • Tên project: RestFulCRUDWeb
      • 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 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
        • Nếu kết quả là true thì lưu trữ session, chuyển sang trang welcome, trình bày form search và welcome tên username

      • Trang welcome.jsp được tạo mới như sau

    • Tạo trang invalid.jsp

    • Clean and Build, Deploy và test ứng dụng

      • Nhập đúng

      • Nhập sai

    • Chúng ta thực hiện consumes được web services với RestFul
  • Chúng ta hoàn tất consumes với login. Chúng ta thực hiện chức năng search gần đúng với lastname
    • Chúng ta quay lại project RESTfulWebServiceDemo, bổ sung thêm chức năng SearchLikeLastname
      • Kiểu dữ liệu trả về là kiểu Collection chứa kiểu cụ thể AccountDTO – AccountDTO là kiểu class object chứa thông tin mapping với DB
      • Path là searchLikeLastname
      • Phương thức áp dụng là GET
      • Produce annotation trả về kiểu XML với mỗi thành phần là cấu trúc dữ liệu của AccountDTO object

      • Cấu trúc của object class AccountDTO được mapping với DB như sau

      • Phương thức searchLikeLastname trong DBUtils class như sau

    • Thực hiện clean and Build Project, deploy và test Web Services

    • Chúng ta thấy kết xuất khi test web service là kết quả trả ra thành phần XML cực kỳ đơn giảng với cấu trúc của AccountDTO object class và không phức tạp như thành phần SOAP khi tạo ra và gửi đi và không cần định dạng qua WSDL để người dùng phải thông qua WSDL để convert thành object ban đầu
    • Nhưng đòi hỏi người dùng phải có cấu trúc của object class AccountDTO
  • Chúng ta tiếp tục thực hiện bổ sung project phía client để consume nội dung search này
    • Chúng ta bổ sung vào Controller consume chức năng search khi nhấn nút Search như sau
      • Lưu ý chúng ta cần tạo ra kiểu Generic để xác định kiểu dữ liệu trả về
      • Do vậy, chúng ta copy toàn bộ cấu trúc object class AccountDTO đưa vào client project
      • Sau khi tạo kiểu generic Type, chúng ta gọi phương thức web services và xác định kiểu dữ liệu là XML và ép về kiểu generic type để trả về collection kiểu AccountDTO
      • Sau khi  lấy dữ liệu xong, chúng ta chuyển toàn bộ kết quả trình bày ngay bên dưới form search

    • Chúng ta chỉnh sửa lại trang welcome.jsp để trình bày dữ liệu ra lưới màn hình

    • Cấu trúc project của client cuối cùng như sau

    • Chúng ta thực hiện clean and build, deploy và testing đến form search

    • Nhập giá trị và nhấn search

    • Chúng ta đã hoàn tất chức năng search và xử lý object với RESTful WebServices

Chúc mừng các bạn đã hoàn tất và nắm các khái niệm nâng cao 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.

Rất mong sự góp ý chân thành và chia sẻ của quí vị về vấn đề này. Hẹn gặp lại quý vị ở các chủ đề khác. Quí vị có bài đóng góp có thể gửi cho chúng tôi để đóng góp chia sẻ kiến thức đến mọi người về kỹ thuật tạo Web Service với RESTful này hay bất kỳ kỹ thuật nào khác. Chúng tôi sẽ đăng lên web và để đầy đủ tên của quí vị và vô cùng trân trọng sự đóng góp chia sẻ đó.  

Không có nhận xét nào:

Đăng nhận xét