Informática Electrónica Interfaces para los programas de aplicación (APIs) DSI- EIE FCEIA 2015
Que es un API? Application Program Interface (interface para programas aplicativos) es el mecanismo mediante el cual un programa aplicativo accede a servicios de otros componentes de software Un API puede tomar distintas formas: Librerías Procedimientos Protocolos Objetos DSI EIE - FCEIA Informática Electrónica 2
Componentes de un API Convenciones de utilización Estructuras de datos Protocolos de invocación Mecanismos de sincronización DSI EIE - FCEIA Informática Electrónica 3
API: Conceptos Conceptualmente, un API expone a los programas del usuario un conjunto de funcionalidades accesibles un forma controlada Un API puede permitir el acceso a dispositivos físicos (device drivers), a servicios de plataforma tales como E/S y comunicaciones o a funcionalidades específicas de una pieza de software DSI EIE - FCEIA Informática Electrónica 4
API: Arquitectura Aplicación API Software/hardware DSI EIE - FCEIA Informática Electrónica 5
API: Arquitectura Llamada Aplicación Respuesta API DSI EIE - FCEIA Informática Electrónica 6
APIs Síncronas / Asíncronas En el primer caso, la respuesta se produce como consecuencia de la llamada: existe una relación causal entre ambas y un ordenamiento temporal secuencial En el caso asíncrono la respuesta se produce por la ocurrencia de un evento externo, ante el cual el aplicativo es informado por el API DSI EIE - FCEIA Informática Electrónica 7
APIs Síncronas Aplicativo API solicitud t 0 t 1 respuesta DSI EIE - FCEIA Informática Electrónica 8
APIs Asíncronas Aplicativo Registra interés en evento e API t 0 t 1 registrado t 2 t Suceso: evento e 3 Evento e t t DSI EIE - FCEIA Informática Electrónica 9
API: Tipos Dependiente del lenguaje: disponible para ser utilizada desde un lenguaje de programación específico. Ejemplo: API de sockets de UNIX (C) Independiente del lenguaje: diseñada de forma tal que puede utilizarse por programas escritos en distintos lenguajes de programación. Ejemplo: web services, NMEA, ELCOM DSI EIE - FCEIA Informática Electrónica 10
API: Ejemplos POSIX: Interface a los servicios de los sistemas operativos UNIX/POSIX WIN32: Interface a los servicios de Windows Nvidia CUDA: (Compute Unified Device Architecture) compilador y conjunto de herramientas de desarrollo que permiten a los programadores usar una variación del lenguaje C para codificar algoritmos en GPUs de nvidia NMEA: interface a instrumentos de navegación DSI EIE - FCEIA Informática Electrónica 11
Componentes de un API Uno o mas archivos de encabezado (*.h) Una o mas librerías (*.o, *.lib, *.dll, etc.) Un paquete de clases (Java: *.jar) Usualmente encapsuladas en un SDK (software Development Kit) Una especificación de protocolo y mensajes DSI EIE - FCEIA Informática Electrónica 12
Modelos Un API puede utilizar uno o mas mecanismos para comunicarse con los programas aplicativos, por ejemplo: Llamada a funciones Invocación de métodos Paso de mensajes DSI EIE - FCEIA Informática Electrónica 13
API Basada en Funciones Un API basada en funciones se presenta como una librería que se carga dinámica o estáticamente, y un conjunto de funciones o procedimientos que pueden invocarse desde un programa aplicativo Para utilizarla se debe compilar el aplicativo junto con los encabezados (*.h) y vincular con uno o mas archivos *.lib Si la librería es dinámica se carga sólo en el momento de ejecución, y toma la forma de DLLs (Windows) o SO (Unix/Linux) DSI EIE - FCEIA Informática Electrónica 14
API Basada en Funciones Es un modelo utilizado en lenguaje C Ejemplos: Placas adquisidoras de datos y conversores A/D Placas de comunicaciones Placas de captura de video DSI EIE - FCEIA Informática Electrónica 15
APIs basadas en Eventos Utilizadas para comunicaciones asíncronas con dispositivos de interface que producen estímulos desde el entorno, por ejemplo un sensor de nivel o un pulsador Frecuentemente la interacción se lleva a cabo mediante funciones de call-back Similar a las rutinas de atención de interrupción (ISR) DSI EIE - FCEIA Informática Electrónica 16
Funciones de Call-Back Cuando un programa tiene interés de conocer la ocurrencia de un evento, se registra como tal llamando una función del API e indicando como uno de sus argumentos un puntero a una función, que será invocada por el API ante la ocurrencia del evento en cuestión DSI EIE - FCEIA Informática Electrónica 17
Call-Back: Ejemplo El uso de señales en POSIX permite que un programa de aplicación sea notificado de la ocurrencia de un evento de su interés El programa aplicativo puede asociar un manejador de señal, que es una función que actúa en consecuencia a la notificación del evento El API de señales está incluido en <signal.h> DSI EIE - FCEIA Informática Electrónica 18
Callbacks: signal() La función signal() permite asociar un manejador a la ocurrencia de una señal mediante un puntero a función, utilizando el mecanismo de callback: int (*signal(int sig, void (*func)()))() DSI EIE - FCEIA Informática Electrónica 19
Ejemplo: señales #include <stdio.h> #include <signal.h> void sigproc(void); void quitproc(void); main(){ } signal(sigint, sigproc); signal(sigquit, quitproc); printf("ctrl c deshabilitado\n"); for(;;); void sigproc() { signal(sigint, sigproc); printf("ctrl c presionado \n"); } void quitproc() { printf("presione ctrl \\ para salir\n"); exit(0); } DSI EIE - FCEIA Informática Electrónica 20
API Basada en Mensajes Establecen protocolos de diálogo en una arquitectura similar al modelo OSI Incluyen al menos una capa física, una de enlace y una de aplicación Como el intercambio está basado en mensajes, permiten independizar el lenguaje del aplicativo Ejemplos: NMEA Garmin ELCOM DSI EIE - FCEIA Informática Electrónica 21
APIs Basada en Objetos Utilizable cuando el lenguaje de programación soporta el modelo de objetos: Java, C++,.Net Se presenta como un paquete de clases que brindan las funcionalidades requeridas mediante la instanciación de objetos y la posterior invocación de métodos sobre estos objetos Ejemplos: Android SDK para dispositivos móviles Componentes de comunicaciones: TcpSocket, etc. DSI EIE - FCEIA Informática Electrónica 22
Código: Ejemplos Funcional: int nbytes = send(tx_buf, len);/* C */ Objetos: sf::tcpsocket socket; socket.connect(sf::ipaddress(address), port); // c++ DSI EIE - FCEIA Informática Electrónica 23
Caso de Estudio En la práctica 5 trabajaremos con un API (NMEA) y dos device drivers: el del reloj de tiempo real y un puerto serie de una PC El informe debe entregarse en formato electrónico antes del 20 de junio DSI EIE - FCEIA Informática Electrónica 24