Saltar al contenido

SOAP frente a REST

La comparación que siempre cae: protocolo contra estilo, contrato obligatorio contra documentación, y en qué escenario conviene cada uno, con las APIs de Java de cada familia.

Protocolo frente a estilo arquitectónico

La diferencia de fondo no está en la sintaxis, está en la categoría. SOAP es un protocolo: una especificación que dice exactamente cómo tiene que ser el mensaje, qué elementos lleva y cómo se señalan los errores. Cumplirlo o no es una cuestión objetiva, y hay validadores que lo comprueban.

REST es un estilo arquitectónico: un conjunto de restricciones de diseño sobre cómo organizar un sistema distribuido. No dice qué formato tiene el mensaje ni qué campos lleva; dice que hay recursos, que se identifican con URI, que el interfaz es uniforme y que el servidor no guarda sesión. Sobre esa base, cada API decide su propio formato.

Un mensaje se comprueba contra SOAP; un diseño se juzga contra REST. Confundir esas dos categorías es el error clásico de este apartado.

Para el examen

  • SOAP: un protocolo: se cumple o no, y se puede validar

  • REST: un estilo arquitectónico: se juzga un diseño

  • Conclusión: no son dos protocolos rivales

La comparación punto por punto

AspectoSOAPREST
Qué esUn protocolo estandarizado por la W3CUn estilo de arquitectura, sin organismo que lo norme
Formato del mensajeXML obligatorio, dentro de un sobreLibre: en la práctica JSON, aunque admite XML u otros
ContratoWSDL, formal y generado por el motorNo hay contrato obligatorio; se documenta aparte
TransporteIndependiente: HTTP, correo, colas de mensajesHTTP, que forma parte del estilo
Uso de HTTPSolo como transporte, siempre con POSTComo interfaz: los verbos y los códigos de estado significan algo
Puntos de accesoUno solo para todas las operacionesUno por recurso
ErroresElemento Fault dentro del sobreCódigos de estado HTTP
SeguridadWS-Security a nivel de mensaje, además de TLSTLS en el canal, más testigos como OAuth 2.0 o JWT
Peso y verbosidadAlto: el XML y el sobre añaden mucho textoBajo: JSON es más compacto

Una fila merece un comentario aparte: el uso de HTTP. SOAP lo trata como un camión, un mero medio para llevar el sobre de un sitio a otro, y por eso siempre usa POST y le da igual el código de estado salvo para distinguir 200 de 500. REST lo trata como el propio idioma: el verbo dice qué se hace y el código de estado dice qué ha pasado.

Para el examen

  • Formato: XML obligatorio en SOAP; libre, normalmente JSON, en REST

  • Contrato: WSDL obligatorio frente a ninguno obligatorio

  • Puntos de acceso: uno solo frente a uno por recurso

  • Errores: Fault frente a código de estado HTTP

  • Seguridad: WS-Security frente a TLS más OAuth o JWT

El contrato: WSDL frente a la documentación de las APIs

En SOAP el contrato es parte del servicio: el WSDL se genera solo, es obligatorio en la práctica y una herramienta puede leerlo y fabricar el código del cliente sin intervención humana. Eso da rigidez, que en integraciones entre organizaciones es una ventaja: lo que no está en el contrato, no existe.

En REST no hay contrato obligatorio, así que la descripción de la API se hace con formatos externos. Los que aparecen en el temario son cuatro.

FormatoNota
WADLEl intento temprano de hacer un WSDL para servicios REST, en XML. Tuvo poco recorrido
WSDL 2.0Puede describir servicios REST gracias a su vinculación HTTP, pero apenas se usó para eso
RAMLLenguaje de modelado de APIs REST, orientado a diseñar primero y programar después
Swagger, hoy OpenAPIEl estándar de facto actual para describir una API REST

La diferencia no es que REST no se pueda documentar: es que en SOAP el contrato es obligatorio y viene con el servicio, mientras que en REST es una decisión del equipo y se escribe aparte.

Para el examen

  • En SOAP: el contrato es obligatorio y lo genera el motor

  • En REST: se documenta aparte

  • Opciones: WADL, WSDL 2.0, RAML y Swagger

  • El estándar de facto: Swagger, hoy OpenAPI

