2011-10-01 13 views
5

Estoy usando Django para implementar una API privada similar al resto y no estoy seguro de cómo manejar diferentes versiones de la API en el back-end.Cómo implementar el backend de la API con múltiples versiones

Es decir, si tengo 2 versiones de la API, ¿cómo se ve mi código? ¿Debo tener diferentes aplicaciones que manejen versiones diferentes? ¿Deben las diferentes funciones manejar diferentes versiones? ¿O debería usar declaraciones if para cuando una versión difiere de otra?

Planeo indicar la versión en el encabezado.

Gracias

Respuesta

3

Usted no necesitan API REST versión. Con REST, el control de versiones ocurre en el tiempo de ejecución ya sea a través de lo que podría llamarse 'reglas de extensión de la carga útil de ignorar' o mediante la negociación de contenido.

'reglas de extensión de la carga útil debe ignorar' se refieren a un aspecto que se integra en el diseño de sus mensajes. 'Debe ignorar' significa que una pieza de software que procesa un mensaje del formato dado debe ignorar cualquier construcción sintáctica desconocida. Esto es lo que todos sabemos de HTML y lo que hace posible insertar todo tipo de etiquetas de fantasía en una página HTML sin que el analizador se atragante.

'Must-ignore' le permite evolucionar las capacidades de su servicio agregando cosas a lo que envía ya sin considerar clientes que solo entienden las versiones anteriores.

La negociación de contenido se refiere al mecanismo incorporado por HTTP para negociar la representación real que el servidor envía a un cliente determinado en el tiempo de ejecución. El escenario típico es el siguiente: los clientes envían el encabezado Aceptar en la solicitud para publicitar de lo que son capaces y los servidores eligen la representación para enviar de vuelta en función de estas capacidades. Pero también hay variaciones de este tema (ver aquí para más detalles: http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html).

La negociación de contenido permite cambios incompatibles, lo que significa que puedo evolucionar mi servicio para poder enviar versiones antiguas y nuevas incompatibles y, basado en el encabezado Aceptar, mi servicio enviará el adecuado.

En pocas palabras: con ambos enfoques, su API se mantiene como está. No es necesario realizar ningún control de versiones en el nivel de la API, especialmente no la sugerencia a menudo sugerida (pero totalmente incorrecta) de los identificadores de versión en los URI (¡recuerde que está haciendo REST aquí, no SOAP!)

+0

¿Cómo manejaría un retroceso? ¿cambio de base de datos/modelo incompatible, al tiempo que permite que los clientes más antiguos/implementados sigan trabajando durante el período de transición? –

Cuestiones relacionadas