Deseo proporcionar diferentes respuestas a la misma pregunta para diferentes usuarios, en función de los derechos de acceso. He leído esta pregunta:Diferente contenido de recursos REST basado en privilegios de visualización de usuarios
Excluding private data in RESTful response
Pero no estoy de acuerdo con la respuesta aceptada, que establece que se debe proporcionar tanto /people.xml
y /unauthenticated/people.xml
, ya que mi comprensión de REST es que un recurso particular, debe vivir en una ubicación particular, no varias dependiendo de la cantidad de información que le interese.
El sistema que estoy diseñando es incluso más complicado que ese. Supongamos que un usuario ha creado varios círculos de amigos y le ha asignado diferentes derechos de acceso. Por ejemplo, mi círculo de "conocidos" podría tener acceso a mi cumpleaños, y mi círculo "profesional" podría tener acceso a mi historial de empleo, pero no al revés. Para aplicar la respuesta de la pregunta que mencioné, necesito tener una forma de obtener todos los círculos del usuario (que es posible que desee mantener en secreto por razones de seguridad), y luego ir a través de /circles/a/users/42
, /circles/b/users/42
, /circles/c/users/42
y así sucesivamente y luego fusionar los resultados para mostrar la cantidad máxima de información disponible. Obviamente no hay necesariamente un solo círculo que obtenga toda la información que obtiene el resto de los círculos. Creo que esto es bastante complicado (tenga en cuenta que probablemente necesite hacer esto con varios tipos de objetos y que las versiones futuras requieran un procedimiento diferente), pero ¿qué sucede si quiero imponer restricciones de seguridad a un usuario en particular? el hecho que él también está en algunos de mis círculos? ¿Puede ese problema incluso ser resuelto? Incluso si me niego a responder a cualquiera de las consultas mencionadas anteriormente y creo una nueva que podría darme una respuesta, aún revelaría el hecho de que este usuario específico recibe un trato diferente debido a las restricciones de acceso individuales.
¿Qué me falta aquí? ¿Es posible para mí desarrollar un servicio web RESTful?
Si la conclusión es que el comportamiento no es RESTful, ¿esto todavía constituiría una situación en la que sería moralmente correcto romper el contrato de REST? Si es así, ¿cuáles son las implicaciones negativas? ¿Me arriesgo a problemas de caché de proxy, por ejemplo?
Gracias por su respuesta! Tal como lo entiendo, es posible que desee elegir la solución hack-ee si necesito devolver un conjunto no trivial de elementos basado en permisos complejos. Sin embargo, mencioné el almacenamiento en caché en mi pregunta. Para especificar: * ¿Existe el riesgo de que un proxy de almacenamiento en caché (o similar) distribuya la misma versión del objeto a usuarios con permisos diferentes? * También con respecto al almacenamiento en caché, * ¿cómo puedo informar al cliente que un recurso ha cambiado debido a un cambio de política, * a pesar de un sello de tiempo inalterado? De nuevo, gracias por toda la ayuda! –
@jeremyth escribió: "no debería importar cuál es la URL del recurso, ya que el servidor lo controla". Para otras personas que terminan aquí, este concepto se conoce como [HATEOAS] (http://en.wikipedia.org/wiki/HATEOAS), que es un tipo específico de REST, no se aplica a todos los conceptos REST. – Wilt
@Wilt La frase "hipermedia como motor del estado de la aplicación" se usa textualmente en la tesis de Fielding.Entonces, cuando dices "un tipo específico de REST", lo que realmente quieres decir es "el tipo de REST previsto por la persona que inventó el término 'RESTO'". Es uno de los principios básicos. –