stringtranslate.com

API

Una interfaz de programación de aplicaciones ( API ) es una conexión entre computadoras o entre programas de computadora . Es un tipo de interfaz de software que ofrece un servicio a otras piezas de software . [1] Un documento o estándar que describe cómo construir dicha conexión o interfaz se denomina especificación de API . Se dice que un sistema informático que cumple con este estándar implementa o expone una API. El término API puede referirse tanto a la especificación como a la implementación.

A diferencia de una interfaz de usuario , que conecta una computadora con una persona, una interfaz de programación de aplicaciones conecta computadoras o piezas de software entre sí. No está destinada a ser utilizada directamente por una persona (el usuario final ) que no sea un programador de computadoras que la incorpora al software. Una API a menudo se compone de diferentes partes que actúan como herramientas o servicios que están disponibles para el programador. Se dice que un programa o un programador que usa una de estas partes llama a esa parte de la API. Las llamadas que componen la API también se conocen como subrutinas , métodos, solicitudes o puntos finales . Una especificación de API define estas llamadas, lo que significa que explica cómo usarlas o implementarlas.

Uno de los propósitos de las API es ocultar los detalles internos de cómo funciona un sistema, exponiendo solo aquellas partes que un programador encontrará útiles y manteniendo su coherencia incluso si los detalles internos cambian más adelante. Una API puede ser personalizada para un par de sistemas en particular, o puede ser un estándar compartido que permita la interoperabilidad entre muchos sistemas.

El término API se utiliza a menudo para referirse a las API web , [2] que permiten la comunicación entre ordenadores conectados a través de Internet . También existen API para lenguajes de programación , bibliotecas de software , sistemas operativos de ordenadores y hardware de ordenadores . Las API se originaron en la década de 1940, aunque el término no surgió hasta los años 1960 y 1970.

Objetivo

Una API abre un sistema de software a interacciones externas. Permite que dos sistemas de software se comuniquen a través de un límite (una interfaz) mediante señales acordadas mutuamente. [3] En otras palabras, una API conecta entidades de software entre sí. A diferencia de una interfaz de usuario , una API normalmente no es visible para los usuarios. Es una parte "interna" de un sistema de software, que se utiliza para la comunicación entre máquinas. [4]

Una API bien diseñada expone únicamente los objetos o acciones que necesitan el software o sus desarrolladores, y oculta detalles que no tienen utilidad. Esta abstracción simplifica la programación. [5]

Metafóricamente, las API conectan software como bloques entrelazados.

La creación de software mediante API se ha comparado con el uso de juguetes de construcción, como los bloques Lego . Los servicios de software o las bibliotecas de software son análogos a los bloques; pueden unirse entre sí a través de sus API, componiendo un nuevo producto de software. [6] El proceso de unión se denomina integración . [3]

Como ejemplo, considere un sensor meteorológico que ofrece una API. Cuando se transmite un determinado mensaje al sensor, este detectará las condiciones meteorológicas actuales y responderá con un informe meteorológico. El mensaje que activa el sensor es una llamada a la API y el informe meteorológico es una respuesta a la API . [7] Una aplicación de pronóstico del tiempo podría integrarse con varias API de sensores meteorológicos y recopilar datos meteorológicos de toda una zona geográfica.

Una API suele compararse con un contrato . Representa un acuerdo entre partes: un proveedor de servicios que ofrece la API y los desarrolladores de software que confían en ella. Si la API permanece estable, o si cambia solo de manera predecible, aumentará la confianza de los desarrolladores en la API. Esto puede aumentar su uso de la API. [8]

Historia del término

Un diagrama de 1978 que propone la expansión de la idea de la API para convertirse en una interfaz de programación general, más allá de los programas de aplicación por sí solos [9]

El término API inicialmente describía una interfaz solo para programas orientados al usuario final, conocidos como programas de aplicación . Este origen todavía se refleja en el nombre "interfaz de programación de aplicaciones". Hoy, el término es más amplio e incluye también software de utilidad e incluso interfaces de hardware . [10]

La idea de API es mucho más antigua que el término en sí. Los informáticos británicos Maurice Wilkes y David Wheeler trabajaron en una biblioteca de software modular en la década de 1940 para EDSAC , una de las primeras computadoras. Las subrutinas de esta biblioteca se almacenaban en cintas de papel perforadas organizadas en un archivador . Este archivador también contenía lo que Wilkes y Wheeler llamaron un "catálogo de biblioteca" de notas sobre cada subrutina y cómo incorporarla a un programa. Hoy, un catálogo de este tipo se llamaría API (o una especificación de API o documentación de API) porque instruye a un programador sobre cómo usar (o "llamar") cada subrutina que el programador necesita. [10]

