Blame programming-guidelines/es/api-stability.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="api-stability" xml:lang="es">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="index#maintainer-guidelines"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Philip Withnall</name>
Packit 1470ea
      <email its:translate="no">philip.withnall@collabora.co.uk</email>
Packit 1470ea
      <years>2015</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <include xmlns="http://www.w3.org/2001/XInclude" href="cc-by-sa-3-0.xml"/>
Packit 1470ea
Packit 1470ea
    <desc>Compatibilidad hacia atrás en API</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Daniel Mustieles</mal:name>
Packit 1470ea
      <mal:email>daniel.mustieles@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2016</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Javier Mazorra</mal:name>
Packit 1470ea
      <mal:email>mazi.debian@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2016</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Estabilidad de la API</title>
Packit 1470ea
Packit 1470ea
  <synopsis>
Packit 1470ea
    <title>Resumen</title>
Packit 1470ea
Packit 1470ea
    <list>
Packit 1470ea
      <item>

Define las garantías de estabilidad de la API para su proyecto. (<link xref="#stability"/>)

</item>
Packit 1470ea
      <item>

Asegúrese de que se cambian los números de versión adecuadamente cuando cambia la API. (<link xref="#versioning"/>)

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <section id="api-and-abi">
Packit 1470ea
    <title>API y ABI</title>
Packit 1470ea
Packit 1470ea
    

En un nivel superior, una API (interfaz de programación de aplicaciones) es el límite entre dos componentes cuando se desarrolla contra ellos. Está estrechamente relacionado con una ABI (interfaz binaria de aplicación) que es el límite en tiempo de ejecución. Define las posibles formas en que otros componentes pueden interactuar con un componente. Más concretamente, esto significa que normalmente las cabeceras C de una biblioteca forman su API, y los símbolos compilados de la biblioteca su ABI. La diferencia entre una API y ABI viene dada por la compilación del código: hay ciertas cosas en una cabecera C, como #define, que pueden causar cambiar la API de una biblioteca sin cambiar su ABI. Sin embargo, estas diferencias son en su mayoría académicas, y para todos los propósitos prácticos, la API y ABI se pueden tratar de manera intercambiable.

Packit 1470ea
Packit 1470ea
    

Ejemplos de cambios API-incompatibles para una función C serían añadir un nuevo parámetro, cambiar el tipo de retorno de la función, o eliminar un parámetro.

Packit 1470ea
Packit 1470ea
    

Sin embargo, muchas otras partes de un proyecto pueden formar una API. Si un demonio se expone en D-Bus, las interfaces exportadas ahí forman una API. Del mismo modo, si una API en C se expone en lenguajes de alto nivel usando GIR, el archivo GIR forma otra API - si cambia, cualquier código de nivel superior que lo utilice también debe cambiar.

Packit 1470ea
Packit 1470ea
    

Otros ejemplos de API más inusuales son las ubicaciones del archivo de configuración y sus formatos, y esquemas GSettings. Cualquier cambio en estos podría requerir cambiar el código que usa su biblioteca.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="stability">
Packit 1470ea
    <title>Estabilidad</title>
Packit 1470ea
Packit 1470ea
    

La estabilidad de la API se refiere a un cierto nivel de garantía de un proyecto de que su API no cambiará en formas definidas en el futuro, o no cambiarán en absoluto. Generalmente, una API se considera «estable» si se compromete a la compatibilidad con versiones anteriores (definida más abajo); pero las API también podrían comprometerse a ser inestables o incluso compatibles hacia adelante. El propósito de las garantías de estabilidad de la API es permitir a la gente usar su proyecto desde su propio código sin preocuparse de actualizar constantemente su código para mantenerse actualizado con los cambios de la API. Normalmente la garantía de estabilidad de la API significa que el código que se compila contra una versión de una biblioteca funcionará sin problemas contra futuras versiones de esa biblioteca con el mismo número de versión principal — o de manera similar el código que funciona contra un demonio seguirá funcionando contra todas las futuras versiones de ese demonio con el mismo número de versión principal.

Packit 1470ea
Packit 1470ea
    

