2010-11-16 26 views
6

JAX-RS và JAX-WS thật tuyệt vời để sản xuất API. Tuy nhiên, họ không giải quyết được mối quan tâm về khả năng tương thích ngược.Làm cách nào để tạo các API JAX-RS và JAX-WS tương thích ngược?

Để tránh làm hỏng khách hàng cũ khi các khả năng mới được giới thiệu với API, về cơ bản bạn phải chấp nhận và cung cấp chính xác định dạng đầu vào và đầu ra như trước đây; nhiều trình phân tích cú pháp XML và JSON có vẻ phù hợp nếu chúng tìm thấy một trường không ánh xạ tới bất kỳ thứ gì, hoặc có kiểu sai.

Một số thư viện JSON ở đó, chẳng hạn như Jackson và Gson, cung cấp tính năng mà bạn có thể chỉ định một biểu diễn đầu vào/đầu ra khác nhau cho một đối tượng nhất định dựa trên cài đặt thời gian chạy, có vẻ như một cách phù hợp để xử lý phiên bản cho nhiều các trường hợp. Điều này làm cho nó có thể cung cấp khả năng tương thích ngược bằng cách chú thích các trường đã thêm và đã loại bỏ để chúng chỉ xuất hiện theo phiên bản của API mà ứng dụng sử dụng.

Cả JAXB lẫn bất kỳ thư viện dữ liệu XML nào khác mà tôi đã tìm thấy đều có hỗ trợ tốt cho khái niệm này, không bao giờ có thể sử dụng lại cùng một chú thích cho cả JSON và XML. Thêm nó vào JAXB-RI hoặc EclipseLink Moxy dường như có khả năng có thể, nhưng khó khăn. Cách tiếp cận khác để phiên bản có vẻ là phiên bản tất cả các lớp đã thay đổi, thường bằng cách tạo một gói mới mỗi lần API được xuất bản và tạo bản sao của tất cả các lớp DTO, Dịch vụ và Tài nguyên đã sửa đổi trong gói mới để tất cả các thông tin kiểu được phiên bản cho các hệ thống ràng buộc và gửi đi. Cách tiếp cận này có vẻ mất thời gian hơn đối với tôi.

Câu hỏi của tôi là: bạn đã thiết kế các nhà cung cấp API Jave của mình để tương thích ngược như thế nào? Những gì đã làm việc, những gì không?

Liên kết đến nghiên cứu điển hình hoặc bài đăng trên blog về chủ đề được đánh giá cao; Tôi đã thực hiện một số googling nhưng đã không được tìm thấy nhiều cuộc thảo luận về điều này.

Trả lời

0

Tôi là người lãnh đạo công nghệ cho EclipseLink MOXy, tôi rất quan tâm đến các yêu cầu phiên bản của bạn. Bạn có thể tiếp cận với tôi qua blog của tôi:

MOXY cung cấp một phương tiện để đại diện cho siêu dữ liệu JAXB như một tập tin XML. Bạn có thể tận dụng này để tạo ra nhiều bản đồ cho mô hình đối tượng giống nhau:

+0

Cảm ơn Blaise. Một trong những điều tôi nhận ra về việc tạo nhiều tệp ánh xạ cho cùng một đối tượng là nó không nhất thiết là ít công việc hơn là tạo nhiều bộ lớp - sao chép, dán, tinh chỉnh. Và, nó không được hỗ trợ tốt bởi các thư viện khác (như Jackson). –

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