Thiết kế và triển khai thực hiện các dịch vụ web RESTful với Rational Software Architect

Phát triển dựa vào mô hình của dịch vụ web RESTful

Việc mô hình hóa các dịch vụ web RESTful (thuần REST) là một trong những khả năng mới nhất trong Rational Software Architect (Kiến trúc sư phần mềm Rational). Trong quá trình giải thích các tính năng mô hình hóa REST, tác giả chỉ cho bạn cách thiết kế và triển khai một dịch vụ RESTful Bookmark (Đánh dấu trang RESTful) theo một mô hình UML (Ngôn ngữ mô hình hóa thống nhất), như là một ví dụ. Bạn có thể sử dụng tính năng mới này và kiến thức vừa mới học được để tạo ra các mô hình giải thích các mô hình dịch vụ web của bạn trước và trong quá trình phát triển. Mô hình về cách tiếp cận mô hình này làm cho việc giải thích dự án của bạn cho những người khác trở nên dễ dàng và rõ ràng hơn nhiều. Nó cũng có thể trở thành một phần của tài liệu người dùng.

Sandeep Katoch, Kỹ sư phần mềm cao cấp, I.B.M.

author photoSandeep Katoch làm việc trong nhóm phát triển Rational Software Architect (Kiến trúc sư phần mềm Rational). Ông có hơn 12 năm kinh nghiệm trong ngành Công nghệ thông tin. Ông đam mê về mô hình hóa và đã làm về phát triển các công cụ mô hình hóa cho IBM trong năm năm qua.



03 08 2012

Giới thiệu

REST (Representational State Transfer - Chuyển giao trạng thái biểu diễn) là phong cách kiến trúc cho phép phát triển các hệ thống được ghép lỏng lẻo bằng cách sử dụng giao thức HTTP. Theo truyền thống, việc thiết kế các dịch vụ dựa trên REST (hoặc các dịch vụ web RESTful) đã được mô tả dưới dạng các URI, tài nguyên, các phương thức HTTP được hỗ trợ bởi từng tài nguyên và các cách biểu diễn của chúng. Các mô tả như vậy thường được xuất bản làm tài liệu để cho phép thực hiện dịch vụ, cũng như để cho phép các khách hàng của dịch vụ nhận biết và sử dụng dịch vụ web. Do không có bất kỳ ký pháp chính thức nào, nên các mô tả như vậy luôn tồn tại trong các tài liệu thiết kế dưới dạng văn bản và bảng biểu, mang đến cho chúng ta một số thách thức về cách tiếp cận này:

  1. Làm thế nào để bạn thiết kế dịch vụ web RESTful của mình?
  2. Làm thế nào để bạn triển khai thực hiện thiết kế này?
  3. Làm thế nào để bạn xuất bản các dịch vụ RESTful của mình để làm cho chúng có sẵn cho người dùng?
  4. Làm thế nào để bạn phát triển thiết kế và thực hiện RESTful?

Phiên bản 8.0.3 của IBM® Rational® Software Architect (Kiến trúc sư phần mềm Rational của IBM) giải quyết những thách thức trong mẫu hình phát triển hướng mô hình (MDD), với sự hỗ trợ mô hình hóa và thực hiện các dịch vụ web RESTful. Sự hỗ trợ mô hình hóa này cho phép bạn tạo ra các mô hình UML cho các dịch vụ web của mình để mô tả dịch vụ web của bạn. Chính mô hình UML ấy cũng dùng làm nguồn để tạo ra tài liệu cho những người dùng dịch vụ web của bạn. Về phía thực hiện, bạn tạo mã Java để tạo ra dịch vụ web của mình, bằng cách sử dụng Java API với Các dịch vụ Web RESTful hay là JAX-RS.

