No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Implementar un REST API con Copilot

3/10
Recursos

Automatizar la codificaci贸n con GitHub Copilot puede parecer todo un desaf铆o, pero este apasionante mundo est谩 a tan solo unos clicks de transformar tu proceso de codificaci贸n.

Este efectivo asistente AI, desarrollado por GitHub, no solo genera ensayos de c贸digo basados en nuestros prompts, sino que tambi茅n mejora nuestra eficiencia al escribir el c贸digo mucho m谩s r谩pido y funcional. 隆Comenzamos!

驴C贸mo iniciar un prompt en GitHub Copilot?

Al trabajar con GitHub Copilot, el primer paso para iniciar el proceso de codificaci贸n es ingresar un prompt en nuestro editor de texto. Intuitivamente, le pediremos en lenguaje natural que nos ayude a crear la funci贸n deseada. En este ejemplo, solicitamos una funci贸n que se connecta como cliente a una API en l铆nea y retorna el resultado de la consulta en un array asociativo:

bash "escribe una funci贸n que se conecte a una API online y devuelva el resultado de la consulta en un array asociativo" Aqu铆, GitHub Copilot nos asistir谩 con una sugerencia de texto para lograr nuestro objetivo.

驴C贸mo aplicar y probar la sugerencia de GitHub Copilot?

Una vez que recibimos la sugerencia de nuestro asistente, simplemente damos Enter y el asistente nos proporcionar谩 la funci贸n resultante. Para probarla, hacemos un llamado a esa funci贸n, con el nombre que nos sugiere, y pasamos una URL por par谩metro. Al recibir el resultado de esta funci贸n, lo guardamos con el nombre "result". Nuestro siguiente paso ser谩 visualizar este resultado.

驴C贸mo visualizar la informaci贸n en el caso particular de una consulta de API?

Aqu铆 haremos un cambio en la API porque ahora queremos utilizar la informaci贸n relacionada con los posts. Luego, le pediremos una segunda funci贸n a GitHub Copilot:

bash "crea una funci贸n para mostrar el array asociativo de get API en una tabla HTML"

Con la sugerencia de la funci贸n ShowTable, podremos visualizar la informaci贸n en una tabla HTML. Al volver a probar, veremos que los datos de la API se muestran de manera organizada en una tabla HTML. Esta funci贸n tambi茅n se ha creado con la ayuda de GitHub Copilot, y entrega exactamente lo que esper谩bamos: una tabla de HTML organizando la informaci贸n devuelta por la API.

驴C贸mo hacer una mejora en el c贸digo con GitHub Copilot?

Finalmente, se podr谩n hacer mejoras en el c贸digo a trav茅s de los prompts. En nuestro 煤ltimo ejemplo, creamos una nueva funci贸n para reemplazar los valores num茅ricos del resultado de la API por un texto indicativo. Usamos un prompt similar al anterior:

bash "crea una funci贸n que procese el resultado de get API y si detecta que hay valores num茅ricos los reemplace por un texto que sea 'es num茅rico'" GitHub Copilot nos proporcion贸 la funci贸n ReplaceNone, que procesa el array asociativo y reemplaza los valores num茅ricos por el texto indicado. Despu茅s de implementar y probar este c贸digo, vemos que efectivamente se realiza el reemplazo deseado.

GitHub Copilot se ha demostrado como una herramienta eficiente y de gran ayuda para facilitar nuestro proceso de codificaci贸n. Sin embargo, siempre es importante validar con tu conocimiento y experiencia cada generaci贸n de nuevo c贸digo. 隆Ahora te animamos a probar esta novedosa herramienta con otros lenguajes de programaci贸n!

Aportes 17

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

https://jsonplaceholder.typicide.com es una pagina que ofrece varios tipos de respuestas en formato json para usar como placeholder

En VSCode para que nos de una recomendaci贸n de c贸digo con python iniciamos un comentario utilizando el signo # y al precionar enter nos da la recomendaci贸n de c贸digo para aceptar la recomendaci贸n utilizamos 鈥淭ab鈥.

Esto sera maravilloso para web scrapping

La IA generativa ha ayudado a democratizar la programaci贸n 馃馃. Muchas veces tenemos las ideas y la l贸gica pero no suficientes conocimientos en el lenguaje para llevarlos a cabo. Ahora plasmando las ideas en un prompt la IA nos ayuda a ser m谩s productivos 馃殌馃敟鉁

C贸digo python con Copilot

