B3-T7: Servicios Web y Arquitecturas Orientadas a Servicios

Este tema combina estándares W3C/OASIS (SOAP/WSDL) con la arquitectura REST y tecnologías modernas (GraphQL, gRPC). Las preguntas suelen pedir diferenciar SOAP de REST o identificar partes del WSDL. JWT aparece cada vez más.

EVOLUCIÓN DE LA COMPUTACIÓN DISTRIBUIDA

Fuente: W3C Web Services Architecture (w3.org/TR/ws-arch), RFCs IETF, especificaciones OASIS.
TecnologíaÉpocaProtocoloCaracterísticas
RPC (Remote Procedure Call)1980sBinario propietarioLlamadas remotas como si fueran locales. Acoplamiento fuerte
CORBA (OMG)1990sIIOP (sobre TCP)IDL para definir interfaces. Multi-lenguaje. Complejo
DCOM (Microsoft)1990sBinario propietarioCOM distribuido. Solo Windows
RMI (Java)1997JRMPRPC nativo de Java. Solo JVM
SOAP (W3C)2000XML sobre HTTPEstándar abierto, interoperable, pesado
REST (Roy Fielding)2000HTTP nativoArquitectura ligera, recursos con URIs
GraphQL (Facebook)2015HTTP (JSON)Cliente define qué datos quiere
gRPC (Google)2015HTTP/2 (Protobuf)Binario, streaming bidireccional, alto rendimiento

COMPARATIVA DE PARADIGMAS

AspectoSOAPRESTGraphQLgRPC
Formato datosXML (obligatorio)JSON, XML, textoJSONProtocol Buffers (binario)
TransporteHTTP, SMTP, JMSHTTPHTTPHTTP/2
ContratoWSDLOpenAPI/Swagger (opcional)Schema (obligatorio).proto (obligatorio)
EstadoPuede ser statefulStatelessStatelessStateless
TipadoFuertemente tipadoDébilmente tipadoFuertemente tipadoFuertemente tipado
RendimientoPesado (XML parsing)LigeroLigeroMuy alto (binario)
Caso de usoBanca, seguros, legacyAPIs web, móvilesSPAs con datos complejosMicroservicios internos

SOAP (Simple Object Access Protocol)

Fuente: W3C SOAP 1.2 Specification (w3.org/TR/soap12). Estándar W3C desde 2003.
Parte del mensaje SOAPFunción
EnvelopeElemento raíz XML. Envuelve todo el mensaje
HeaderOpcional. Metadatos: seguridad (WS-Security), transacciones, routing
BodyObligatorio. Contenido del mensaje: request o response
FaultDentro del Body. Información de error: faultcode, faultstring, detail
Estilo de bindingDescripción
Document/LiteralPreferido (WS-I). El body contiene un documento XML completo. Validable con XSD
RPC/EncodedEl body es una llamada a procedimiento con parámetros codificados. Legacy, no recomendado

WSDL (Web Services Description Language)

Fuente: W3C WSDL 1.1 (w3.org/TR/wsdl) y WSDL 2.0 (w3.org/TR/wsdl20).
Elemento WSDL 1.1FunciónEquivalente WSDL 2.0
typesEsquema XSD de los tipos de datostypes
messageDefine parámetros de entrada/salida(integrado en interface)
portTypeOperaciones (métodos) del serviciointerface
bindingProtocolo + formato (SOAP, HTTP, estilo)binding
serviceDirección (URL) del endpointservice + endpoint
Pregunta clásica: Las 5 partes del WSDL son types, message, portType, binding, service. En WSDL 2.0, message desaparece y portType se renombra a interface.

WS-* (Especificaciones complementarias)

EspecificaciónOrganismoFunción
WS-SecurityOASISSeguridad: tokens (UsernameToken, X.509, SAML), firma XML, cifrado XML
WS-ReliableMessagingOASISEntrega garantizada de mensajes (at-least-once, exactly-once, in-order)
WS-AtomicTransactionOASISTransacciones distribuidas ACID entre servicios
WS-AddressingW3CInformación de routing independiente del transporte (ReplyTo, FaultTo)
WS-PolicyW3CPolíticas del servicio (requisitos de seguridad, QoS)
WS-I Basic ProfileWS-IPerfil de interoperabilidad: reglas para SOAP/WSDL interoperable
UDDIOASISRegistro/directorio de servicios (páginas blancas, amarillas, verdes). Obsoleto

JAX-WS (API Java para SOAP)

AnotaciónFunción
@WebServiceMarca clase como servicio SOAP
@WebMethodExpone método como operación SOAP
@WebParamNombra parámetros en el WSDL
@WebResultNombra el resultado en el WSDL
@SOAPBindingDefine estilo (Document/RPC) y uso (Literal/Encoded)