Với suy nghĩ như vậy, chúng ta hãy khám phá những tính năng mô hình hóa REST của Rational Software Architect. Đến cuối bài này, bạn sẽ có thể thiết kế và triển khai thực hiện một dịch vụ RESTful Bookmark theo mô hình UML được hiển thị trong Hình 1.

Hình 1. Mô hình dịch vụ web RESTful Bookmark
Biểu đồ lớp UML của các phần tử dịch vụ web RESTful web

Thiết kế dịch vụ web

Việc thiết kế dịch vụ web RESTful bắt đầu bằng một mô hình UML. Rational Software Architect gồm có hai mô hình khuôn mẫu làm cơ sở cho thiết kế của bạn (được hiển thị trong Hình 2).

Hình 2. Các khuôn mẫu mô hình REST
Danh sách các thể loại Mô hình, các khuôn mẫu REST có sẵn

Hãy chọn khuôn mẫu JAX-RS Service Model (Mô hình dịch vụ JAX-RS) nếu việc thực hiện dịch vụ RESTful cuối cùng của bạn sẽ dựa vào JAX-RS. Hoặc, nếu bạn chưa quan tâm đến việc thực hiện hoặc không muốn sử dụng JAX-RS, bạn có thể chọn khuôn mẫu REST Service Model (Mô hình dịch vụ REST). Các khuôn mẫu mô hình này đều cài sẵn các bảng (palette) và các thư viện khác nhau mà bạn sẽ cần để mô hình hóa dịch vụ.

Sau khi tạo mô hình, thông thường bạn sẽ thấy biểu đồ chính của mô hình đó. Trên biểu đồ này, bạn có thể thấy bảng tạo phần tử REST ở phía bên trái, bạn sẽ sử dụng nó để tạo ra các phần tử REST và một bảng các phần tử mô hình để lựa chọn ở phía bên phải.

Hình 3. Biểu đồ chính và bảng tạo phần tử REST
Các phần tử mô hình REST có sẵn trên bảng biểu đồ

Bạn sử dụng bảng tạo phần tử này để tạo ra các phần tử khác nhau, tạo nên một dịch vụ web RESTful.

Hãy bắt đầu bằng cách tạo một ứng dụng.

  1. Nhấn vào mục Application Class trên bảng các phần tử mô hình, rồi nhấn vào một khoảng trống trong biểu đồ đó.
  2. Đặt tên lớp này là BookmarkApplication. Lớp ứng dụng này là thư mục gốc của dịch vụ web RESTful.
  3. Tiếp theo, bạn có thể thêm tài nguyên RESTful mà ứng dụng này cần trưng ra.

Mỗi tài nguyên được trưng ra tại một URI và nó có thể hỗ trợ bất kỳ các phương thức HTTP nào. Ví dụ, với Bookmark Web Service (Dịch vụ Web Bookmark), bạn có thể trưng ra tài nguyên của mình theo cách mà Bảng 1 hiển thị.

Bảng 1. Tài nguyên và các URI
Tài nguyênURICác phương thức HTTP được hỗ trợ
Users /users GET getListofUsers
POST createUser
User /users/{username}GET getUser
DELETE deleteUser
Bookmarks /users/{username}/bookmarksGET getListofBookmarks
POST createBookmark
Bookmark /users/{username}/bookmarks/{bookmarkId}GET getBookmark
DELETE deleteBookmark

Từ bảng này, bạn có thể truy cập tài nguyên Users (Những người dùng) thông qua URI /users tại thư mục gốc của ứng dụng của bạn.

  1. Để tạo tài nguyên, bạn có thể nhấn vào Resource Class (Lớp tài nguyên) trong bảng các phần tử mô hình, rồi nhấn vào một khoảng trống trong biểu đồ và đặt tên lớp này là Users.
  2. Các URI của REST được mô hình hóa dưới dạng các đường dẫn (paths). Do đó, để mô hình hóa URI /user, nhấn vào mục Path Dependency (Phụ thuộc đường dẫn) trong bảng các phần tử mô hình, rồi nhấn và kéo từ lớp BookmarkApplication trên biểu đồ đến lớp Users và đặt tên đường dẫn này là /users.