El libro de Wilkes y Wheeler, The Preparation of Programs for an Electronic Digital Computer, contiene la primera especificación API publicada. Joshua Bloch considera que Wilkes y Wheeler "inventaron latentemente" la API, porque es más un concepto que se descubre que se inventa. [10]

Aunque las personas que acuñaron el término API estaban implementando software en un Univac 1108 , el objetivo de su API era hacer posibles programas independientes del hardware . [11]

El término "interfaz de programa de aplicación" (sin el sufijo -ing ) se registró por primera vez en un artículo llamado Estructuras de datos y técnicas para gráficos de computadora remotos presentado en una conferencia de AFIPS en 1968. [12] [10] Los autores de este artículo utilizan el término para describir la interacción de una aplicación (un programa de gráficos en este caso) con el resto del sistema informático. Una interfaz de aplicación consistente (que consiste en llamadas a subrutinas Fortran ) tenía como objetivo liberar al programador de lidiar con idiosincrasias del dispositivo de visualización de gráficos y proporcionar independencia del hardware si se reemplazaba la computadora o la pantalla. [11]

El término fue introducido en el campo de las bases de datos por CJ Date [13] en un artículo de 1974 llamado The Relational and Network Approaches: Comparison of the Application Programming Interface [14] . Una API se convirtió en parte del marco ANSI/SPARC para sistemas de gestión de bases de datos . Este marco trataba la interfaz de programación de aplicaciones por separado de otras interfaces, como la interfaz de consulta. Los profesionales de bases de datos en la década de 1970 observaron que estas diferentes interfaces podían combinarse; una interfaz de aplicación lo suficientemente rica también podría soportar las otras interfaces. [9]

Esta observación dio lugar a las API que admitían todo tipo de programación, no sólo la programación de aplicaciones. En 1990, el tecnólogo Carl Malamud definió la API simplemente como "un conjunto de servicios disponibles para que un programador realice determinadas tareas" . [15]

Captura de pantalla de la documentación de la API web escrita por la NASA

La idea de la API se amplió nuevamente con el surgimiento de las llamadas a procedimientos remotos y las API web . A medida que las redes de computadoras se volvieron comunes en las décadas de 1970 y 1980, los programadores querían llamar a bibliotecas ubicadas no solo en sus computadoras locales, sino en computadoras ubicadas en otros lugares. Estas llamadas a procedimientos remotos fueron bien soportadas por el lenguaje Java en particular. En la década de 1990, con la expansión de Internet , estándares como CORBA , COM y DCOM compitieron para convertirse en la forma más común de exponer servicios API. [16]

La disertación de Roy Fielding , Estilos arquitectónicos y diseño de arquitecturas de software basadas en redes en la UC Irvine en 2000, describió la transferencia de estado representacional (REST) ​​y la idea de una "interfaz de programación de aplicaciones basada en red" que Fielding contrastó con las API tradicionales "basadas en bibliotecas". [17] Las API web XML y JSON tuvieron una adopción comercial generalizada a partir de 2000 y continúan hasta 2021. La API web es ahora el significado más común del término API. [2]

La Web Semántica propuesta por Tim Berners-Lee en 2001 incluía "API semánticas" que reformulaban la API como una interfaz de datos abierta y distribuida en lugar de una interfaz de comportamiento de software. [18] Las interfaces y agentes propietarios se generalizaron más que los abiertos, pero la idea de la API como interfaz de datos se afianzó. Debido a que las API web se utilizan ampliamente para intercambiar datos de todo tipo en línea, API se ha convertido en un término amplio que describe gran parte de la comunicación en Internet. [16] Cuando se utiliza de esta manera, el término API tiene un superposición de significado con el término protocolo de comunicación .

Tipos

Bibliotecas y marcos de trabajo

La interfaz de una biblioteca de software es un tipo de API. La API describe y prescribe el "comportamiento esperado" (una especificación), mientras que la biblioteca es una "implementación real" de este conjunto de reglas.

Una sola API puede tener múltiples implementaciones (o ninguna, siendo abstracto) en forma de diferentes bibliotecas que comparten la misma interfaz de programación.

La separación de la API de su implementación puede permitir que los programas escritos en un lenguaje utilicen una biblioteca escrita en otro. Por ejemplo, debido a que Scala y Java se compilan en bytecode compatible , los desarrolladores de Scala pueden aprovechar cualquier API de Java. [19]

El uso de API puede variar según el tipo de lenguaje de programación involucrado. Una API para un lenguaje procedimental como Lua podría consistir principalmente en rutinas básicas para ejecutar código, manipular datos o manejar errores, mientras que una API para un lenguaje orientado a objetos , como Java, proporcionaría una especificación de clases y sus métodos de clase . [20] [21] La ley de Hyrum establece que “con un número suficiente de usuarios de una API, no importa lo que prometas en el contrato: todos los comportamientos observables de tu sistema dependerán de alguien”. [22] Mientras tanto, varios estudios muestran que la mayoría de las aplicaciones que utilizan una API tienden a utilizar una pequeña parte de la API. [23]

