sábado, 1 de febrero de 2020


Introducción a la codificación y APIs

Esta información está tomada de: https://developer.cisco.com/learning/

Paso 1: La propuesta de valor:

¿Por qué los ingenieros y técnicos deben aprender a codificar?

Aprender a codificar y trabajar con infraestructuras programables requerirá una inversión de su tiempo. Usted comienza poco a poco y ve rendimientos iniciales e incrementales en sus inversiones. Al comenzar este viaje, tomemos un momento para comprender el valor de la inversión que está haciendo.

El valor de usar APIs
Tienes una infraestructura llena de productos; diseñado para ser usado por ti y tu como operador, estás acostumbrado a usar interfaces de línea de comandos (CLI) y las interfaces web o GUI, para realizar las configuraciones de los equipos. Lo que significa que cuando se necesita hacer algo a través de estas interfaces, tu u otra persona tiene que hacer el trabajo.



No tendrá que volver a pensar demasiado para recordar la última vez que necesitó completar una tarea masiva en una computadora. La tarea probablemente involucró mucho hacer clic, escribir, copiar y pegar, u otras repeticiones para adormecer la mente. 

Estas interfaces y el paradigma de hacer que los humanos hagan el trabajo, tienen la culpa del trabajo general que a veces tenemos que hacer para completar una tarea.

Las computadoras son excelentes para el trabajo a granel, pero si desea que su computadora portátil hable con su infraestructura para que le ayude, necesitará una interfaz de máquina a máquina o API (Interfaz de programación de aplicaciones); una interfaz diseñada para la interacción informática.



Utilizamos estas API de máquina a máquina para realizar solicitudes simples de nuestra infraestructura, que, en conjunto, nos permiten completar tareas poderosas.

Usando APIs para hacer solicitudes simples como ...
  • Obtener el estado de la interfaz X
  • Obtenga el último cambio de tiempo para la interfaz X
  • Interfaz de apagado X
  • Configure la descripción de la interfaz X en "Interfaz deshabilitada según la política"

... le permite completar una tarea poderosa como:

"Desactivar todos los puertos que han estado inactivos durante 30 días".
Claro, puedes hacer esto manualmente, pero ¿no sería mejor codificar el proceso (escribirlo una vez) y luego dejar que tu computadora ejecute esta tarea cada vez que lo necesites?

Las API modernas le facilitan la realización de solicitudes de sus aplicaciones e infraestructura.

Si necesita alguna información, solicítela. ¿Quieres algo hecho? Haga la solicitud. El uso de una API de máquina a máquina significa que su solicitud se completará, se recuperarán sus datos o recibirá una notificación de lo contrario, todo se realiza de una manera que le permite automatizar la interacción.

De acuerdo, las API me facilitan las solicitudes de mi infraestructura, pero ¿qué me facilita la codificación de mis procesos?


La propuesta de valor para la programabilidad.

La codificación es el proceso de escribir instrucciones, en un lenguaje que una computadora puede entender, para completar una tarea específica.

Q: ¿Qué tarea? 

A: Tu tarea.


Por ejemplo, aquí hay un código de ejemplo que podría completar la tarea "Deshabilitar todos los puertos que han estado inactivos durante 30 días":



Es posible que no entiendas la sintaxis del idioma (aun así, no te preocupes, te enseñaremos), pero esperamos que puedas ver el sencillo proceso codificado que le pedimos a la computadora que siga:

  1. Para cada switch en mi red ...
  2. Para cada interfaz en el switch ...
  3. Si la interfaz está inactiva y no ha cambiado de estado en más de treinta días, entonces:
·         Apaga la interfaz.
·         Actualizar la descripción de la interfaz.

Este es esencialmente el proceso por el que pasarías como humano para completar la misma tarea. Al tomarse el tiempo para codificarlo (escríbalo en un lenguaje interpretable por máquina), ahora puede pedirle a la computadora que haga la tarea cada vez que la necesite. 

