---
type: "article"
title: "Versiones en nuestra API REST"
summary: "<p>Una de las cosas que hay que tener en cuenta cuando hacemos una API es que esta, al igual que otro tipo de aplicaciones web, va a cambiar.</p>\n<p>Si la API es pública o es consumida por una gran cantidad de clientes, es casi seguro que muchos de estos clientes queden obsoletos o no sigan al día las actualizaciones que tu equipo vaya haciendo en la misma.</p>\n<p>La solución consiste en dar compatibilidad a las versiones anteriores y de alguna forma separar o que el cliente pueda indicar a qué versión está accediendo en cada momento.</p>\n<p>Las opciones más habituales para hacer esto serían:</p>\n<h4 id=\"indicar-la-versión-de-la-api-en-la-url-del-recurso\"><strong>Indicar la versión de la API en la URL del recurso.</strong></h4>\n<p><strong><a href=\"https://api.dominio.com/v1/recurso/\">https://api.dominio.com/v1/recurso/</a></strong></p>\n<p>Este sería un ejemplo de URL en la que se indica la versión de la API en la misma.</p>\n<p>Esta es la opción más aconsejada pero la que a mí personalmente menos me convence ya que los clientes que quisieran estar actualizados a la última versión, deberían modificar las rutas de sus llamadas al servicio constantemente.</p>\n<h4 id=\"indicar-como-parámetro-la-versión-de-la-api\"><strong>Indicar como parámetro la versión de la API</strong></h4>\n<p><strong><a href=\"https://api.dominio.com/recurso/?v=1\">https://api.dominio.com/recurso/?v=1</a></strong></p>\n<p>Este tipo de opción se usa por ejemplo en la API de YouTube.</p>\n<p>Yo personalmente prefiero indicar como parámetros opciones para filtrar o tratar la información del recurso solicitado. Por ejemplo, paginaciones, órdenes, búsquedas, especificar información parcial etc.</p>\n<h4 id=\"indicar-como-header-la-versión-de-la-api\"><strong>Indicar como header la versión de la API</strong></h4>\n<p>**<a href=\"https://api.dominio.com/recurso/\">https://api.dominio.com/recurso/</a> **\n<strong>&ldquo;API version&rdquo;: 1</strong></p>\n<p>Esta opción es la que más me convence, ya que no se ensucia la URL y si la aplicación cliente tiene las llamadas centralizadas en un único punto no debería ser problema añadir un header extra indicando la versión del API.</p>\n<p>Después en el servidor podremos separar las versiones de las APIs en distintos servidores web o aplicaciones mediante un servidor proxy HTTP como Varnish que lea el header del request y sirva la versión de la API solicitada de forma transparente.</p>\n<p>En javascript por ejemplo tendríamos el siguiente código para añadir un header http a nuestra llamada AJAX.</p>\n<pre tabindex=\"0\"><code>\nvar request = new XMLHttpRequest();\nrequest.open(&#34;GET&#34;, &#34;https://api.dominio.com/recurso/&#34;, false);\nrequest.setRequestHeader(&#34;API version&#34;, &#34;1&#34;);\nrequest.send();\n</code></pre><p>En jQuery se añadiría el header de la siguiente forma.</p>\n<pre tabindex=\"0\"><code>\n$.ajax(\n &#34;https://api.dominio.com/recurso/&#34;,\n {&#34;headers&#34;: {&#34;API version&#34;: &#34;1&#34;}}\n);\n</code></pre><p>En cualquier caso, se elija la opción que se elija es importante tener en cuenta que nuestra API puede cambiar en el futuro y facilitar la vida a los desarrolladores que programen los clientes de la misma siempre es una buena práctica.</p>"
newsletter: "Asier Marqués, blog personal"
newsletter_handle: "blog-asiermarques-com"
newsletter_url: "https://usecommune.com/n/blog-asiermarques-com"
author: "Asier Marqués (@asier)"
published: "2012-12-04T14:57:51.000Z"
canonical_url: "https://usecommune.com/n/blog-asiermarques-com/a/versiones-en-nuestra-api-rest"
markdown_url: "https://usecommune.com/n/blog-asiermarques-com/a/versiones-en-nuestra-api-rest.md"
chat_url: "https://usecommune.com/n/blog-asiermarques-com/a/versiones-en-nuestra-api-rest/chat"
source_url: "https://blog.asiermarques.com/2012/versiones-en-nuestra-api-rest/"
body_source: "imported"
likes: 0
replies: 0
body_words: 412
---

