2012-12-13 23 views
15

Bối cảnh:Làm cách nào để xử lý mã cho các dịch vụ web SOAP được phiên bản?

  • các dịch vụ web của chúng tôi là công ty nội bộ, nhưng với rất nhiều hệ thống khác nhau sử dụng chúng
  • chúng tôi sẽ phấn đấu không chấp/gỡ bỏ phiên bản cũ của api nhiều như chúng tôi có thể

Có rất nhiều thông tin liên quan đến phiên bản dịch vụ web và quyết định của chúng tôi là sử dụng cách tiếp cận sau để phiên bản dịch vụ web của chúng tôi:

  • Giữ phiên bản trong URL (Tôi biết một số người chống lại điều này, nhưng chủ yếu liên quan đến các dịch vụ REST) ​​
  • Giữ phiên bản trong không gian tên.

Nhưng bây giờ chúng tôi đang quyết định cách thực sự thực hiện việc này và ở đây chúng tôi không tìm thấy nhiều thông tin về các phương pháp hay nhất. Chúng tôi sử dụng (Java):

  • Chú thích để xác định các dịch vụ của chúng tôi web (và các api dịch vụ web)
  • đậu POJO chú thích với các chú thích XML, để xác định nội dung
  • lớp Converter để chuyển đổi từ/đến lớp kinh doanh và dịch vụ web POJO của
  • xuân

Vì vậy, để giữ cho các phiên bản cũ trên các dịch vụ web, chúng ta cần phải giữ cho các phiên bản cũ của mã này. Để làm điều này, chúng tôi đã cơ bản nhìn hai cách tiếp cận khác nhau:

1) Đối với mỗi phiên bản mới, tạo một bản sao mới hoàn toàn của các mã có liên quan

Cách tiếp cận này sẽ trông như thế này:

com.company.webservice.v3. -all of the web service classes, POJO’s and converters go here 
com.company.webservice.v4. -all of the web service classes, POJO’s and converters go here 

Vì vậy, ở đây chúng tôi có mã trùng lặp. Suy nghĩ của chúng tôi trong ngắn hạn:

  • Sao chép mã. Sẽ có nhiều lớp với mã giống nhau. Có lẽ khó hiểu trong Eclipse.
  • Toàn bộ sự cô lập, dễ dàng để xác định những gì tạo nên một phiên bản cụ
  • nguy cơ thiểu ảnh hưởng đến chức năng của các phiên bản trước của các dịch vụ

2) Sử dụng lò xo để chỉ tạo một bản sao của từng loại mà bị ảnh hưởng bởi thay đổi

Cách tiếp cận này có nghĩa là sử dụng Spring IoC và cho phép tất cả các phiên bản của dịch vụ web sử dụng càng nhiều càng tốt, cùng một mã. Chỉ khi chúng ta thực hiện một thay đổi ảnh hưởng đến hành vi/api, chúng ta tạo ra các phiên bản mới của các lớp đó. Ví dụ:

com.company.webservice.beans.MyXMLAnnotatedPOJOv3.java 
com.company.webservice.beans.MyXMLAnnotatedPOJOv4.java 
com.company.webservice.translators.MyXTranslatorv1.java 
com.company.webservice.translators.MyXTranslatorv2.java 
  • Có thể là khó khăn để thấy rõ những gì tạo nên một phiên bản cụ thể của một dịch vụ web. Có thể dễ dàng hơn do nhầm lẫn ảnh hưởng đến các phiên bản trước của dịch vụ web khi duy trì mã
  • Không sao chép mã.Chỉ những thay đổi mới được triển khai làm lớp mới

Cách tiếp cận nào cũng không cảm thấy tối ưu nhưng chúng tôi không tìm thấy nhiều thông tin liên quan đến điều này. Vì vậy, câu hỏi của tôi là: bạn sẽ sử dụng phương pháp nào trong hai phương pháp tiếp cận này? Hay bạn sẽ có một cách tiếp cận hoàn toàn khác?

+0

"bạn sẽ sử dụng phương pháp nào trong hai cách tiếp cận này? Hoặc bạn sẽ thực hiện một cách tiếp cận hoàn toàn khác" = chủ yếu dựa trên ý kiến ​​ – Raedwald

+1

Bạn đã có thêm kinh nghiệm về chủ đề này chưa? Tôi đang đối mặt với cùng một loại vấn đề và tôi muốn xác định thực tiễn/quy trình tốt nhất để làm cho dịch vụ web của chúng tôi phát triển. –

Trả lời

5

Khi tạo WSDLs từ Java, tôi sẽ sử dụng các giải pháp trọn gói:

com.company.webservice.v3. 

Nó có vấn đề lặp lại code, nhưng POJO và bộ chuyển đổi có sự khác biệt giữa các phiên bản anymay, do đó, mã tái sử dụng có thể không được rất khả thi sau tất cả. Ưu điểm chính là nếu bạn muốn loại bỏ một phiên bản cũ, bạn chỉ cần xóa các gói có liên quan.

Tôi sẽ giữ versionnumber trong URL, vì bạn chưa thực hiện REST. Hơn nữa, bạn có thể kiểm tra trong nhật ký truy cập, nếu các phiên bản nhất định vẫn được sử dụng.

+0

Cảm ơn bạn đã nhập. Tôi nghĩ chúng ta cũng đang theo hướng này. Những rắc rối chúng ta thường xảy ra, giữa hai phiên bản, chúng ta thực hiện những thay đổi nhỏ ảnh hưởng đến <10 lớp, trong tổng số 100. Vì vậy, trong ví dụ Eclipse, tìm kiếm lớp "MyXMLAnnotatedPOJO.java" có thể cung cấp cho 7 lượt truy cập giống hệt nhau trong 7 gói "v1" đến "v7" khác nhau. – Magnus

+0

Các thay đổi tương thích, như thêm thao tác bổ sung, không cần phiên bản mới. Hơn nữa, bạn có thể đặt versionnumber trong tên lớp của bạn. – Hugo

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