Al comparar la estructura REST [api] con un modelo OO, veo estas similitudes:
Ambos:
Están orientados a datos
- REST = Recursos
- OO = Objetos
Operación envolvente alrededor de datos
- REST = surround VERBS (Get, Post, ...) alrededor de los recursos
- OO = promover la operación alrededor de objetos por encapsulación
Sin embargo, las buenas prácticas de OO no siempre se encuentran en las API REST cuando se trata de aplicar el patrón de fachada, por ejemplo: en REST, no tiene 1 controlador para manejar todas las solicitudes Y no oculta la complejidad interna del objeto.
Por el contrario, REST promueve la publicación de recursos de todas las relaciones con un recurso y otro en al menos dos formas:
a través de relaciones de jerarquía de recursos (un contacto de id 43 se compone de una dirección 453):
/api/contacts/43/addresses/453
a través de enlaces en una respuesta REST json:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
Volviendo a OO, el patrón de diseño de fachada respeta a Low Coupling
entre un objeto A y su ' cliente objeto B ' y High Cohesion
para este objeto A y su composición interna de objetos (objeto C , objeto D ). Con la Objecta interfaz, esto permite a un desarrollador para limitar el impacto sobre objectB de los Objecta cambios internos (en objectC y objectD ), siempre y cuando el Objecta API (operaciones) todavía son respetados.
En REST, los datos (recursos), las relaciones (enlaces) y el comportamiento (verbos) se explotan en diferentes elementos y están disponibles en la web.
Jugando con REST, siempre tengo un impacto en los cambios de código entre mi cliente y servidor: porque tengo High Coupling
entre mis Backbone.js
solicitudes y Low Cohesion
entre recursos.
Nunca descubrí cómo dejar que mi Backbone.js javascript application
trato con el descubrimiento de " Recursos y características REST " promovido por los enlaces REST. Entiendo que la WWW está destinada a ser servida por múltiples servidores, y que los elementos de OO tuvieron que explotarse para ser atendidos por muchos hosts allí, pero para un escenario simple como "guardar" una página que muestra un contacto con sus direcciones, Termino con:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
lo que me llevó a mover la acción de ahorro de la responsabilidad transaccional atómica en las aplicaciones de los navegadores (ya que dos recursos se pueden abordar por separado).
Teniendo esto en cuenta, si no puedo simplificar mi desarrollo (los patrones de diseño de fachadas no son aplicables) y si aporto más complejidad a mi cliente (manejo del ahorro atómico transaccional), ¿cuál es el beneficio de estar RESTful?
PUT /api/contacts/43
las actualizaciones de los objetos internos en cascada? Tenía muchas API diseñadas de esta manera (la URL maestra lee / crea / actualiza el "todo" y las sub urls actualizan las piezas). Solo asegúrese de no actualizar la dirección cuando no se requieran cambios (por razones de rendimiento).