Los enlaces de lenguaje también son API. Al mapear las características y capacidades de un lenguaje a una interfaz implementada en otro lenguaje, un enlace de lenguaje permite que una biblioteca o servicio escrito en un lenguaje se use cuando se desarrolla en otro lenguaje. [24] Herramientas como SWIG y F2PY, un generador de interfaces de Fortran a Python , facilitan la creación de dichas interfaces. [25]

Una API también puede estar relacionada con un marco de software : un marco puede estar basado en varias bibliotecas que implementan varias API, pero a diferencia del uso normal de una API, el acceso al comportamiento integrado en el marco se media extendiendo su contenido con nuevas clases incorporadas al marco mismo.

Además, el flujo de control general del programa puede quedar fuera del control del llamador y en manos del marco mediante una inversión de control o un mecanismo similar. [26] [27]

Sistemas operativos

Una API puede especificar la interfaz entre una aplicación y el sistema operativo . [28] POSIX , por ejemplo, especifica un conjunto de API comunes que tienen como objetivo permitir que una aplicación escrita para un sistema operativo compatible con POSIX se compile para otro sistema operativo compatible con POSIX.

Linux y Berkeley Software Distribution son ejemplos de sistemas operativos que implementan las API POSIX. [29]

Microsoft ha demostrado un fuerte compromiso con una API compatible con versiones anteriores, particularmente dentro de su biblioteca API de Windows (Win32), de modo que las aplicaciones más antiguas pueden ejecutarse en versiones más nuevas de Windows utilizando una configuración específica del ejecutable denominada "Modo de compatibilidad". [30]

Una API se diferencia de una interfaz binaria de aplicación (ABI) en que una API se basa en código fuente, mientras que una ABI se basa en código binario . Por ejemplo, POSIX proporciona API, mientras que Linux Standard Base proporciona una ABI. [31] [32]

API remotas

Las API remotas permiten a los desarrolladores manipular recursos remotos a través de protocolos , estándares específicos para la comunicación que permiten que diferentes tecnologías trabajen juntas, independientemente del lenguaje o la plataforma. Por ejemplo, la API de conectividad de base de datos de Java permite a los desarrolladores consultar muchos tipos diferentes de bases de datos con el mismo conjunto de funciones, mientras que la API de invocación de métodos remotos de Java utiliza el Protocolo de métodos remotos de Java para permitir la invocación de funciones que operan de forma remota, pero que parecen locales para el desarrollador. [33] [34]

Por lo tanto, las API remotas son útiles para mantener la abstracción de objetos en la programación orientada a objetos ; una llamada a un método , ejecutada localmente en un objeto proxy , invoca el método correspondiente en el objeto remoto, utilizando el protocolo remoto, y adquiere el resultado que se utilizará localmente como valor de retorno.

Una modificación del objeto proxy también resultará en una modificación correspondiente del objeto remoto. [35]

API web

Las API web son las interfaces definidas a través de las cuales se producen las interacciones entre una empresa y las aplicaciones que utilizan sus activos, que también son un Acuerdo de Nivel de Servicio (SLA) para especificar el proveedor funcional y exponer la ruta de servicio o URL para sus usuarios de API. Un enfoque de API es un enfoque arquitectónico que gira en torno a proporcionar una interfaz de programa a un conjunto de servicios para diferentes aplicaciones que atienden a diferentes tipos de consumidores. [36]

Cuando se utiliza en el contexto del desarrollo web , una API se define típicamente como un conjunto de especificaciones, como mensajes de solicitud de Protocolo de Transferencia de Hipertexto (HTTP), junto con una definición de la estructura de los mensajes de respuesta, generalmente en un formato de Lenguaje de Marcado Extensible ( XML ) o Notación de Objetos JavaScript ( JSON ). Un ejemplo podría ser una API de una compañía naviera que se puede agregar a un sitio web enfocado en el comercio electrónico para facilitar el pedido de servicios de envío e incluir automáticamente las tarifas de envío actuales, sin que el desarrollador del sitio tenga que ingresar la tabla de tarifas del transportista en una base de datos web. Si bien históricamente "API web" ha sido prácticamente sinónimo de servicio web , la tendencia reciente (la llamada Web 2.0 ) se ha estado alejando de los servicios web basados ​​en el Protocolo Simple de Acceso a Objetos ( SOAP ) y la arquitectura orientada a servicios (SOA) hacia recursos web de estilo de transferencia de estado representacional (REST) ​​más directos y arquitectura orientada a recursos (ROA). [37] Parte de esta tendencia está relacionada con el movimiento de la Web Semántica hacia el Marco de Descripción de Recursos (RDF), un concepto para promover tecnologías de ingeniería de ontología basadas en la web . Las API web permiten la combinación de múltiples API en nuevas aplicaciones conocidas como mashups . [38] En el espacio de las redes sociales, las API web han permitido a las comunidades web facilitar el intercambio de contenido y datos entre comunidades y aplicaciones. De esta manera, el contenido que se crea en un lugar de forma dinámica se puede publicar y actualizar en múltiples ubicaciones en la web. [39] Por ejemplo, la API REST de Twitter permite a los desarrolladores acceder a los datos centrales de Twitter y la API de búsqueda proporciona métodos para que los desarrolladores interactúen con los datos de búsqueda y tendencias de Twitter. [40]