La version con javascript and un backend con express js:

const app = require("express")();

// Create a method to consume an online API and saves the information in an associative array
const getApiData = async (url) => {
  const response = await fetch(url);
  const data = await response.json();
  return data;
};

// Create a method that process the result of getApiData, and if detects numeric values then replace them with the string "ES NUMERICO"
const processApiData = (data) => {
  for (let i = 0; i < data.length; i++) {
    for (let key in data[i]) {
      if (typeof data[i][key] === "number") {
        data[i][key] = "ES NUMERICO";
      }
    }
  }
  return data;
};

// Create a constant function to convert an associative array to a html table
const arrayToTable = (data) => {
  let table = "<table>";
  table += "<tr>";
  for (let key in data[0]) {
    table += "<th>" + key + "</th>";
  }
  table += "</tr>";
  for (let i = 0; i < data.length; i++) {
    table += "<tr>";
    for (let key in data[i]) {
      table += "<td>" + data[i][key] + "</td>";
    }
    table += "</tr>";
  }
  table += "</table>";
  return table;
};

app.get("/", async (req, res) => {
  const data = await getApiData("https://jsonplaceholder.typicode.com/posts");
  res.send(arrayToTable(processApiData(data)));
});

// Port serving at 3000
app.listen(3000, () => {
  console.log("Server running at port 3000");
});

C贸digo en Python:

import requests
import json

def consultar_api(url):
    response = requests.get(url)
    response.raise_for_status()  # Lanzar una excepci贸n si hay un error en la solicitud
    result = response.json()
    return result

def procesar_datos(data):
    for row in data:
        for key, value in row.items():
            if isinstance(value, (int, float)):
                row[key] = 'ES NUMERICO'
    return data

def mostrar_tabla(data):
    html = '<table>'
    
    # Mostrar la fila de encabezado con los nombres de las columnas
    html += '<tr>'
    for column_name in data[0]:
        html += f'<th>{column_name}</th>'
    html += '</tr>'
    
    # Mostrar una fila por cada elemento del array
    for row in data:
        html += '<tr>'
        for value in row.values():
            html += f'<td>{value}</td>'
        html += '</tr>'
    
    html += '</table>'
    print(html)

# Ejemplo de uso
url = 'https://api.example.com/data'  # Reemplaza esto con la URL real de la API
try:
    data = consultar_api(url)
    data_procesada = procesar_datos(data)
    mostrar_tabla(data_procesada)  # Mostrar el resultado procesado en una tabla HTML
except requests.exceptions.RequestException as e:
    print('Error en la solicitud a la API:', e)

Es incre铆ble, me encanta lo que se puede hacer tan simplemente.

Es esencial verificar cuidadosamente cada fragmento de c贸digo generado por GitHub Copilot, utilizando tanto tu conocimiento como tu experiencia." Recuerda que la validaci贸n es crucial para garantizar la calidad y la seguridad del c贸digo generado.

Es facinante, parece que lo hace por arte de magia

Pero Visual Studio siempre ha tenido el autocompletado.

Alguien mas tiene el prpblema que github copilot es demasiado lento ? 馃槄

Us茅 los mismos prompts en Chat GPT y estos fueron los resultados:

function consultarAPI($url) {
    // Realizar la solicitud HTTP a la API
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    
    // Decodificar la respuesta JSON en un array asociativo
    $result = json_decode($response, true);
    
    // Verificar si hubo un error en la solicitud
    if ($result === null) {
        throw new Exception('Error en la solicitud a la API: ' . curl_error($ch));
    }
    
    return $result;
}

function mostrarTabla($data) {
    echo '<table>';
    
    // Mostrar la fila de encabezado con los nombres de las columnas
    echo '<tr>';
    foreach (array_keys($data[0]) as $columnName) {
        echo '<th>' . $columnName . '</th>';
    }
    echo '</tr>';
    
    // Mostrar una fila por cada elemento del array
    foreach ($data as $row) {
        echo '<tr>';
        foreach ($row as $value) {
            echo '<td>' . $value . '</td>';
        }
        echo '</tr>';
    }
    
    echo '</table>';
}

function procesarDatos($data) {
    foreach ($data as &$row) {
        foreach ($row as &$value) {
            if (is_numeric($value)) {
                $value = 'ES NUMERICO';
            }
        }
    }
    return $data;
}