# Versiones en nuestra API REST

\<p>Una de las cosas que hay que tener en cuenta cuando hacemos una API es que esta, al igual que otro tipo de aplicaciones web, va a cambiar.\</p> \<p>Si la API es pública o es consumida por una gran cantidad de clientes, es casi seguro que muchos de estos clientes queden obsoletos o no sigan al día las actualizaciones que tu equipo vaya haciendo en la misma.\</p> \<p>La solución consiste en dar compatibilidad a las versiones anteriores y de alguna forma separar o que el cliente pueda indicar a qué versión está accediendo en cada momento.\</p> \<p>Las opciones más habituales para hacer esto serían:\</p> \<h4 id="indicar-la-versión-de-la-api-en-la-url-del-recurso">\<strong>Indicar la versión de la API en la URL del recurso.\</strong>\</h4> \<p>\<strong>\<a href="https://api.dominio.com/v1/recurso/">https://api.dominio.com/v1/recurso/\</a>\</strong>\</p> \<p>Este sería un ejemplo de URL en la que se indica la versión de la API en la misma.\</p> \<p>Esta es la opción más aconsejada pero la que a mí personalmente menos me convence ya que los clientes que quisieran estar actualizados a la última versión, deberían modificar las rutas de sus llamadas al servicio constantemente.\</p> \<h4 id="indicar-como-parámetro-la-versión-de-la-api">\<strong>Indicar como parámetro la versión de la API\</strong>\</h4> \<p>\<strong>\<a href="https://api.dominio.com/recurso/?v=1">https://api.dominio.com/recurso/?v=1\</a>\</strong>\</p> \<p>Este tipo de opción se usa por ejemplo en la API de YouTube.\</p> \<p>Yo personalmente prefiero indicar como parámetros opciones para filtrar o tratar la información del recurso solicitado. Por ejemplo, paginaciones, órdenes, búsquedas, especificar información parcial etc.\</p> \<h4 id="indicar-como-header-la-versión-de-la-api">\<strong>Indicar como header la versión de la API\</strong>\</h4> \<p>\*\*\<a href="https://api.dominio.com/recurso/">https://api.dominio.com/recurso/\</a> \*\* \<strong>&ldquo;API version&rdquo;: 1\</strong>\</p> \<p>Esta opción es la que más me convence, ya que no se ensucia la URL y si la aplicación cliente tiene las llamadas centralizadas en un único punto no debería ser problema añadir un header extra indicando la versión del API.\</p> \<p>Después en el servidor podremos separar las versiones de las APIs en distintos servidores web o aplicaciones mediante un servidor proxy HTTP como Varnish que lea el header del request y sirva la versión de la API solicitada de forma transparente.\</p> \<p>En javascript por ejemplo tendríamos el siguiente código para añadir un header http a nuestra llamada AJAX.\</p> \<pre tabindex="0">\<code> var request = new XMLHttpRequest(); request.open(&#34;GET&#34;, &#34;https://api.dominio.com/recurso/&#34;, false); request.setRequestHeader(&#34;API version&#34;, &#34;1&#34;); request.send(); \</code>\</pre>\<p>En jQuery se añadiría el header de la siguiente forma.\</p> \<pre tabindex="0">\<code> $.ajax( &#34;https://api.dominio.com/recurso/&#34;, {&#34;headers&#34;: {&#34;API version&#34;: &#34;1&#34;}} ); \</code>\</pre>\<p>En cualquier caso, se elija la opción que se elija es importante tener en cuenta que nuestra API puede cambiar en el futuro y facilitar la vida a los desarrolladores que programen los clientes de la misma siempre es una buena práctica.\</p>

***

## Discussion

No replies yet.