Diseño

El diseño de una API tiene un impacto significativo en su uso. [5] El principio de ocultamiento de información describe el papel de las interfaces de programación como facilitadoras de la programación modular al ocultar los detalles de implementación de los módulos, de modo que los usuarios de los módulos no necesiten comprender las complejidades dentro de los módulos. [41] Por lo tanto, el diseño de una API intenta proporcionar solo las herramientas que un usuario esperaría. [5] El diseño de interfaces de programación representa una parte importante de la arquitectura de software , la organización de una pieza compleja de software. [42]

Políticas de lanzamiento

Las API son una de las formas más comunes en que las empresas tecnológicas se integran. Aquellas que proporcionan y utilizan API se consideran miembros de un ecosistema empresarial. [43]

Las principales políticas para la liberación de una API son: [44]

Implicaciones de la API pública

Un factor importante cuando una API se vuelve pública es su "estabilidad de interfaz". Los cambios en la API (por ejemplo, agregar nuevos parámetros a una llamada de función) podrían romper la compatibilidad con los clientes que dependen de esa API. [48]

Cuando partes de una API presentada públicamente están sujetas a cambios y, por lo tanto, no son estables, dichas partes de una API en particular deben documentarse explícitamente como "inestables". Por ejemplo, en la biblioteca Google Guava , las partes que se consideran inestables y que podrían cambiar pronto se marcan con la anotación Java @Beta . [49]

En ocasiones, una API pública puede declarar que algunas partes de la misma están obsoletas o rescindidas. Esto suele significar que una parte de la API debe considerarse candidata a ser eliminada o modificada de manera que no sea compatible con versiones anteriores. Por lo tanto, estos cambios permiten a los desarrolladores dejar de lado partes de la API que se eliminarán o no serán compatibles en el futuro. [50]

El código del cliente puede contener usos innovadores u oportunistas que no fueron previstos por los diseñadores de la API. En otras palabras, para una biblioteca con una base de usuarios significativa, cuando un elemento se convierte en parte de la API pública, puede usarse de diversas maneras. [51] El 19 de febrero de 2020, Akamai publicó su informe anual “State of the Internet”, que muestra la creciente tendencia de los ciberdelincuentes a atacar plataformas de API públicas en servicios financieros de todo el mundo. Desde diciembre de 2017 hasta noviembre de 2019, Akamai fue testigo de 85,42 mil millones de ataques de violación de credenciales. Alrededor del 20%, o 16,55 mil millones, fueron contra nombres de host definidos como puntos finales de API. De estos, 473,5 millones han tenido como objetivo organizaciones del sector de servicios financieros. [52]

Documentación

La documentación de API describe qué servicios ofrece una API y cómo utilizar esos servicios, con el objetivo de cubrir todo lo que un cliente necesita saber para fines prácticos.

La documentación es crucial para el desarrollo y mantenimiento de aplicaciones que utilizan la API. [53] La documentación de la API se encuentra tradicionalmente en archivos de documentación, pero también se puede encontrar en redes sociales como blogs, foros y sitios web de preguntas y respuestas. [54]

Los archivos de documentación tradicionales suelen presentarse a través de un sistema de documentación, como Javadoc o Pydoc, que tiene una apariencia y una estructura uniformes. Sin embargo, los tipos de contenido incluidos en la documentación difieren de una API a otra. [55]

En aras de la claridad, la documentación de la API puede incluir una descripción de las clases y los métodos de la API, así como "escenarios de uso típicos, fragmentos de código, fundamentos de diseño, debates sobre el rendimiento y contratos", pero los detalles de implementación de los propios servicios de la API suelen omitirse. Puede adoptar diversas formas, incluidos documentos instructivos, tutoriales y obras de referencia. También incluirá una variedad de tipos de información, incluidas guías y funcionalidades.