REST (Representational State Transfer)

Fuente: Roy Fielding, "Architectural Styles and the Design of Network-based Software Architectures" (2000). Tesis doctoral pública de UC Irvine. RFC 9110 (HTTP Semantics).
Restricción RESTDescripción
Client-ServerSeparación de responsabilidades entre cliente y servidor
StatelessCada petición contiene toda la información necesaria. El servidor no guarda estado de sesión
CacheableLas respuestas deben indicar si son cacheables (Cache-Control, ETag)
Uniform InterfaceInterfaz uniforme: recursos identificados por URI, representaciones, mensajes auto-descriptivos, HATEOAS
Layered SystemCapas intermedias (proxies, gateways, CDN) transparentes para el cliente
Code on Demand (opcional)El servidor puede enviar código ejecutable al cliente (JavaScript)

VERBOS HTTP EN REST

VerboCRUDIdempotenteSafeEjemplo URIBody
GETReadGET /api/users/42No
POSTCreateNoNoPOST /api/users
PUTUpdate (completo)NoPUT /api/users/42
PATCHUpdate (parcial)No*NoPATCH /api/users/42
DELETEDeleteNoDELETE /api/users/42No
HEADMetadatosHEAD /api/users/42No
OPTIONSCapacidadesOPTIONS /api/usersNo
Idempotente = repetir la operación produce el mismo resultado. GET, PUT, DELETE son idempotentes. POST no lo es (cada call puede crear un nuevo recurso).

CÓDIGOS DE ESTADO HTTP

RangoCategoríaCódigos clave
1xxInformativo100 Continue, 101 Switching Protocols
2xxÉxito200 OK, 201 Created, 204 No Content
3xxRedirección301 Moved Permanently, 302 Found, 304 Not Modified
4xxError del cliente400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 405 Method Not Allowed, 409 Conflict, 429 Too Many Requests
5xxError del servidor500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

HATEOAS y Modelo de Madurez de Richardson

NivelNombreDescripción
0The Swamp of POXUn solo URI, un solo verbo (POST). Básicamente RPC sobre HTTP
1ResourcesMúltiples URIs para distintos recursos, pero un solo verbo
2HTTP VerbsUso correcto de GET, POST, PUT, DELETE + códigos de estado
3HATEOASLas respuestas incluyen hipervínculos a acciones posibles (Hypermedia As The Engine Of Application State)
Tip examen: HATEOAS es el nivel máximo de madurez REST. El cliente navega la API siguiendo links, sin conocer URIs de antemano.

SEGURIDAD EN APIs REST

MecanismoCómo funcionaEstándar
API KeyToken estático en header o query paramNo estandarizado
HTTP BasicAuthorization: Basic base64(user:pass)RFC 7617
OAuth 2.0Framework de autorización delegada. Flujos: Authorization Code, Client Credentials, PKCERFC 6749, 6750
JWTToken autónomo firmado (JWS) u opcionalmente cifrado (JWE)RFC 7519
OpenID ConnectCapa de identidad sobre OAuth 2.0. ID Token (JWT)openid.net
mTLSAutenticación mutua con certificados X.509RFC 8446 (TLS 1.3)

JWT (JSON Web Token)

Fuente: RFC 7519 (JWT), RFC 7515 (JWS), RFC 7516 (JWE) — IETF. Documentos públicos.
ParteContenidoCodificación
Header{"alg": "HS256", "typ": "JWT"}Base64url
PayloadClaims: sub (sujeto), iss (emisor), exp (expiración), iat (emitido), custom claimsBase64url
SignatureHMAC-SHA256(base64(header) + "." + base64(payload), secret)Base64url
Formato final
header.payload.signature — tres partes separadas por puntos
Pregunta clave: JWT tiene 3 partes separadas por puntos. El payload NO está cifrado (solo codificado en Base64). Para confidencialidad se usa JWE. Algoritmos comunes: HS256 (simétrico), RS256 (asimétrico RSA).

OpenAPI / Swagger

ConceptoDescripción
OpenAPI Specification (OAS)Estándar para describir APIs REST en formato YAML/JSON. Versión actual: 3.1
SwaggerConjunto de herramientas: Swagger UI (documentación interactiva), Swagger Editor, Swagger Codegen
Enfoque Contract-FirstDiseñar el OpenAPI spec primero, luego generar código
Enfoque Code-FirstEscribir código con anotaciones, generar el spec automáticamente

JAX-RS (API Java para REST)

AnotaciónFunción
@Path("/recurso")URI base del recurso
@GET, @POST, @PUT, @DELETEVerbo HTTP del método
@Produces("application/json")Formato de respuesta
@Consumes("application/json")Formato aceptado en request
@PathParam, @QueryParam, @HeaderParamExtracción de parámetros