Tiếp theo, bạn có thể thêm các phương thức REST do tài nguyên này hỗ trợ.

Đối với tài nguyên Users, phần mềm này hỗ trợ các phương thức GET và POST của HTTP, vì vậy bạn có thể nhấn vào hoạt động GET rồi nhấn vào lớp Users trên biểu đồ và đặt tên cho hoạt động này là getListofUsers.

Tương tự, hãy lặp lại những hành động này cho hoạt động POST và đặt tên nó là createUser.

Lưu ý:
Từ phối cảnh REST, có các phương thức GET và POST của HTTP, nhưng ở đây bạn đã đặt cho chúng những cái tên gợi tả hơn.

Bây giờ biểu đồ của bạn sẽ trông giống như Hình 4.

Hình 4. Biểu đồ BookmarkApplication và Users
Đường dẫn REST vẽ giữa Ứng dụng và Tài nguyên
  1. Bây giờ bạn có thể thêm phần còn lại là tài nguyên, các đường dẫn và các hoạt động.

Biểu đồ cuối cùng của bạn sẽ trông giống như Hình 5.

Hình 5. Mô hình UML
Biểu đồ lớp của dịch vụ web Bookmark

Xem Hình 5 lớn hơn.

Đối với hoạt động GET getUser trên tài nguyên User (Người dùng), lưu ý rằng URI này là /users/{username}. Ở đây, {username} là một tham số cho tài nguyên này. Để quy định việc sử dụng nó trong hoạt động getUser, hãy nhấn vào Param parameter (tham số Param) trong bảng các phần tử mô hình, rồi nhấn vào hoạt động getUser trên biểu đồ chính. Việc này sẽ tạo ra một tham số cho hoạt động này.

Lưu ý:
Sau khi tạo tham số, nó có thể chưa nhìn thấy trên biểu đồ. Điều này là vì, theo mặc định, các thông số bị lọc ra khỏi các biểu đồ. Để nhìn thấy nó, hãy nhấn chuột phải vào lớp User trong biểu đồ và chọn Filter > Show Signature (Hiển thị chữ ký).

Bạn có thể chỉ rõ các chi tiết của tham số này trong thẻ REST trong khung nhìn Properties (Hình 6). Với tham số này, hãy chọn kiểu là PathParam, vì nó được trích ra từ đường dẫn và chọn tên là username. Bạn cũng có thể chỉ định tham số đó là một Header Parameter (Tham số Tiêu đề) hoặc Query Parameter (Tham số truy vấn) và v.v.. dựa trên thiết kế của bạn. Ngoài ra, bạn có thể quy định một giá trị mặc định.

Hình 6. Thẻ REST Parameter
Khung nhìn Properties của một tham số RESTKhung nhìn Properties của một tham số REST

Để cho nhất quán, chúng tôi khuyên bạn nên giữ tên UML cho tham số này giống như tên REST của nó (hoặc tương tự).

  1. Để làm điều này, bạn có thể chuyển tới thẻ General và thay đổi tên là username.
  2. Cũng trong thẻ General, bạn có thể chỉ rõ kiểu UML của tham số này là String (Chuỗi).

Sự khác biệt giữa kiểu REST (PathParam) và kiểu UML (String) là ở chỗ kiểu REST là kiểu trên giao diện REST cho người dùng dịch vụ REST, trong khi kiểu UML là kiểu tham số mà việc triển khai dịch vụ REST sẽ sử dụng.

Đối với mỗi phương thức REST, bạn cũng cần xác định định dạng dữ liệu mà nó hỗ trợ cho đầu vào và đầu ra.

  1. Chọn phương thức getUser và chuyển đến thẻ REST trong khung nhìn Properties (Các đặc tính).
  2. Nhấn vào bên trong danh sách Produces (sản xuất) hoặc Consumes (tiêu thụ) để quy định định dạng.