Es posible aplicar distintos niveles de estabilidad de API a los componentes dentro de un proyecto. Por ejemplo, las funciones del núcleo en una biblioteca podrían ser estables, y por lo tanto sus API dejarse sin cambios en el futuro; mientras las más nuevas, funciones menos relacionadas con el núcleo, podrían quedarse inestables y podrían cambiar incontroladamente hasta que se encuentra el diseño adecuado, momento en el que se podrían marcar como estables.

Packit 1470ea
Packit 1470ea
    

Varios tipos de estabilidad comúnmente considerados:

Packit 1470ea
    <terms>
Packit 1470ea
      <item>
Packit 1470ea
        <title>Inestable</title>
Packit 1470ea
        

La API puede cambiar o eliminarse en el futuro.

Packit 1470ea
      </item>
Packit 1470ea
      <item>
Packit 1470ea
        <title>Compatibilidad hacia atrás</title>
Packit 1470ea
        

Solo se permiten los cambios que permiten al código compilado contra la API no modificada continuar ejecutándose contra la API modificada (por ejemplo, no se pueden eliminar funciones).

Packit 1470ea
      </item>
Packit 1470ea
      <item>
Packit 1470ea
        <title>Compatibilidad hacia adelante</title>
Packit 1470ea
        

Solo se permiten los cambios que permiten al código compilado contra la API modificada continuar ejecutándose contra la API no modificada (por ejemplo, no se pueden añadir funciones).

Packit 1470ea
      </item>
Packit 1470ea
      <item>
Packit 1470ea
        <title>Totalmente estable</title>
Packit 1470ea
        

No se permiten cambios en la API, sólo en la implementación.

Packit 1470ea
      </item>
Packit 1470ea
    </terms>
Packit 1470ea
Packit 1470ea
    

Normalmente, los proyecto se comprometen a la compatibilidad hacia atrás cuando dicen que una API es «estable». Muy pocos proyectos se comprometen a una estabilidad total porque eso frenaría casi todo desarrollo posterior del proyecto.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="versioning">
Packit 1470ea
    <title>Versionado</title>
Packit 1470ea
Packit 1470ea
    

Las garantías de estabilidad de la API están fuertemente vinculadas a las versiones del proyecto; ambas versiones del paquete y de libtool. El versionado libtool existe completamente con el propósito de trazar la estabilidad de la ABI, y se explica con detalle en <link href="https://autotools.io/libtool/version.htm">Autotools Mythbuster</link> o <link xref="versionin"/>.

Packit 1470ea
Packit 1470ea
    

El versionado de paquete (major.minor.micro) está fuertemente vinculado con la estabilidad de la API: normalmente, el número de la versión principal se incrementa cuando se hacen cambios incompatibles hacia atrás (por ejemplo, cuando se renombran funciones, se cambian parámetros, o se eliminan funciones). El número de versión secundaria se incrementa cuando se hacen cambios incompatibles hacia delante (piro ejemplo, cuando se añade una API pública nueva). El número de la micro versión se incrementa cuando se hacen cambios en el código sin modificar la API. Consulte la <link xref="versioning"/> para más información.

Packit 1470ea
Packit 1470ea
    

El versionado de las API es tan importante para las API D-Bus y esquemas GSettings (si es probable que cambien) como para las API C. Vea la <link href="http://dbus.freedesktop.org/doc/dbus-api-design.html#api-versioning">documentación en versionado de la API D-Bus</link> para más detalles.

Packit 1470ea
Packit 1470ea
    

Para API GIR, su estabilidad normalmente sigue la estabilidad de la API C, ya que se generan a partir de la API C. Una dificultad es que adicionalmente su estabilidad depende de la versión gobject-introspection usada al generar el GIR, pero las versiones recientes no han cambiado mucho por lo que no es una preocupación grande.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="external-links">
Packit 1470ea
    <title>Enlaces externos</title>
Packit 1470ea
Packit 1470ea
    

El tema de la estabilidad de la API se trata en los siguientes artículos:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<link href="http://en.wikipedia.org/wiki/Application_programming_interface">Página de la Wikipedia sobre API</link>

</item>
Packit 1470ea
      <item>

<link href="http://en.wikipedia.org/wiki/Application_binary_interface">Página de la Wikipedia sobre ABI</link>

</item>
Packit 1470ea
      <item>

<link href="http://dbus.freedesktop.org/doc/dbus-api-design.html#api-versioning">Versionado de la documentación de la API de D-Bus</link>

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </section>
Packit 1470ea
</page>