2009-04-18 11 views
11

Cuál es el mejor enfoque para desarrollar servicios web; contrato primero o contrato último?
¿Cuáles son las ventajas y desventajas de cada uno?¿Cuál es el mejor enfoque para los servicios web: contrato primero o contrato último?

¿Con qué experiencia?

EDITAR Esta pregunta se refiere a la implementación de un servicio web (es decir: SOAP) La pregunta es si las clases de implementación debe codificarse primero y el WSDL y esquema XSD generados a partir de ese (último contrato) o la Esquema WSDL y XSD escrito primero y las clases de implementación generadas (contrato primero)

+0

Dado que la pregunta se refiere a las ventajas y desventajas de cada lado, no veo que sea subjetiva. –

Respuesta

8

Contrato primero es la 'mejor práctica' generalmente aceptada.

Hace que sea muy claro con el productor y el consumidor del servicio exactamente lo que se necesita y lo que se espera. Esto se vuelve especialmente importante cuando comienza a tratar de convertir tipos java -> tipos xml. También puedes reutilizar esquemas en diferentes servicios web.

+0

¿Cómo se define algo así como una secuencia en su contrato para algo así como cargas de archivos grandes? – Fireworks

+0

@Fireworks No es necesario definir eso en el contrato, eso ya es un estándar. Uno puede usar MIME (estilo antiguo) o MTOM (más usado a menudo ahora). – Raman

0

Sospecho que la respuesta es definitivamente "depende".

El problema es que si construyes y publicas tu contrato, estás obligado por él. Esto hace que el cambio sea más difícil. no es imposible, pero es más difícil.

Por otro lado, es más rápido meterse con el contrato que con el código, si se siente cómodo con los esquemas, etc. Así que puede hacer un cambio incremental en el contrato.

¿No hay herramientas que generarán un código esqueleto del WSDL? Estoy casi seguro de que hay. De ser así, podría hacer que los esquemas sean el elemento "código" y generar código a partir de él.

+1

Existen tales herramientas. En el espacio de Java, Apache Software Foundation y otros proporcionan una cantidad de herramientas que pueden lograr la generación de código. por ejemplo, XMLBeans. También varias API pueden hacerlo. La API JAXB tiene que ver con el enlace de xml a objetos Java, y la API JAX-WS incluye una herramienta wsimport, que analiza un WSDL y genera clases Java. –

6

He utilizado ambos enfoques. Mi sugerencia es usar primer contrato esquema, pero codificar primero WSDL.

Escribir un archivo WSDL tiene muchos matices extraños como enlaces, puertos y tal. Prefiero tener esto hecho por herramientas en lugar de hacerlo a mano. Hay herramientas para ayudar a hacer esto, pero ninguno de ellos son más simples que

@WebService 
public ...

Por lo menos se puede verificar su implementación.

Para el esquema, sugerí contrato primero porque el lenguaje de esquema XML es mucho más rico que lo que puede describir en Java. Un ejemplo que suelo dar es que XML Schema puede restringir el tamaño de una cadena y aplicar un patrón de expresión regular. Hacer eso en Java y anotaciones parece un poco más complicado.

Otra ventaja de hacer el esquema como contrato primero es la presencia de herramientas para convertir su archivo de esquema en documentación HTML.

La herramienta XJC puede generar los archivos de clase requeridos. Sin embargo, solo recomendaría hacerlo al comienzo.

Al final debe tomar el archivo WSDL generado y trabajar con eso en su lugar. De esta forma, puede usar wsimport y verificar que todo, desde WSDL hasta Schema, sea válido.

Puede implementar con el archivo WSDL utilizando el atributo wsdlLocation en su implementación @WebService y el servidor de aplicaciones arreglará los datos de enlace por usted cuando los usuarios soliciten el WSDL del servidor, pero aún conserva sus anotaciones. De lo contrario, sus anotaciones no aparecerán en los archivos WSDL solicitados.

+0

Su enfoque híbrido es interesante, pero no me queda claro cómo lo pone en práctica. Primero crea un esquema que describe las clases de bean utilizadas por el WS, luego crea las clases con XJC, pero ¿cómo usa este esquema en un WSDL generado? – Pino

+0

De acuerdo, esto es muy útil. Spring-WS hace esto, pero va un paso más allá, al hacer un contrato primero basado en el esquema, y ​​generar el WSDL en tiempo de ejecución cuando se solicita el WSDL. De esa manera, uno nunca tiene que meterse con el WSDL en absoluto. – Raman

+0

@Pino solo usa las clases sobre el método del servicio. https://github.com/trajano/app/tree/master/app-web tiene un ejemplo de esto. –

Cuestiones relacionadas