No soy experto descanso, pero permítanme lanzar en mi ¢ 2:
En la Web humana, formularios HTML a menudo se utilizan para construir un URI a una representación de los resultados de búsqueda. El problema es que la web programable no tiene formularios. Pero se puede definir fácilmente algo algo análogo a sí mismo, es decir:
definir un tipo de soporte para las descripciones de búsqueda, digamos application/prs.example.searchdescription+json
(pero Tomar nota del P. S. al final de esta respuesta);
Exponer un sub-recurso que representa una búsqueda de usuarios, /users/search
.
El segundo paso se logrará mediante la vinculación a ese sub recurso desde otro lugar. Por ejemplo, supongamos que el cliente ha solicitado GET /users
. Podría recibir algo como esto:
{ _links: [ …, { rel: "search", href: "https://stackoverflow.com/users/search" }, …] }
El cliente podría seguir ese enlace y POST
una especificación de búsqueda a ese recurso URI, por ejemplo:
POST /users/search
…
Content-Type: application/prs.example.search-definition+json
…
{ criteria: { surname: "Harvey" }, maxResults: 25 }
Aquí, criteria
contiene una representación (parcial) de los objetos que se encuentran Esto podría convertirse en una descripción arbitrariamente compleja.
a una solicitud como se describe anteriormente, el servidor podría responder con código de estado 200 OK
y, en el cuerpo de la entidad, un enlace a un recurso que representa los resultados de la búsqueda publicado:
{ _links: [ { rel: "results", href: "/users?surname=Harvey&maxResults=25" } ] }
el cliente puede luego navegue al URI con la relación results
para obtener los resultados de la búsqueda, sin tener que ensamblar un URI.
P.S.: Cuando originalmente escribí esto, todavía no me había dado cuenta de que definir nuevos tipos de medios todo el tiempo puede volverse problemático. Mark Nottingham blogged about "media type proliferation" and how to combat it haciendo uso de the profile
link relation.
Ojalá pudiera hacer +10 a esta pregunta. –