2009-04-18 31 views
11

Cách tiếp cận nào tốt hơn để phát triển các dịch vụ web; hợp đồng đầu tiên hoặc hợp đồng cuối cùng?
Những ưu điểm và nhược điểm của mỗi loại là gì?Cách tiếp cận nào tốt hơn cho các dịch vụ web - hợp đồng đầu tiên hoặc hợp đồng cuối cùng?

Bạn có trải nghiệm nào với?

EDIT Câu hỏi này là về việc thực hiện một dịch vụ web (đọc: SOAP) Câu hỏi đặt ra là liệu các lớp thực hiện, nếu được mã hóa đầu tiên và WSDL và giản đồ XSD được tạo ra từ đó (hợp đồng cuối cùng) hoặc Lược đồ WSDL và XSD được viết đầu tiên và các lớp thực hiện được tạo ra (hợp đồng trước)

+0

Vì câu hỏi hỏi về những ưu điểm và nhược điểm của mỗi bên, tôi không thấy rằng đó là chủ quan. –

Trả lời

8

Hợp đồng đầu tiên là "phương pháp hay nhất" được chấp nhận chung.

Nó làm cho bạn rất rõ ràng với cả nhà sản xuất và người tiêu dùng của dịch vụ chính xác những gì cần thiết và những gì được mong đợi. Điều này trở nên đặc biệt quan trọng khi bạn bắt đầu cố gắng chuyển đổi các loại java -> loại xml. Bạn cũng có thể sử dụng lại các lược đồ trên các dịch vụ web khác nhau.

+0

Làm thế nào để bạn xác định một thứ gì đó giống như một luồng trong hợp đồng của bạn cho một thứ như tải lên tệp lớn? – Fireworks

+0

@Fireworks Không cần phải xác định rằng trong hợp đồng - đó đã là một tiêu chuẩn. Người ta có thể sử dụng MIME (kiểu cũ) hoặc MTOM (thường được sử dụng nhất hiện nay). – Raman

0

Tôi nghi ngờ câu trả lời là "xác định" phụ thuộc. "

Vấn đề là nếu bạn xây dựng và xuất bản hợp đồng của mình, bạn bị ràng buộc bởi nó. Điều này làm cho sự thay đổi khó khăn hơn. không phải là không thể, nhưng khó hơn.

Mặt khác, nó nhanh hơn để gây rối với hợp đồng hơn với mã, nếu bạn cảm thấy thoải mái với schemata vv Vì vậy, bạn có thể làm một số thay đổi gia tăng trong hợp đồng.

Không phải cũng có các công cụ sẽ tạo bộ khung mã từ WSDL không? Tôi gần như tích cực có. Nếu vậy, bạn có thể làm tốt để làm cho sơ đồ mục "mã", và tạo mã từ nó.

+1

Có những công cụ như vậy. Trong không gian Java, Quỹ Phần mềm Apache và những người khác cung cấp một số công cụ có thể thực hiện việc tạo mã. ví dụ: XMLBeans. Ngoài ra một số API có thể làm điều đó. API JAXB là tất cả về liên kết xml với các đối tượng Java và API JAX-WS bao gồm một công cụ wsimport, phân tích một WSDL và tạo các lớp Java. –

6

Tôi đã sử dụng cả hai phương pháp tiếp cận. Đề xuất của tôi là sử dụng hợp đồng hợp đồng trước tiên, nhưng mã đầu tiên WSDL.

Viết tệp WSDL có nhiều sắc thái kỳ lạ như liên kết, cổng và các thứ như vậy. Tôi muốn thực hiện điều này bằng các công cụ thay vì bằng tay. Có các công cụ để giúp thực hiện việc này, nhưng không có công cụ nào đơn giản hơn

@WebService 
public ...

Ít nhất bạn có thể xác minh triển khai của mình.

Đối với lược đồ, tôi đề xuất hợp đồng trước tiên vì ngôn ngữ lược đồ XML phong phú hơn nhiều so với những gì bạn có thể mô tả trong Java. Một ví dụ tôi thường đưa ra là cho thấy rằng Lược đồ XML có thể hạn chế kích thước của một chuỗi và áp dụng một mẫu biểu thức chính quy. Làm điều đó trong Java và chú thích trông hơi lộn xộn hơn một chút.

Một ưu điểm khác của việc làm lược đồ dưới dạng hợp đồng trước tiên là sự hiện diện của các công cụ để chuyển đổi tệp lược đồ của bạn thành tài liệu HTML.

Công cụ XJC có thể tạo các tệp lớp cần thiết. Tuy nhiên, tôi sẽ chỉ khuyên bạn nên làm điều đó lúc bắt đầu.

Cuối cùng, bạn nên lấy tệp WSDL được tạo và làm việc với tệp đó thay thế. Bằng cách đó bạn có thể sử dụng wsimport và xác minh rằng toàn bộ thứ từ WSDL đến Schema là hợp lệ.

Bạn có thể triển khai với tệp WSDL bằng cách sử dụng thuộc tính wsdlLocation trong triển khai @WebService và máy chủ ứng dụng sẽ sửa dữ liệu ràng buộc cho bạn khi người dùng yêu cầu WSDL từ máy chủ, nhưng bạn vẫn giữ lại chú thích của mình. Nếu không, chú thích của bạn sẽ không xuất hiện trên các tệp WSDL được yêu cầu.

+0

Phương pháp lai của bạn là thú vị, nhưng nó không rõ ràng với tôi như thế nào bạn đặt nó trong thực tế. Trước tiên bạn tạo một lược đồ mô tả các lớp bean được WS sử dụng, sau đó bạn tạo các lớp với XJC, nhưng làm thế nào để bạn sử dụng lược đồ này trong một WSDL được tạo ra? – Pino

+0

Đồng ý, điều này rất hữu ích. Spring-WS thực hiện điều này, nhưng tiến thêm một bước nữa, bằng cách thực hiện hợp đồng đầu tiên dựa trên lược đồ và tạo WSDL khi chạy khi WSDL được yêu cầu. Bằng cách đó, người ta không bao giờ phải gây rối với WSDL cả. – Raman

+0

@Pino chỉ sử dụng các lớp học trên phương thức của dịch vụ. https://github.com/trajano/app/tree/master/app-web có ví dụ về điều này. –

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