Usted, el ser humano, está proporcionando la inteligencia: qué debe hacerse y cómo debe hacerse, mientras deja que la computadora haga el trabajo aburrido y repetitivo.

Eso suena genial, pero los lenguajes de programación no son tan simples como lo que se muestra arriba.

Si bien el ejemplo de código anterior es un fragmento de un script más grande y está llamando a otras funciones (como interface.last_change()interface.shutdown()), la implementación de las funciones de utilidad es sencilla y el código que se muestra es un código de Python válido real que completaría la tarea. La lógica central es así de simple.


Paso 2: ¿Qué cambió?

Las API y los lenguajes de programación no son nuevos, entonces, ¿por qué el bombo reciente?

¡Han madurado!

Lenguajes de programación modernos y herramientas.

Los lenguajes de programación modernos como JavaScript, Python, Go, Swift y otros son menos complicados y más flexibles que sus predecesores. Antes tenías que escribir 10.000 líneas de código C ++ para hacer algo útil, pero con estos idiomas modernos (y paquetes y bibliotecas disponibles en sus comunidades de desarrolladores) puedes hacer cosas poderosas en menos de 300 líneas de código. La cual es probablemente más corta, o a la par, con la mayoría de las configuraciones de Cisco IOS con las que ha trabajado.

Estos lenguajes, cuando se combinan con otras herramientas de desarrollo modernas como:
  • Repositorios git
  • Sistemas de gestión de paquetes
  • Entornos virtuales
  • Entornos integrados de desarrollo (IDE)

Equiparlo con potentes herramientas de desarrollo que le permiten automatizar sus tareas y procesos y comenzar a crear su propio conjunto de herramientas y flujos de trabajo poderosos.

Si bien estas herramientas son excelentes y ahora están aportando un gran valor a la disciplina de ingeniería de sistemas, también nos estamos beneficiando de otra área de maduración de la industria de desarrollo de software.

Comunidades online
En el pasado, cuando se proponía crear un script o programa, a menudo tenía que comenzar "desde cero", trabajando con bibliotecas estándar de bajo nivel incluidas con su lenguaje de programación y el conjunto de herramientas de su elección. Esto creó una alta barrera de entrada (y una repetición global masiva) ya que los desarrolladores de software tuvieron que escribir los mismos módulos de "trabajo pesado" para realizar tareas comunes. Tomemos, por ejemplo, hacer una solicitud web HTTPS (tuvieron que escribir código para):

  • Abra una conexión TCP en el puerto 443
  • Manejar certificados de negociación e intercambio TLS.
  • Validar los certificados
  • Administrar la conexión TCP (y cualquier agrupación de conexiones)
  • Formato de solicitudes HTTP
  • Interpretar las respuestas HTTP

Eso es mucho trabajo cuando todo lo que el desarrollador quería hacer era obtener o enviar algunos datos hacia o desde algún servidor remoto; es por esto que los ingenieros dejamos este trabajo a los desarrolladores de software.

Ahora, gracias a la comunidad de código abierto, los sitios de colaboración y el código social como GitHub y los repositorios de paquetes públicos, las comunidades de desarrolladores en torno a estos nuevos lenguajes de programación modernos están creando y compartiendo bibliotecas de software de código abierto que ayudan a fomentar la reutilización y reducir el trabajo duplicado. . Aprovechar estas bibliotecas creadas por la comunidad puede ahorrarle enormes cantidades de tiempo y esfuerzo, y le permite concentrar su tiempo y esfuerzo en lo que quiere que haga su código: agilizando su proceso.

Puede realizar una solicitud HTTPS, sin mucha inversión personal, debido al trabajo realizado por estas comunidades en línea:




Lo que estás viendo aquí:

  1. Instalamos una biblioteca comunitaria desde un repositorio de paquetes públicos.
pip install requests

  1. Entramos en una shell interactiva de Python.
Python

  1. Importamos la biblioteca en nuestro código Python.
