2012-01-13 34 views
5

Cách tốt nhất để thiết kế kiến ​​trúc máy chủ Java tương tác với ứng dụng GWT phía máy khách là gì, nhưng cũng phản hồi chính xác các yêu cầu khác của máy khách từ các nền tảng khác? Cụ thể, tôi muốn sử dụng cùng một lớp servlet để trả lời không chỉ ứng dụng GWT của tôi, mà còn cho các ứng dụng iOS và Android tương ứng.Cách tốt nhất để thiết kế một máy chủ GWT "Platform-Independent" là gì?

Cách tiếp cận đầu tiên tôi nghĩ là triển khai lớp máy khách GWT bằng cách sử dụng "RequestBuilder" thay vì giao diện dịch vụ phương thức RPC thông thường. Sử dụng cách tiếp cận này, tôi có thể mã các servlet chung đáp ứng các yêu cầu HTTP theo cách RESTful bằng cách xử lý các biến được mã hóa trong một cái gì đó như JSON hoặc XML. Mặc dù điều này có hiệu quả, nhưng sẽ tốn nhiều công sức để mã hóa và giải mã các đối tượng/tham số của tôi trong JSON trên cả máy khách và máy chủ, đặc biệt khi RPC cung cấp một giải pháp thanh lịch như vậy. Một cách tiếp cận khác (mà tôi nghĩ là tốt hơn), sẽ tìm ra đặc điểm kỹ thuật mà Google sử dụng để tuần tự hóa và deserialize các cuộc gọi phương thức RPC của họ và thực hiện một số loại thư viện làm điều tương tự cho iOS (trong Objective-C)) và Android. Vấn đề là tôi đã không thể tìm thấy tài liệu tốt về tiêu chuẩn mã hóa này, cũng như tôi không tìm thấy thư viện triển khai nó cho iOS hoặc Android (mặc dù tôi đã tìm thấy một cái gì đó giống như nó cho PHP tại www.gwtphp.com).

Ai có thể chỉ đạo tôi hướng tới đặc điểm kỹ thuật về cách GWT tuần tự hóa/deserializes đối tượng của họ hoặc thậm chí tốt hơn, thư viện cho iOS và/hoặc Android triển khai giao diện RPC?

Trả lời

4

Tạo một lớp "dịch vụ", tức là một tập hợp các lớp học kinh doanh trả lại POJO.

Sau đó, bạn có thể dễ dàng có GWT-RPC và REST gọi lớp dịch vụ.

Điều này khá dễ dàng và đơn giản. Vấn đề của bạn sẽ là làm thế nào để tạo ra một lớp kinh doanh mà chỉ trả về POJO. Nhưng nó là một câu chuyện khác.

2

Nếu bạn thực sự cố gắng có một máy chủ độc lập nền tảng mà khách hàng có thể tương tác, thì đặt cược tốt nhất của bạn là sử dụng phương pháp "mẫu số ít phổ biến nhất", thường là dữ liệu đơn giản và xử lý bề mặt cho các hành động khác nhau xảy ra.

Để kết thúc đó, giao diện RESTful, có khả năng với JSON hoặc XML để mã hóa dữ liệu, sẽ là đặt cược được hỗ trợ nhiều nhất của bạn.

Ưu điểm chính của đi theo cách này là đã có nhiều của thư viện mà đối phó với serializing/deserializing JSON và XML, và bạn đang giữ dịch vụ của bạn như linh hoạt càng tốt, có nghĩa là bạn đang không hạn chế cơ sở khách hàng của bạn bằng cách yêu cầu họ làm rất nhiều việc khác ngoài việc giải quyết văn bản và đưa ra yêu cầu web (ở cấp độ cơ bản nhất).

Nó đặt thêm một chút công sức làm cho phía máy chủ của kết nối thực hiện những gì bạn muốn, nhưng đó là sự cân bằng giữa tính linh hoạt của REST tương đối chung mà bất kỳ khách hàng nào cũng có thể xử lý và nhiều hơn nữa nhắm mục tiêu dịch vụ dựa trên RPC, trong khi nó làm cho một số triển khai dễ dàng hơn, không giới hạn khách hàng đối với những khách hàng có thể xử lý triển khai RPC cụ thể.

2

GWT-RPC thực sự là lựa chọn không tốt khi bạn không kiểm soát việc triển khai của khách hàng, bởi vì khách hàng phải được cập nhật mỗi khi bạn thay đổi lớp học của mình. Đây là một trong những lý do dẫn đến RequestFactory được phát triển. Và nó sẽ hoạt động như trên Android.

Điều đó nói rằng, tôi đồng ý với Peter Knego: xây dựng giao thức API công khai cụ thể trên đầu trang của một lớp dịch vụ duy nhất.

Ngoài ra, bạn có thể sử dụng GSON, Jackson và/hoặc GWT AutoBeans để sắp xếp các đối tượng vào JSON.

+0

Cảm ơn các đề xuất về tuần tự hóa JSON. – depthfirstdesigner

Các vấn đề liên quan