Có một bộ các giá trị được định sẵn mà bạn có thể lựa chọn (xem Hình 7) hoặc bạn nhập một kiểu ưa thích của mình. Với cả hai Produces và Consumes, bạn có thể chỉ định nhiều kiểu.

  1. Chọn application/xml cho phần Produces.
Hình 7. Các đặc tính mà phương thức REST tạo ra và sử dụng
Khung nhìn Properties của một phương thức REST

Tiếp tục đi xuống phía dưới thẻ này, bạn có thể quy định các mã trả về HTTP mà phương thức này có thể trả về.

  1. Nhấn vào bên trong của danh sách Return codes (các mã trả về) để chọn một mã trả về.
  2. Chọn 200 OK là một mã trả về và 404 Not Found là một mã khác.

Các mã trả về HTTP tiêu chuẩn có sẵn trong trình đơn thả xuống hoặc bạn cũng có thể gõ vào mã tùy chỉnh của bạn. Với mỗi mã trả về, bạn có thể quy định một ví dụ về nội dung có thể được trả về và thêm một mô tả trong hộp văn bản Content (Nội dung) và hộp văn bản Description (Mô tả), tương ứng.

Hình 8. Các đặc tính mã trả về của phương thức REST
Khung nhìn Properties của một mã trả về của ơhương thức REST

Mô hình hóa các tương tác RESTful trong các biểu đồ trình tự

Bạn có thể mô hình hóa các tương tác điển hình với các khách hàng của dịch vụ web RESTful của bạn bằng cách sử dụng các biểu đồ trình tự. Các cuộc gọi giữa khách hàng và dịch vụ của bạn về căn bản là những cuộc gọi HTTP; do đó, một phần tử tương tác HTTP được cung cấp trong thư viện HTTPReference (xem Hình 9).

Hình 9. Các phần tử tương tác HTTP
Các phần tử tương tác HTTP có sẵn

HTTPReference đã được nhập khẩu vào trong các mô hình của bạn nếu bạn đã sử dụng mô hình khuôn mẫu REST hoặc JAX-RS để tạo ra mô hình.

Phần tử tương tác HTTP được sử dụng để biểu diễn cả khách hàng lẫn các dịch vụ web RESTful.

  1. Để sử dụng phần tử tương tác này trên một biểu đồ trình tự, hãy nhấn và kéo phần tử HTTP Interaction (Tương tác HTTP) từ Project Explorer vào một biểu đồ trình tự và đặt cho nó một cái tên thích hợp, ví dụ Client cho khách hàng, Bookmark Service cho dịch vụ web.
  2. Bây giờ bạn có thể vẽ các thông báo giữa khách hàng và dịch vụ web.
  3. Khi bạn vẽ mỗi thông báo, bạn có thể chọn một kiểu hoạt động từ danh sách HTTP Requests and Responses (Các yêu cầu và Các đáp ứng HTTP) cho thông báo đó từ trình đơn thả xuống (Hình 10). Thông thường, đối với các thông báo từ khách hàng đến các dịch vụ web bạn sẽ chọn một yêu cầu GET, POST, DELETE chẳng hạn.
Hình 10. Yêu cầu HTTP trên một biểu đồ trình tự
Các phương thức HTTP có sẵn trên biểu đồ trình tự
  1. Và với mã trả về, hãy chọn một mã trả về, ví dụ như 200 OK.
Hình 11. Đáp ứng HTTP trên một biểu đồ trình tự
Các mã trả về HTTP có sẵn trên biểu đồ trình tự
  1. Bạn cũng có thể mô tả chi tiết từng yêu cầu hoặc đáp ứng dưới dạng URI, các tiêu đề và nội dung bằng cách sử dụng thẻ HTTP Properties (Các đặc tính HTTP) cho một thông báo (Hình 12).