La documentación también cubre las restricciones y limitaciones sobre cómo se puede utilizar la API. Por ejemplo, la documentación de una función de API podría indicar que sus parámetros no pueden ser nulos, que la función en sí no es segura para subprocesos . [56] Debido a que la documentación de API tiende a ser exhaustiva, es un desafío para los escritores mantener la documentación actualizada y para los usuarios leerla con atención, lo que potencialmente genera errores. [48]

La documentación de la API se puede enriquecer con información de metadatos como las anotaciones de Java . Estos metadatos pueden ser utilizados por el compilador, las herramientas y el entorno de ejecución para implementar comportamientos personalizados o un manejo personalizado. [57]

Es posible generar documentación de API de una manera basada en datos. Al observar muchos programas que utilizan una API determinada, es posible inferir los usos típicos, así como los contratos y directivas necesarios. [58] Luego, se pueden utilizar plantillas para generar lenguaje natural a partir de los datos extraídos.

Disputa sobre la protección de los derechos de autor de las API

En 2010, Oracle Corporation demandó a Google por haber distribuido una nueva implementación de Java integrada en el sistema operativo Android. [59] Google no había obtenido ningún permiso para reproducir la API de Java, aunque sí se había dado permiso al proyecto similar OpenJDK. El juez William Alsup dictaminó en el caso Oracle v. Google que las API no pueden estar sujetas a derechos de autor en los EE. UU. y que una victoria de Oracle habría ampliado ampliamente la protección de los derechos de autor a un "conjunto funcional de símbolos" y permitido la protección de los derechos de autor de comandos de software simples:

Aceptar la afirmación de Oracle equivaldría a permitir a cualquiera registrar los derechos de autor de una versión de código para ejecutar un sistema de comandos y, de ese modo, prohibir a todos los demás escribir sus diferentes versiones para ejecutar todos o parte de los mismos comandos. [60] [61]

La decisión de Alsup fue revocada en 2014 en apelación ante el Tribunal de Apelaciones del Circuito Federal , aunque la cuestión de si dicho uso de las API constituye un uso justo quedó sin resolver. [62] [63]

En 2016, tras un juicio de dos semanas, un jurado determinó que la reimplementación de la API de Java por parte de Google constituía un uso justo , pero Oracle prometió apelar la decisión. [64] Oracle ganó su apelación, y el Tribunal de Apelaciones del Circuito Federal dictaminó que el uso de las API por parte de Google no calificaba para un uso justo. [65] En 2019, Google apeló ante la Corte Suprema de los Estados Unidos sobre los fallos de derechos de autor y uso justo, y la Corte Suprema concedió la revisión. [66] Debido a la pandemia de COVID-19 , las audiencias orales del caso se retrasaron hasta octubre de 2020. [67]

El caso fue decidido por el Tribunal Supremo a favor de Google. [68]

Ejemplos

Véase también