GraphQL

Fuente: GraphQL Specification (spec.graphql.org) — licencia OWFa. Creado por Facebook (2012, open source 2015).
OperaciónFunciónEquivalente REST
QueryLeer datos. El cliente especifica exactamente qué campos quiereGET
MutationModificar datos (crear, actualizar, eliminar)POST, PUT, DELETE
SubscriptionRecibir datos en tiempo real (WebSocket)SSE / WebSocket
Ventaja GraphQLProblema REST que resuelve
No over-fetchingREST devuelve todos los campos; GraphQL solo los pedidos
No under-fetchingREST puede requerir múltiples requests; GraphQL un solo query anidado
Schema tipadoContrato estricto: types, fields, arguments. Introspección
Un solo endpointREST tiene múltiples URIs; GraphQL usa POST /graphql

gRPC (Google Remote Procedure Call)

Fuente: grpc.io — documentación oficial (Apache 2.0). Especificación de Protocol Buffers: protobuf.dev.
AspectoDescripción
ProtocoloHTTP/2: multiplexación, compresión de headers, streams
SerializaciónProtocol Buffers (binario, ~10x más compacto que JSON)
ContratoArchivos .proto que definen servicios y mensajes
Generación códigoprotoc genera stubs en múltiples lenguajes (Java, Go, Python, C#...)
Tipos de llamadaUnary (req/res), Server streaming, Client streaming, Bidirectional streaming
Caso de uso idealComunicación interna entre microservicios: baja latencia, alto throughput
LimitaciónNavegadores no soportan HTTP/2 framing directo → se usa gRPC-Web como proxy

SOA (Service-Oriented Architecture)

Fuente: OASIS SOA Reference Model (docs.oasis-open.org). Modelo arquitectónico, no una tecnología específica.
Principio SOADescripción
Contrato estandarizadoLos servicios exponen un contrato formal (WSDL, OpenAPI)
Acoplamiento débilLos servicios minimizan dependencias entre sí
AbstracciónSolo se expone el contrato; la implementación interna es opaca
ReutilizaciónLos servicios se diseñan para ser reutilizados por múltiples consumidores
ComposiciónLos servicios se combinan en procesos de negocio (orquestación/coreografía)
AutonomíaCada servicio controla su lógica y recursos
DescubrimientoLos servicios son localizables (registro UDDI, Service Registry)

ESB (Enterprise Service Bus)

Función ESBDescripción
RoutingEnrutar mensajes al servicio correcto (content-based routing)
TransformaciónConvertir formatos: XML ↔ JSON, mapeado de esquemas
MediaciónIntermediario entre servicios heterogéneos (protocolo, formato)
OrquestaciónCoordinar flujos de negocio multi-servicio (BPEL)
MonitorizaciónLogging, métricas, alertas de toda la comunicación
ProductosMuleSoft, IBM Integration Bus, Apache ServiceMix, WSO2 ESB

MICROSERVICIOS vs SOA

AspectoSOA tradicionalMicroservicios
ComunicaciónESB centralizadoDirecta (HTTP/REST, gRPC, mensajería)
GranularidadServicios grandes, reutilizablesServicios pequeños, una responsabilidad
BDBD compartida (frecuente)BD por servicio (Database per Service)
DeployCentralizadoIndependiente por servicio (contenedores)
GobernanzaCentralizadaDescentralizada (cada equipo elige su stack)
API GatewayESB hace de gatewayAPI Gateway dedicado (Kong, NGINX, AWS API Gateway)


FUENTES PÚBLICAS

Este resumen ha sido elaborado íntegramente a partir de fuentes de dominio público. No se ha utilizado material con copyright de terceros ni material de preparadores.
FuenteTipoReferencia
W3C SOAP 1.2, WSDL 1.1/2.0Estándarw3.org/TR/soap12, w3.org/TR/wsdl
OASIS WS-Security, WS-ReliableMessagingEstándardocs.oasis-open.org
Roy Fielding (2000) — Tesis RESTPublicación académicaics.uci.edu/~fielding/pubs/dissertation (pública)
RFC 9110 — HTTP SemanticsEstándarIETF
RFC 7519 — JWTEstándarIETF
RFC 6749 — OAuth 2.0EstándarIETF
GraphQL SpecificationEspecificaciónspec.graphql.org (OWFa)
gRPC DocumentationDocumentación oficialgrpc.io (Apache 2.0)

¿Quieres practicar este tema con tests?

MIMIR tiene más de 5.000 preguntas verificadas, simulacros con penalización real y chat IA que resuelve tus dudas sobre este tema.

Abrir MIMIR gratis →