Hình 12. Các chi tiết của phương thức HTTP
Khung nhìn Properties của một phương thức HTTP

Sự hỗ trợ của biểu đồ trình tự là rất có ích cho các khách hàng dịch vụ web của bạn để hiểu các luồng công việc được hỗ trợ.

  1. Về phía thực hiện, bạn có thể phát triển các chi tiết trong biểu đồ trình tự với các cuộc gọi đến các lớp tài nguyên thực tế chỉ bằng cách kéo các lớp tài nguyên của bạn lên các biểu đồ trình tự và vẽ các thông báo trong biểu đồ.
Hình 13. Biểu đồ trình tự cho việc thực hiện
Tương tác RESTful trên một biểu đồ trình tự

Tạo tài liệu bằng cách sử dụng các báo cáo BIRT

Các báo cáo BIRT (Business Intelligence and Reporting Tools – Các công cụ tạo báo cáo và Kinh doanh thông minh) là một cách dễ dàng cho bạn để chia sẻ hoặc xuất bản tài liệu dịch vụ web RESTful của bạn. Rational Software Architect bao gồm một khuôn mẫu báo cáo REST để sử dụng với các Mô hình REST của bạn. Bạn cũng có thể chỉnh sửa và cải tiến báo cáo tùy theo các nhu cầu tài liệu của mình.

  1. Để tạo ra một báo cáo REST, chọn File > New > Other > REST Modeling Reports > REST Report.
Hình 14. Báo cáo REST
Báo cáo BIRT của mô hình REST

Triển khai thực hiện dịch vụ web bằng cách sử dụng JAX-RS

Khi mô hình đã sẵn sàng, bạn có thể sử dụng phép chuyển đổi UML-sang-Java với phần mở rộng JAX-RS để tạo ra mã triển khai dịch vụ. Tuy nhiên, trước khi làm điều đó, bạn cần thêm một vài chi tiết đặc thù JAX-RS cho mô hình của bạn.

Chi tiết đầu tiên là các hoạt động của trình định vị tài nguyên con. Trong mô hình REST, bạn đã vẽ phụ thuộc đường dẫn để cung cấp việc dẫn đường từ một tài nguyên này tới tài nguyên khác.

  1. Trong việc thực hiện JAX-RS, bạn cần tạo ra một hoạt động của trình định vị tài nguyên con trong tài nguyên nguồn. Bạn có thể tạo một phương thức SubResourceLocator từ bảng JAX-RS.
Hình 15. Bảng JAX-RS
Các phần tử mô hình JAX-RS có sẵn trên bảng biểu đồ
  1. Để định nghĩa đầy đủ hoạt động của trình định vị, bạn cần thiết lập kiểu trả về của nó như là tài nguyên đích và ngoài ra cũng thiết lập đặc tính bản mẫu của trình định vị (SubResourceLocator) cho giá trị đường dẫn (<Path/bookmarks> trong ví dụ này), như Hình 16 hiển thị.
Hình 16. Các đặc tính của Trình định vị Tài nguyên con
Khung nhìn các đặc tính của các hoạt động của trình định vị JAX-RS
  1. Ngoài ra, bạn cần thêm các kiểu đặc thù của JAX-RS vào các hoạt động của mình.

Ví dụ, bạn có thể muốn sử dụng đối tượng javax.ws.rs.core.Response như là một kiểu trả về. Các kiểu như vậy có sẵn trong thư viện tham khảo JAX-RS (xem Hình 17).

Hình 17. Thư viện tham khảo JAX-RS
Các phần tử mô hình JAX-RS trong thư viện tham khảo
  1. Bây giờ bạn có thể tạo một cấu hình chuyển đổi UML-sang-Java để tạo ra mã cho dịch vụ này. Nguồn của cấu hình sẽ là mô hình mà bạn đã tạo ra và đích sẽ là một dự án web động, được chạy với các thư viện JAX-RS.
  2. Bạn cũng sẽ cần chạy phần mở rộng JAX-RS UML-to-Java5 (UML-sang-Java5 của JAX-RS) (Hình 18) trên thẻ extensions của cấu hình chuyển đổi.
