firma contrato
En este artículo se explica el concepto de HETEOAS. Que, aunque suene un poco raro al principio, significa más o menos que los servicios REST se autodescriben a si mismos. Es decir, que son capaces de mostrar su “contrato” mediante consultas en tiempo de ejecución.
Sería la implementación en REST del famoso WSDL, el contrato de SOAP, aunque claro que salvando las distancias.
Con este tipo de descriptores, se incide un poco más en el carácter más “dinámico” de REST, donde el cliente puede saber mediante una petición al recurso que tipos de operaciones se pueden hacer con él y con qué otros recursos están relacionados. Son una especie de meta-consultas integradas en el propio recurso.
Siguiendo el paralelismo de la orientación a objetos, donde una clase te dice que atributos y qué comportamiento tiene, aquí, un recurso te dice que atributos tiene y dónde están los recursos con los que se relaciona.
Este sería el ejemplo de lo que devuelve un recurso de tipo “Book”:
{
    "content": [ {
        "price": 499.00,
        "description": "Apple tablet device",
        "name": "iPad",
        "links": [ {
            "rel": "self",
            "href": "http://localhost:8080/product/1"
        } ],
        "attributes": {
            "connector": "socket"
        }
    }, {
        "price": 49.00,
        "description": "Dock for iPhone/iPad",
        "name": "Dock",
        "links": [ {
            "rel": "self",
            "href": "http://localhost:8080/product/3"
        } ],
        "attributes": {
            "connector": "plug"
        }
    } ],
    "links": [ {
        "rel": "product.search",
        "href": "http://localhost:8080/product/search"
    } ]
}
Por contra, SOAP es más “estático”. Quiero con esto decir que normalmente el análisis del contrato por parte del cliente se en tiempo de desarrollo. Ya que lo normal es que con la herramienta de desarrollo, mediante un asistente, se parsee el WSDL del servicio y se genere un proxy (el código necesario en el lenguaje elegido para hacer la invocación y obtener la respuesta).