Referencias

  1. ^ Reddy, Martin (2011). Diseño de API para C++. Elsevier Science. pág. 1. ISBN 9780123850041.
  2. ^ ab Lane, Kin (10 de octubre de 2019). "Introducción a las API: Historia de las API". Cartero . Consultado el 18 de septiembre de 2020 . Cuando escuchas el acrónimo "API" o su versión ampliada "Interfaz de programación de aplicaciones", casi siempre se refiere a nuestro enfoque moderno, en el sentido de que usamos HTTP para proporcionar acceso a datos legibles por máquina en formato JSON o XML, a menudo denominados simplemente "API web". Las API han existido casi tanto tiempo como la informática, pero las API web modernas comenzaron a tomar forma a principios de la década de 2000.
  3. ^ ab Pedro, Bruno (2024). Creación de un producto API: diseño, implementación, lanzamiento y mantenimiento de productos API que satisfagan las necesidades de los usuarios. Packt Publishing. p. 4. ISBN 9781837638536.
  4. ^ Biehl, Matthias (2016). Diseño de API RESTful . API-University Press. pág. 10. ISBN 9781514735169.
  5. ^ abc Clarke, Steven (2004). "Medición de la usabilidad de las API". Dr. Dobb's . Consultado el 29 de julio de 2016 .
  6. ^ Jin, Brenda; Sahni, Saurabh; Shevat, Amir (2018). "Prefacio". Diseño de API web: creación de API que los desarrolladores adoran. O'Reilly Media. ISBN 9781492026877.
  7. ^ Geewax, JJ (2021). Patrones de diseño de API. Manning. pág. 6. ISBN 9781638350330.
  8. ^ Jacobson, Daniel; Brail, Greg; Woods, Dan (2011). API: una guía de estrategia. O'Reilly Media. pág. 4. ISBN 9781449321642.
  9. ^ ab Arquitecturas de bases de datos: un taller de viabilidad (informe). Washington, DC: Departamento de Comercio de los Estados Unidos, Oficina Nacional de Normas. Abril de 1981. págs. 45–47. hdl :2027/mdp.39015077587742. LCCN  81600004. Publicación especial 500-76 del NBS . Consultado el 18 de septiembre de 2020 .
  10. ^ abcd Bloch, Joshua (8 de agosto de 2018). Una historia breve y objetiva de la API (discurso). QCon. San Francisco: InfoQ . Consultado el 18 de septiembre de 2020 .
  11. ^ ab Cotton, Ira W.; Greatorex, Frank S. (diciembre de 1968). "Estructuras de datos y técnicas para gráficos informáticos remotos". AFIPS '68: Actas de la Conferencia informática conjunta de otoño del 9 al 11 de diciembre de 1968. Conferencia informática conjunta de otoño de AFIPS 1968. Vol. I. San Francisco, California: Association for Computing Machinery. págs. 533–544. doi :10.1145/1476589.1476661. ISBN 978-1450378994.OCLC 1175621908  .
  12. ^ "interfaz de programa de aplicación" . Oxford English Dictionary (edición en línea). Oxford University Press . (Se requiere suscripción o membresía a una institución participante).
  13. ^ Date, CJ (2019). EF Codd y la teoría relacional: una revisión y análisis detallados de los principales escritos de Codd sobre bases de datos. Lulu.com. p. 135. ISBN 978-1684705276.
  14. ^ Date, CJ; Codd, EF (enero de 1975). "Los enfoques relacional y de red: Comparación de las interfaces de programación de aplicaciones". En Randall Rustin (ed.). Actas del taller ACM-SIGMOD de 1974 sobre descripción, acceso y control de datos . Taller SIGMOD de 1974. Vol. 2. Ann Arbor, Michigan: Association for Computing Machinery. págs. 83–113. doi :10.1145/800297.811532. ISBN 978-1450374187.OCLC 1175623233  .
  15. ^ Carl, Malamud (1990). Análisis de redes Novell. Van Nostrand Reinhold. pág. 294. ISBN 978-0442003647.
  16. ^ ab Jin, Brenda; Sahni, Saurabh; Shevat, Amir (2018). Diseño de API web. Medios O'Reilly. ISBN 9781492026877.
  17. ^ Fielding, Roy (2000). Estilos arquitectónicos y diseño de arquitecturas de software basadas en redes (PhD) . Consultado el 18 de septiembre de 2020 .
  18. ^ Dotsika, Fefie (agosto de 2010). "API semánticas: escalamiento hacia la Web semántica". Revista internacional de gestión de la información . 30 (4): 335–342. doi :10.1016/j.ijinfomgt.2009.12.003.
  19. ^ Odersky, Martin; Spoon, Lex; Venners, Bill (10 de diciembre de 2008). "Combining Scala and Java". www.artima.com . Consultado el 29 de julio de 2016 .
  20. ^ de Figueiredo, Luiz Henrique; Jerusalén, Roberto ; Filho, Waldemar Celes (1994). "El diseño e implementación de un lenguaje para extender aplicaciones". TeCGraf Grupo de Tecnología Em Computacao Gráfica : 273–284. CiteSeerX 10.1.1.47.5194 . S2CID  59833827 . Consultado el 29 de julio de 2016 . 
  21. ^ Sintes, Tony (13 de julio de 2001). "¿Qué es la API de Java?". JavaWorld . Consultado el 18 de julio de 2020 .
  22. ^ Winters, Titus; Tom Manshreck; Hyrum Wright, eds. (2020). Ingeniería de software en Google: lecciones aprendidas de la programación a lo largo del tiempo . Sebastopol, CA: O'Reilly Media. ISBN 9781492082798.OCLC 1144086840  .
  23. ^ Mastrangelo, Luis; Ponzanelli, Luca; Mocci, Andrea; Lanza, Michele; Hauswirth, Matthias; Nystrom, Nathaniel (23 de octubre de 2015). "Use at your own risk: the Java unsafe API in the wild". Actas de la Conferencia internacional ACM SIGPLAN de 2015 sobre programación orientada a objetos, sistemas, lenguajes y aplicaciones . OOPSLA 2015. Nueva York, Nueva York, EE. UU.: Association for Computing Machinery. págs. 695–710. doi :10.1145/2814270.2814313. ISBN . 978-1-4503-3689-5.
  24. ^ Emery, David. «Estándares, API, interfaces y enlaces». Acm.org. Archivado desde el original el 16 de enero de 2015. Consultado el 8 de agosto de 2016 .
  25. ^ "F2PY.org". F2PY.org . Consultado el 18 de diciembre de 2011 .
  26. ^ Fowler, Martin. "Inversión de control".
  27. ^ Fayad, Mohamed. "Marcos de aplicaciones orientadas a objetos".
  28. ^ Lewine, Donald A. (1991). Guía del programador POSIX. O'Reilly & Associates, Inc., pág. 1. ISBN 9780937175736. Recuperado el 2 de agosto de 2016 .
  29. ^ West, Joel; Dedrick, Jason (2001). "Estandarización de código abierto: el auge de Linux en la era de la red" (PDF) . Conocimiento, tecnología y política . 14 (2): 88–112. doi :10.1007/PL00022278 . Consultado el 2 de agosto de 2016 .
  30. ^ Microsoft (octubre de 2001). «Soporte para Windows XP». Microsoft. pág. 4. Archivado desde el original el 26 de septiembre de 2009.
  31. ^ "Introducción a LSB". Linux Foundation. 21 de junio de 2012. Consultado el 27 de marzo de 2015 .
  32. ^ Stoughton, Nick (abril de 2005). "Actualización de estándares" (PDF) . USENIX . Consultado el 4 de junio de 2009 .
  33. ^ Bierhoff, Kevin (23 de abril de 2009). "Cumplimiento del protocolo API en software orientado a objetos" (PDF) . Instituto de Investigación de Software de la CMU . Consultado el 29 de julio de 2016 .
  34. ^ Wilson, M. Jeff (10 de noviembre de 2000). "Sea inteligente con los proxies y RMI". JavaWorld . Consultado el 18 de julio de 2020 .
  35. ^ Henning, Michi; Vinoski, Steve (1999). Programación avanzada en CORBA con C++ . Addison-Wesley . ISBN 978-0201379273. Recuperado el 16 de junio de 2015 .
  36. ^ "API-ficación" (descarga en PDF) . www.hcltech.com . Agosto de 2014.
  37. ^ Benslimane, Djamal; Schahram Dustdar; Amit Sheth (2008). "Services Mashups: The New Generation of Web Applications". IEEE Internet Computing, vol. 12, no. 5. Instituto de Ingenieros Eléctricos y Electrónicos. págs. 13–15. Archivado desde el original el 28 de septiembre de 2011. Consultado el 1 de octubre de 2019 .
  38. ^ Niccolai, James (23 de abril de 2008), "¿Qué es, en definitiva, un mashup empresarial?", PC World
  39. ^ Parr, Ben (21 de mayo de 2009). "La evolución de la API de redes sociales". Mashable . Consultado el 26 de julio de 2016 .
  40. ^ "GET tendencias/lugar". developer.twitter.com . Consultado el 30 de abril de 2020 .
  41. ^ Parnas, DL (1972). "Sobre los criterios que se deben utilizar para descomponer sistemas en módulos" (PDF) . Comunicaciones de la ACM . 15 (12): 1053–1058. doi :10.1145/361598.361623. S2CID  53856438.
  42. ^ Garlan, David; Shaw, Mary (enero de 1994). "Introducción a la arquitectura de software" (PDF) . Avances en ingeniería de software e ingeniería del conocimiento . 1. Consultado el 8 de agosto de 2016 .
  43. ^ de Ternay, Guerric (10 de octubre de 2015). "Business Ecosystem: Creating an Economic Moat" (Ecosistema empresarial: creación de una ventaja competitiva económica). BoostCompanies . Consultado el 1 de febrero de 2016 .
  44. ^ Boyd, Mark (21 de febrero de 2014). "Privada, asociada o pública: ¿qué estrategia de API es mejor para las empresas?". ProgrammableWeb . Consultado el 2 de agosto de 2016 .
  45. ^ Weissbrot, Alison (7 de julio de 2016). "Las API de servicios de automóviles están en todas partes, pero ¿qué beneficios ofrecen a las aplicaciones asociadas?". AdExchanger .
  46. ^ "Documentación de la API v4 de Cloudflare". cloudflare . 25 de febrero de 2020 . Consultado el 27 de febrero de 2020 .
  47. ^ Liew, Zell (17 de enero de 2018). "Las API de servicios de automóviles están en todas partes, pero ¿qué hay en ellas para las aplicaciones asociadas?". Smashing Magazine . Consultado el 27 de febrero de 2020 .
  48. ^ ab Shi, Lin; Zhong, Hao; Xie, Tao; Li, Mingshu (2011). Un estudio empírico sobre la evolución de la documentación de API. Notas de clase en informática. Vol. 6603. Conferencia internacional sobre enfoques fundamentales de la ingeniería de software. págs. 416–431. doi :10.1007/978-3-642-19811-3_29. ISBN 978-3-642-19810-6. Recuperado el 22 de julio de 2016 .
  49. ^ "guava-libraries – Guava: bibliotecas principales de Google para Java 1.6+ – Google Project Hosting". 2014-02-04 . Consultado el 2014-02-11 .
  50. ^ Oracle. "Cómo y cuándo dejar de usar las API". Documentación de Java SE . Consultado el 2 de agosto de 2016 .
  51. ^ Méndez, Diego; Baudry, Benoit; Monperrus, Martin (2013). "Evidencia empírica de diversidad a gran escala en el uso de API de software orientado a objetos". 2013 IEEE 13th International Working Conference on Source Code Analysis and Manipulation (SCAM) . págs. 43–52. arXiv : 1307.4062 . doi :10.1109/SCAM.2013.6648183. ISBN 978-1-4673-5739-5.S2CID6890739  .​
  52. ^ Takanashi, Dean (19 de febrero de 2020). «Akamai: los cibercriminales están atacando las API de las empresas de servicios financieros». Venture Beat . Consultado el 27 de febrero de 2020 .
  53. ^ Dekel, Uri; Herbsleb, James D. (mayo de 2009). "Mejora de la usabilidad de la documentación de API con Knowledge Pushing". Instituto de Investigación de Software, Facultad de Ciencias de la Computación . CiteSeerX 10.1.1.446.4214 . 
  54. ^ Parnin, Chris; Treude, Cristoph (mayo de 2011). "Medición de la documentación de API en la Web". Actas del 2º Taller Internacional sobre Web 2.0 para Ingeniería de Software . pp. 25–30. doi :10.1145/1984701.1984706. ISBN 9781450305952. S2CID  17751901 . Consultado el 22 de julio de 2016 . {{cite book}}: |journal=ignorado ( ayuda )
  55. ^ Maalej, Waleed; Robillard, Martin P. (abril de 2012). "Patrones de conocimiento en la documentación de referencia de API" (PDF) . IEEE Transactions on Software Engineering . Consultado el 22 de julio de 2016 .
  56. ^ Monperrus, Martin; Eichberg, Michael; Tekes, Elif; Mezini, Mira (3 de diciembre de 2011). "¿Qué deben tener en cuenta los desarrolladores? Un estudio empírico sobre las directivas de la documentación de API". Ingeniería de software empírica . 17 (6): 703–737. arXiv : 1205.6363 . doi :10.1007/s10664-011-9186-4. S2CID  8174618.
  57. ^ "Anotaciones". Sun Microsystems . Archivado desde el original el 25 de septiembre de 2011. Consultado el 30 de septiembre de 2011 ..
  58. ^ Bruch, Marcel; Mezini, Mira; Monperrus, Martin (2010). "Directivas de subclasificación de minería para mejorar la reutilización del marco". 2010 7th IEEE Working Conference on Mining Software Repositories (MSR 2010) . pp. 141–150. CiteSeerX 10.1.1.434.15 . doi :10.1109/msr.2010.5463347. ISBN .  978-1-4244-6802-7.S2CID1026918  .​
  59. ^ "Oracle y el fin de la programación tal como la conocemos". DrDobbs. 2012-05-01 . Consultado el 2012-05-09 .
  60. ^ "Las API no pueden estar sujetas a derechos de autor, afirma el juez en el caso Oracle". TGDaily. 2012-06-01 . Consultado el 2012-12-06 .
  61. ^ "Oracle America, Inc. vs. Google Inc." (PDF) . Wired . 2012-05-31 . Consultado el 2013-09-22 .
  62. ^ "Oracle Am., Inc. contra Google Inc., No. 13-1021, Fed. Cir. 2014".
  63. ^ Rosenblatt, Seth (9 de mayo de 2014). "La corte se pone del lado de Oracle en la apelación de patentes de Java sobre Android". CNET . Consultado el 10 de mayo de 2014 .
  64. ^ "Google supera a Oracle: Android hace un "uso justo" de las API de Java". Ars Technica . 2016-05-26 . Consultado el 2016-07-28 .
  65. ^ Decker, Susan (27 de marzo de 2018). "Oracle gana la reactivación de un caso de mil millones de dólares contra Google". Bloomberg Businessweek . Consultado el 27 de marzo de 2018 .
  66. ^ Lee, Timothy (25 de enero de 2019). «Google pide a la Corte Suprema que anule la desastrosa sentencia sobre los derechos de autor de las API». Ars Technica . Consultado el 8 de febrero de 2019 .
  67. ^ vkimber (28 de septiembre de 2020). «Google LLC v. Oracle America, Inc.». LII / Instituto de Información Legal . Consultado el 6 de marzo de 2021 .
  68. ^ "Corte Suprema de los Estados Unidos, n.º 18–956, GOOGLE LLC, PETITIONER v. ORACLE AMERICA, INC" (PDF) . 5 de abril de 2021.

Lectura adicional

Enlaces externos