Hình 18. Phần mở rộng phép chuyển đổi UML-sang-Java5 của JAX-RS
Được chọn từ các phần mở rộng UML-sang-Java có sẵn

Phần mở rộng này chịu trách nhiệm về tạo ra các chú giải JAX-RS trên các lớp Java và các bản cập nhật tệp web.xml cần thiết cho dịch vụ này.

  1. Chạy phép chuyển đổi này sẽ tạo ra các lớp Java cần thiết cho việc triển khai của bạn và ở đó bạn có thể thêm logic triển khai cần thiết cho các lớp của bạn.

Bây giờ bạn có thể đóng gói và triển khai ứng dụng này trên một IBM® WebSphere® Application Server với Gói tính năng cho Web 2.0 và Di động, có hỗ trợ JAX-RS.

  1. Nếu bạn có Môi trường kiểm tra WebSphere Application Server được cài đặt với Rational Software Architect, bạn có thể nhấn phím chuột phải vào dự án web động của bạn và chọn Debug As > Debug on Server (Gỡ lỗi trên máy chủ) và chọn máy chủ kiểm tra.

Sau đó, bạn có thể kiểm tra và gỡ lỗi dịch vụ web RESTful của mình trong môi trường Rational Software Architect.

Lưu ý:
Bạn có thể sử dụng bất kỳ bản cài đặt JAX-RS nào để triển khai các bản cài đặt của mình (ví dụ, với Apache Wink chẳng hạn). Không cần thiết phải sử dụng WebSphere Application Server.

Phép chuyển đổi UML-sang-Java với phần mở rộng JAX-RS cung cấp sự hỗ trợ đầy đủ cho kỹ thuật khứ hồi. Vì vậy, bạn có thể mô hình hóa và tạo mã rồi sau đó tinh chỉnh mô hình và cập nhật mã hoặc thậm chí cập nhật mã và sử dụng phép chuyển đổi UML-sang-Java trong chế độ Reconcile (Hòa giải) để cập nhật mô hình từ mã đó.

Nếu bạn đã có một dự án web động hiện có dựa trên JAX-RS, bạn sử dụng phép chuyển đổi Java-sang-UML với phần mở rộng JAX-RS để tạo ra một mô hình UML từ dự án của bạn. Điều này có thể dùng làm điểm khởi đầu tốt cho bạn để hiểu các bản cài đặt JAX-RS hiện có của bạn và tiếp tục tinh chỉnh chúng.


Tóm tắt

Bài này đã chỉ trình bày rất ngắn gọn sự hỗ trợ cho JAX-RS. Một bài sau sẽ khám phá các đặc trưng của JAX-RS một cách chi tiết.

Bạn đã học cách mô hình hóa và triển khai thực hiện các dịch vụ web RESTful bằng cách sử dụng sự hỗ trợ phát triển dựa theo mô hình trong Rational Software Architect. Một cách tiếp cận dựa trên mô hình làm cho việc thiết kế, thực hiện và phát triển tiếp các dịch vụ web RESTful của bạn dễ dàng hơn.

Bạn có thể tải về mô hình dịch vụ Bookmark để khám phá thêm (xem phần Tải về). Ngoài ra, bạn sẽ tìm thấy nhiều thông tin có ích hơn trong phần Tài nguyên của bài này.


Tải về

Mô tảTênKích thước
Bookmark service UML modelBookmarks_Service_Model.zip6KB

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Rational
ArticleID=825456
ArticleTitle=Thiết kế và triển khai thực hiện các dịch vụ web RESTful với Rational Software Architect
publish-date=08032012