import requests

  1. Hicimos una solicitud de HTTPS a https://api.github.com .
requests.get("https://api.github.com")

Que tuvo éxito.
<Response [200]>

Comenzando con la instalación del paquete de request en nuestra máquina: en cuatro líneas mecanografiadas en un terminal, pudimos descargar e instalar el paquete y usarlo para realizar una solicitud HTTPS (sin tener que pensar en los pasos necesarios para realizar la solicitud HTTPS) .

Ahora que los lenguajes y las herramientas han evolucionado para ser útiles para los ingenieros de infraestructura, veamos cómo es más fácil trabajar con las API.


Madurez API
Se acabaron los días en los que un programador experto trabajó con la API de un producto. Los estándares API anteriores, como SOAP, demostraron que no son tan "simples" y que los modelos API más fáciles de usar, como las API RESTful, han tomado su lugar.

Ahora, gracias a las API RESTful y los formatos de datos estandarizados como JSON (más adelante los trataremos más detalladamente), puede realizar solicitudes de su infraestructura con la misma facilidad que estos lenguajes de programación modernos proporcionan:

En este ejemplo podemos usar el devnet siempre en ios xe sandbox . 

Nota:
Al ejecutar este código, verá que InsecureRequestWarning sucede cuando se realiza una solicitud a una URL de HTTPS sin la verificación de certificado habilitada (no se muestra por razones de brevedad).



Si eres nuevo en la codificación y Python, y es por eso que estás aquí, esto puede parecer un poco intimidante; pero no se preocupe, al final de esta pista comprenderá todo lo que está sucediendo aquí y mucho más. Por ahora, basta con decir:


  • En cuatro sentencias (import requests través de response = requests.get(...)) extrajimos los detalles de la interfaz de un router.

  • En una sentencia (interfaces = response.json()), analizamos los datos en un formato que podemos usar.

  • Entonces podemos usar esos datos para hacer lo que necesitemos.

¡Fácil! Al aprender las habilidades fundamentales que se enseñan en este módulo, estará en el buen camino para utilizar estas poderosas herramientas para automatizar y crear sus propias herramientas programables con sus propios procesos codificados.

Las API y los lenguajes de programación han evolucionado y madurado hasta el punto de ser útiles y aplicables a los dominios de los ingenieros de infraestructura.

El efecto neto es que puedes hacer cosas poderosas con cantidades de código relativamente pequeñas; y al hacerlo, puede automatizar las partes repetitivas y / o laboriosas de su trabajo, liberándolo para concentrar su tiempo y esfuerzo en las tareas que merecen su intelecto.


Paso 3: tu futuro puesto de trabajo

P: Si paso por este viaje, ¿tendré que convertirme en un desarrollador de software?

R: No. Te convertirás en un ingeniero o técnico más capaz.

A medida que los ingenieros comienzan a invertir en aprender lenguajes de programación y cómo usar herramientas de desarrollo de software, pueden tener un poco de crisis de identidad a medida que comienzan a hacerse preguntas como:

  • Soy un ingeniero astuto, pero ¿por qué no puedo ejecutar mi código?
  • ¿Son estas las habilidades que los empleadores van a valorar?
  • Me gusta diseñar, configurar y operar redes, ¿estoy dejando eso atrás para comenzar a escribir código?
  • Esto puede ser frustrante a veces; ¿No es por eso que cambio mi especialidad universitaria de Ciencias de la Computación a Historia del Arte?
  • ¡¿¡Qué estoy haciendo!?!

