La mejor práctica para el control de versiones de recurso REST es colocar la información de la versión en los encabezados Accept/Content-Type de la solicitud HTTP que deja el URI intacto.Versiones de recurso REST fácil en implementaciones basadas en JAX-RS?
Aquí está la muestra/respuesta a REST API para recuperar información del sistema: la atención
==>
GET /api/system-info HTTP/1.1
Accept: application/vnd.COMPANY.systeminfo-v1+json
<==
HTTP/1.1 200 OK
Content-Type: application/vnd.COMPANY.systeminfo-v1+json
{
“session-count”: 19
}
de pago que se especifica en la versión tipo MIME.
Aquí es otra petición/respuesta para la versión 2:
==>
GET /api/system-info HTTP/1.1
Accept: application/vnd.COMPANY.systeminfo-v2+json
<==
HTTP/1.1 200 OK
Content-Type: application/vnd.COMPANY.systeminfo-v2+json
{
“uptime”: 234564300,
“session-count”: 19
}
Ver http://barelyenough.org/blog/tag/rest-versioning/ para más explicación y ejemplos.
¿Es posible implementar este enfoque fácilmente en implementaciones basadas en Java JAX-RS, como Jersey o Apache CXF?
El objetivo es tener varias clases @Resource con el mismo valor de @Path, pero sirviendo la solicitud en función de la versión real especificada en el tipo MIME?
He investigado JAX-RS en general y Jersey in particlaur y no encontré soporte para eso. Jersey no da la oportunidad de registrar dos recursos con el mismo camino. La sustitución de la clase WebApplicationImpl debe implementarse para admitir eso.
¿Puede sugerir algo?
NOTA: Se requiere que las versiones múltiples del mismo recurso estén disponibles simultáneamente. Las nuevas versiones pueden introducir cambios incompatibles.
Esto definitivamente NO es la mejor práctica para versionar una API. La mejor práctica es NO tener versiones y solo hacer cambios compatibles. La creación artificial de nuevos tipos MIME para los cambios que cada cliente sensato debería tratar de forma automática (agregar nuevas etiquetas/claves a sus datos) no es RESTful en absoluto en mi libro. –
Bueno, NO siempre es posible hacer cambios compatibles. Además, en mi caso, múltiples versiones de recursos REST deben ser soportadas simultáneamente. En cuanto a la identidad de los recursos debe preservarse URI debe cambiar el mismo. La nueva versión es la nueva representación del recurso, es decir, un nuevo tipo MIME. –
Gracias por su comentario, actualizaré la pregunta original para ser más específico –