2008-11-10 10 views
9

Tengo un servicio web RESTful implementado en http://example.com/v1/SomeResource. Un día, una nueva versión de protocolo (que no es compatible con versiones anteriores) se implementa en http://example.com/v2/SomeResource. Desde el punto de vista del cliente, esta actualización podría ocurrir en cualquier momento entre dos solicitudes HTTP.Versioning RESTful services?

¿Cómo indica el servidor al cliente que ya no admite llamadas v1 y se espera que el cliente actualice a v2? ¿Hay un código de respuesta apropiado que pueda usar?

me gustaría proporcionar al cliente la siguiente información:

lugar
  1. Una actualización incompatibles ha tomado. No hay forma de que el cliente use el nuevo servicio porque el protocolo podría ser totalmente diferente.
  2. La URL del nuevo software de cliente.
  3. Un mensaje que explica a los usuarios que deben actualizar.
+2

Por lo que vale la pena, me parece el post de Darrel (en una cuestión aparte) para ser esclarecedor: http://stackoverflow.com/questions/972226/how-to-version-rest-uris/975394 # 975394 – Gili

+0

¿Posible duplicado de [Mejores prácticas para versiones de API?] (https://stackoverflow.com/questions/389169/best-practices-for-api -versioning) – Helen

Respuesta

8

La mejor opción:

Es probablemente mejor mantener el control de versiones de la URL y hacer que los nuevos recursos compatible con la edad.

Compatible:

Si debe mantener el v1 en la URL, y están haciendo URL v2, entonces usted tiene que decidir si desea apoyar ambos formatos, o hacer que el obsoleto v1. Si decide dejar obsoleta la antigua v1, le recomendaría devolver 303 o 401 para cualquier persona que solicite una URL v1.

Haciendo viejos obsoletos URL:

Yo recomiendo usar 303 Ver Otros. O si no hay una redirección asociada, entonces use 410 Gone.

Source

303 Ver Otros

La respuesta a la solicitud puede ser encuentra bajo una URI diferente y debe ser recuperada utilizando un método GET en ese recurso. Este método existe principalmente para permitir la salida de una secuencia de comandos POST-activated para redirigir el agente de usuario a un recurso seleccionado. El nuevo URI no es una referencia sustituta para el recurso solicitado originalmente. La respuesta 303 NO DEBE almacenarse en caché, , pero la respuesta a la segunda solicitud (redireccionada) puede ser almacenable en caché.

Los diferentes URI DEBERÍAN darse por el campo Ubicación en la respuesta. A menos que el método de solicitud fuera HEAD, , la entidad de la respuesta DEBERÍA contener una breve nota de hipertexto con un hipervínculo al URI (s) nuevo (s).

Nota: Muchos pre-HTTP/1.1 agente de usuario no entiende el estado 303 . Cuando la interoperabilidad con este tipo de clientes es una preocupación, el código de estado 302 se puede utilizar en su lugar, ya que la mayoría agentes de usuario reaccionan a una respuesta 302 como se describe aquí por 303.

Documento todo:

Lo principal de lo que debe preocuparse es lo que sea que elija devolver, solo documéntelo en su documentación. Puede decidir cómo quiere que su servicio funcione, otros que quieran consumirlo seguirán la documentación.

0

Yo recomendaría el uso del 301 (301 movido permanentemente). Lee why.

creo que sirve, Bruno Figueiredo

+1

No estoy seguro de que el SEO sea relevante para los servicios RESTful (que consumen las máquinas, no las personas). – Gili

4

creo que no debe hacer esto en primer lugar, pero probablemente sea demasiado tarde.

URI también deben ser estático para que cuando los cambios en los recursos o la implementación de los cambios en el servicio, el enlace sigue siendo el mismo. Esto permite marcar . También es importante que la relación entre los recursos que está codificada en los URI siga siendo independientemente de la forma en que se representan las relaciones donde están almacenados .

Del artículo RESTful Web services: The basics.

+0

Sí, en un mundo ideal estarías en lo cierto, pero estoy hablando de qué hacer cuando tienes que romper la compatibilidad con versiones anteriores. Si puedo mantener la compatibilidad con versiones anteriores, trataré de mantener los mismos URI que sugirió. – Gili