No te preocupes, todos los que han comenzado este viaje experimentan los mismos pensamientos y preguntas. Permítanme proporcionar algunas garantías a estas preguntas e inquietudes:
  • La codificación puede ser nueva para usted, pero si usted es un profesional que trabaja con infraestructuras de Cisco, ya es un recurso técnico importante.

  • La última vez que comenzó a trabajar con una nueva pieza de tecnología sofisticada, ¿funcionó a la perfección y sin esfuerzo la primera vez que la tocó? Sí, esto va a llevar algo de tiempo de inversión también.

  • Los empleadores valoran la experiencia que aporta para poder diseñar, implementar y operar infraestructuras y aplicaciones de TI. Aprender a codificar, automatizar tareas rutinarias y crear interconexiones entre sistemas de TI lo convertirá en un recurso aún más valioso.

  • Toda la tecnología puede, a veces, ser frustrante. A medida que su competencia con esta nueva tecnología progrese, su frustración disminuirá y su logro aumentará. Trabajar con API y Programabilidad puede ser gratificante a medida que comienzas a crear cosas e innovar procesos al combinar estas nuevas habilidades con tus capacidades técnicas existentes.

Si te metes en esta tecnología y decides que te encanta y quieres pasar más tiempo desarrollando aplicaciones más complejas y participando en trabajos de desarrollo de software más tradicionales ... eso depende de ti.

Para nuestros propósitos, como ingenieros de infraestructura, deseamos desarrollar nuestras habilidades de codificación y aprender a usar estas nuevas herramientas de desarrollo para convertirnos en ingenieros más capaces. Al final de este viaje (¡cierto, como siempre hay un fin para el aprendizaje!) Aun, seguiremos siendo ingenieros que trabajan en las disciplinas en las que trabajamos, ahora más nítidas y más capaces de desplegar y operar infraestructuras más grandes y más complejas. Porque podemos usar la tecnología para trabajar con la tecnología.


Paso 4: ¿Por qué Python?

Podríamos haber elegido uno de varios lenguajes para esta tarea, pero elegimos Python. Este es el por qué:

  • Aplicabilidad del dominio: para los ingenieros de redes e infraestructura de TI, existe una comunidad en línea bien formada de ingenieros de infraestructura que utilizan Python para implementar y mantener los sistemas de TI. Esto significa que puede aprovechar (y contribuir a) el trabajo realizado por esta comunidad colectiva para ahorrar tiempo (y a otros) mientras todos nos esforzamos por completar tareas comunes juntos.

Sí, hay ingenieros de infraestructura que usan otros lenguajes, y esos lenguajes no son de ninguna manera inferiores a Python. Python parece tener la comunidad más amplia (hasta la fecha) para nuestro dominio.

  • Potencia y flexibilidad: como ya se mencionó, Python es un lenguaje moderno que introduce la codificación en el rango de nivel de esfuerzo de ser útil para los ingenieros de infraestructura. 
Python es un lenguaje de "baterías incluidas" con un ecosistema de desarrolladores rico y diverso. Esto significa que le servirá bien a medida que progrese en su viaje. 
Si su trabajo lo lleva a necesitar: crear un servicio web de fondo, interactuar con una base de datos, realizar un análisis de datos, trabajar con algoritmos de aprendizaje automático o crear una herramienta de línea de comandos simple (o potente), Python y su comunidad de desarrolladores tienen usted cubierto No debería tener que "empezar de cero", y debería poder realizar tareas poderosas con una inversión de esfuerzo razonable.

  • Flexibilidad de la plataforma: sus scripts de Python pueden ejecutarse: en una computadora (Windows, macOS o Linux), en un servidor, en una máquina virtual, en un contenedor, en la nube y en algunos dispositivos Cisco IOS. Esto significa que puede usar Python para crear scripts que pueden ejecutarse en una variedad de lugares para satisfacer las necesidades de su caso de uso.

  • Sesgos de los autores: los autores de este módulo son expertos de la industria que están del lado de Python. Tenemos etiquetas adhesivas en nuestras computadoras portátiles, camisetas, perfiles sociales y conexiones emocionales con nuestro código que nos hacen un poco parciales.

Si todavía estás con nosotros, ¡estás listo para comenzar a aprender a codificar!


Hay que acostumbrarnos a leer, hay mucho por aprender, y estos deben ser nuestros primeros pasos.