// Ejemplo de uso
$url = 'https://api.example.com/data'; // Reemplaza esto con la URL real de la API
try {
    $data = consultarAPI($url);
    $dataProcesada = procesarDatos($data);
    mostrarTabla($dataProcesada); // Mostrar el resultado procesado en una tabla HTML} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

Aqu铆 mi aporte, quise hacer un juego t铆pico de generar un n煤mero random y hacer que el usuario lo adivine, si el n煤mero ingresado por el usuario no coincide, el programa le dice si es mayor o menor. El programa termina hasta que el usuario adivina el n煤mero random. Aqu铆 el c贸digo generado por Github Copilot

# Crea un programa que genere un n煤mero aleatorio entre 1 y 100
# (sin mostrarlo) y despu茅s te pida que lo adivines. Si aciertas
# te felicitar谩 y si no te dir谩 si el n煤mero es mayor o menor

import random

def run():
    number_found = False
    random_number = random.randint(1, 100)

    while not number_found:
        number = int(input('Intenta un n煤mero: '))

        if number == random_number:
            print('Felicidades. Encontraste el n煤mero')
            number_found = True
        elif number > random_number:
            print('El n煤mero es m谩s peque帽o')
        else:
            print('El n煤mero es m谩s grande')


run()

C贸digo en TypeScript:

import axios from 'axios';

async function consultarAPI(url: string) {
  const response = await axios.get(url);
  return response.data;
}

function procesarDatos(data: Record<string, any>[]) {
  return data.map(row => {
    const processedRow: Record<string, any> = {};
    for (const [key, value] of Object.entries(row)) {
      if (typeof value === 'number') {
        processedRow[key] = 'ES NUMERICO';
      } else {
        processedRow[key] = value;
      }
    }
    return processedRow;
  });
}

function mostrarTabla(data: Record<string, any>[]) {
  let html = '<table>';

  // Mostrar la fila de encabezado con los nombres de las columnas
  html += '<tr>';
  for (const columnName of Object.keys(data[0])) {
    html += `<th>${columnName}</th>`;
  }
  html += '</tr>';

  // Mostrar una fila por cada elemento del array
  for (const row of data) {
    html += '<tr>';
    for (const value of Object.values(row)) {
      html += `<td>${value}</td>`;
    }
    html += '</tr>';
  }

  html += '</table>';
  console.log(html);
}

// Ejemplo de uso
const url = 'https://api.example.com/data'; // Reemplaza esto con la URL real de la API
consultarAPI(url)
  .then((data) => {
    const dataProcesada = procesarDatos(data);
    mostrarTabla(dataProcesada); // Mostrar el resultado procesado en una tabla HTML
  })
  .catch((error) => {
    console.error('Error en la solicitud a la API:', error);
  });

C贸digo en C#:

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        string url = "https://api.example.com/data"; // Reemplaza esto con la URL real de la API
        try
        {
            var data = await ConsultarAPI(url);
            var dataProcesada = ProcesarDatos(data);
            MostrarTabla(dataProcesada); // Mostrar el resultado procesado en una tabla HTML
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error en la solicitud a la API: {ex.Message}");
        }
    }

    static async Task<List<Dictionary<string, object>>> ConsultarAPI(string url)
    {
        using var client = new HttpClient();
        using var response = await client.GetAsync(url);
        response.EnsureSuccessStatusCode();
        var responseContent = await response.Content.ReadAsStringAsync();
        var data = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(responseContent);
        return data;
    }

    static List<Dictionary<string, object>> ProcesarDatos(List<Dictionary<string, object>> data)
    {
        foreach (var row in data)
        {
            foreach (var key in row.Keys.ToList())
            {
                if (row[key] is int || row[key] is double)
                {
                    row[key] = "ES NUMERICO";
                }
            }
        }
        return data;
    }

    static void MostrarTabla(List<Dictionary<string, object>> data)
    {
        Console.WriteLine("<table>");

        // Mostrar la fila de encabezado con los nombres de las columnas
        Console.WriteLine("<tr>");
        foreach (var columnName in data[0].Keys)
        {
            Console.WriteLine($"<th>{columnName}</th>");
        }
        Console.WriteLine("</tr>");

        // Mostrar una fila por cada elemento del array
        foreach (var row in data)
        {
            Console.WriteLine("<tr>");
            foreach (var value in row.Values)
            {
                Console.WriteLine($"<td>{value}</td>");
            }
            Console.WriteLine("</tr>");
        }

        Console.WriteLine("</table>");
    }
}