Al crear un servicio REST con la restricción HATEOAS , es muy fácil anunciar la existencia de recursos a través de enlaces. Llegas GET
a la raíz de mi sitio y yo respondo con el documento raíz que enumera todos los recursos de primer nivel:
{
users: { href: "/users" }
questions { href: "/questions" }
}
Los clientes que entienden cómo leer estos href
valores podrían realizar GET
solicitudes sobre ellos y descubrir todos los recursos actuales disponibles en la aplicación.
Esto funciona bien para escenarios de búsqueda básicos, pero no indica si un recurso es consultable. Por ejemplo, puede ser razonable realizar:
GET /users?surname=Smith
¿Hay algún formato que pueda expresar esta capacidad de consulta con suficiente información para que un cliente pueda formar una consulta coherente sin el conocimiento previo necesario del recurso?
Además, ¿hay alguna forma de expresar que un cliente puede realizar una POST
ubicación determinada con una ubicación esperada? Por ejemplo, se podría esperar que un cliente realice lo siguiente para crear un nuevo recurso de preguntas:
POST /questions
{
title: "Are there strategies for discovering REST services using HATEOAS?",
body: "When building a REST service with the HATEOAS constraint, it's very..."
}
Cuando usamos HTML como formato para el consumo humano, podemos expresar mucho de esto mediante el uso de formularios y mensajes escritos para permitir que un humano descubra las operaciones que puede realizar en un servicio.
¿Hay formatos que sean capaces de cosas similares para los clientes?
Respuestas:
¿Cómo saber qué tipo de insumos son aceptables? Es decir, si su cliente no tiene conocimiento previo, ¿cómo definiría la semántica del "apellido"? Estás comenzando a entrar en el territorio de necesitar algo como OWL .
Creo que es más práctico esperar que sus clientes comprendan la semántica de los tipos mime conocidos; digamos, por ejemplo, "texto / vcard" para personas.
fuente
application/atomapp+xml
y ponerla a disposición de todos los clientes que ya entienden este formato. Es probable que haya suficientes tipos de contenido bien conocidos para hacer de esta una solución práctica.Puede publicar detalles sobre sus servicios a través de un "WADL"
http://en.wikipedia.org/wiki/Web_Application_Description_Language
Es opcional y no todos los backend REST technos lo admiten. Jersey, la implementación java "oficial" de jax-rs, lo admite, por ejemplo, puede generarse automáticamente para usted.
Sin embargo, es bastante raro verlo usado.
No sé de los grandes que lo usan. En general, tiene una página web que describe la API.
fuente
Spring tiene algo de apoyo para esto, al igual que el resteasy.
fuente