Cuándo conviene cada uno

REST domina hoy porque el escenario mayoritario le favorece: APIs públicas, clientes de navegador y de móvil, equipos que iteran deprisa y necesitan algo ligero de consumir. La misma API sirve para cualquier consumidor sin generar código específico para cada uno.

  • SOAP encaja mejor cuando el contrato formal es un requisito, típicamente en integraciones entre organizaciones o entre administraciones.
  • SOAP encaja mejor cuando hace falta seguridad a nivel de mensaje que sobreviva a intermediarios, o transacciones distribuidas y mensajería fiable de la familia WS-*.
  • SOAP encaja mejor cuando el transporte no va a ser HTTP, por ejemplo sobre una cola de mensajes.
  • REST encaja mejor en APIs abiertas, en aplicaciones web y móviles, y cuando importan la sencillez, el peso del mensaje y la posibilidad de aprovechar la caché de HTTP.

No es una competición con ganador: en un mismo organismo conviven servicios SOAP heredados de integraciones antiguas y APIs REST nuevas para los canales digitales. Lo que se pregunta en el examen es saber justificar la elección, no repetir que uno es mejor.

Para el examen

  • Dónde domina REST: APIs públicas, móviles y equipos que iteran rápido

  • Dónde sigue SOAP: integraciones entre organizaciones

  • Qué necesitan esas integraciones: contrato formal, seguridad a nivel de mensaje y transacciones

JAX-RS: REST en Java

Cada familia tiene su API en Java, y conviene no confundirlas. Para SOAP es JAX-WS, ya visto; para REST es JAX-RS, que es la que se usa cuando lo que se quiere publicar es un recurso y no una operación.

Sus implementaciones más conocidas son Jersey, RESTEasy, Apache CXF y Restlet. Varias de ellas no hay ni que instalarlas por separado, porque los servidores de aplicaciones del mercado ya las traen incorporadas de serie.

JAX-WS y JAX-RS se parecen en el nombre y en la forma de trabajar (una clase Java corriente más anotaciones), pero publican cosas distintas: JAX-WS un servicio SOAP y JAX-RS un recurso REST.

Para el examen

  • JAX-WS: publica servicios SOAP

  • JAX-RS: publica recursos REST

  • En qué se parecen: en el nombre y en trabajar con clase más anotaciones

Las anotaciones de JAX-RS

El trabajo en JAX-RS se hace declarando: se toma una clase Java corriente y, a base de anotaciones, se convierte en un recurso web con sus rutas, sus verbos y sus formatos. Las anotaciones se agrupan en cuatro familias.

GrupoAnotacionesPara qué
Rutas y métodos@Path, @GET, @POST, @PUT, @DELETE, @HEADFijar la ruta de acceso de la clase o del método y el verbo HTTP al que responde
Formatos@Produces, @ConsumesDeclarar los tipos de medios MIME que devuelve y los que acepta
Datos de la petición@PathParam, @QueryParam, @MatrixParam, @HeaderParam, @CookieParam, @FormParamExtraer un valor de la ruta, de la cadena de consulta, de la matriz, de una cabecera, de una cookie o de un formulario
Apoyo@DefaultValue, @ContextDar un valor por defecto cuando el parámetro no llega, y obtener el contexto de ejecución
java
@Path("/alumnos/{alumno}/intentos")
public class IntentosResource {

  @GET
  @Produces("application/json")
  public List<Intento> listar(
      @PathParam("alumno") long alumnoId,
      @QueryParam("tema") @DefaultValue("todos") String tema) {
    // devuelve los intentos del alumno, filtrados por tema
  }

  @POST
  @Consumes("application/json")
  public Response registrar(Intento intento) {
    // crea el intento y responde con 201
  }
}

Regla para no equivocarse: @Path, @GET y @QueryParam son de JAX-RS (REST); @WebService, @WebMethod y @WebParam son de JAX-WS (SOAP).

Para el examen

  • De JAX-RS (REST): Path, GET y QueryParam

  • De JAX-WS (SOAP): WebService, WebMethod y WebParam

  • Por qué importa: es la confusión que más se pregunta