2010-09-24 19 views
15

Al diseñar una API RESTful, ¿los recursos que dependen de otros se modelarán como suburis o simplemente se deberían referir entre sí?Relaciones de recursos de modelado con API RESTful

E.g. suponiendo una puerta siempre depende de una casa luego

/house/73/door/1 

o

/house/73 
/door/1044 

dónde está la casa y la puerta incluyen referencias a los demás?

La mayoría de las API RESTful que he encontrado son bastante planas, por lo que me gustaría hacer referencia a las que tienen dependencias de relaciones más complejas.

Saludos

+0

También mencionaría que, por ejemplo, los URI geniales no cambian. En otras palabras, no agregue cosas a los URI que no son permanentes. Entonces, si '73' es tu clave principal en una base de datos, no podrás combinar bases de datos fácilmente ... – mogsie

Respuesta

13

En términos UML, si la relación es el de agregación, a continuación, utiliza una jerarquía plana con enlaces entre las cosas, mientras que si la relación es la de la composición (es decir, el tiempo de vida de un door está estrictamente limitada por el tiempo de vida de a house) usa sub recursos.

¡No sugiero que se dibuje un diagrama UML! Pero ayuda tener en mente esa distinción. (También podría modelar el caso de Agregación teniendo sub-recursos que son solo redirigidos a los reales; los redireccionamientos son RESTful. OTOH, en realidad no me gusta hacer eso, prefiero hacer explícitas las relaciones y mantener el número de redireccionamientos hacia abajo.)

13

Sólo recuerde que URIs son un detalle de implementación del servidor. Si puede modelarlos como recursos planos, hágalo. Será más fácil para el servidor manejarlos.

Si el identificador de la puerta no es único en todas las casas, entonces su servidor necesitará conocer la casa y, por lo tanto, debe incluir la casa en el URI.

Las relaciones entre los recursos deben modelarse mediante enlaces dentro de las representaciones devueltas. Es decir, la representación de tu casa probablemente contenga enlaces a todos los recursos de la puerta de esa casa. Recomendaría tratar de evitar que la estructura de URL tenga algún significado de dominio.

Solo use una jerarquía si es necesaria para identificar de manera única el recurso.

Cuestiones relacionadas