Cargando...

¿Qué es una API?

Publicación: Marzo 7, 2026

¿Qué es una API?

De esta forma, podemos solicitar y recibir datos sin conocer con precisión cómo funciona el sistema externo a nosotros.

Los sistemas actuales son bastante complejos y necesitan información especializada para poder llevar acabo sus funciones. Seccionar los medios para el intercambio de datos hace a los procesos de un gran sistema mucho más claros y eficientes.

¿Para qué nos sirve una API?

Pensemos en un sistema de notificaciones para indicarle a los padres de un kinder si deben llevar a sus hijos a clases o no. Algunos factores que influirían en la decisión para notificar que no lleven a sus niños a la escuela podrían ser condiciones climatológicas (inundaciones, heladas, olas de calor, etc.), sismos, epidemias, inseguridad en las zonas aledañas, vacaciones y días feriados del calendario escolar. Entonces, esta información se podría obtener de al menos 4 fuentes diferentes:

Ahora, por ejemplo, el calendario escolar oficial se encuentra exclusivamente como un PDF y la URL para obtenerlo cambia con cada ciclo escolar u actualización de la organización de archivos en la página nacional. Resulta mucho más sencillo y preciso que una persona registre en un formato específico los días feriados y vacaciones con cada ciclo escolar una sola vez en lugar de crear un programa que es probable no pueda obtener los datos correctamente para el siguiente ciclo. En cambio, la API de servicio meteorológico nos proporciona métricas exactas en un formato organizado (JSON) con base en parámetros específicos en una sola petición.

Por lo tanto es más sencillo obtener cientos de datos sobre condiciones climatológicas que el calendario escolar oficial debido a los pasos necesarios para obtener la información deseada. Este es un ejemplo muy simple de por qué las APIs son tan importantes para los sistemas modernos.

Conexión simple a una API REST sin autenticación

Existen varios tipos de APIs: SOAP, RPC, Websocket y Rest; por el momento nos enfocaremos en la última.

Request (petición)

La forma de hacer peticiones varía por cada API, pero en general necesitamos lo siguiente:

  • Endpoint (Punto final de intercambio de datos) → URL dedicada al acceso de un recurso en específico

  • Método → Tipo de operación a realizar dentro del cliente:

    • GET → Obtener datos
    • POST → Crear datos
    • PUT → Actualizar datos
    • DELETE → Eliminar datos

    Para las APIs Rest, se emplea el protocolo de HTTPS (variante de HTTP que encripta la comunicación entre el usuario y el sitio web)

    ** Personalmente nunca me he visto en la necesidad de emplear otros métodos fuera de GET y POST

  • Headers → Metadatos (información) que el cliente (el usuario) le envía al servidor dentro de su petición con el fin de proporcionar detalles relevantes sobre su identidad. Existen muchos, pero algunos de los más relevantes son:

    • User-Agent → ¿Qué navegador estoy utilizando? ¿Cuál es mi sistema operativo?

      ** Si quisiéramos por ejemplo descargar una aplicación, es conveniente mandarle estos datos a la página para que nos redirija a la página con el instalador adecuado (.dmg, .exe, etc.)

    • Authorization → Enviar nuestras credenciales de autenticación de identidad (por ejemplo, Bearer tokens)

    • Accept-Language → Idioma de preferencia para obtener respuesta (inglés, español, francés, etc.)

    Ejemplo de headers

    Request
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Encoding: gzip, deflate, br, zstd
    Accept-Language: en-US,en;q=0.9
    Priority: u=0, i
    Referer: https://creative-assets.everesttech.net/
    Sec-Fetch-Dest: iframe
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: same-origin
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.3.1 Safari/605.1.15
  • Parámetros → Especificaciones sobre los datos a solicitar (cantidad, formato, tipo, secuencia, fecha, etc.).

    Se pueden incluir directamente en la URL. Por ejemplo: https://dogapi.dog/api/v2/facts/?limit=3. Copia y pega esta URL en tu navegador favorito y verás cómo hace directamente una petición por GET hacia esta API con estos parámetros.

    Endpoint → https://dogapi.dog/api/v2/facts/

    Parámetro → limit

    Valor del parámetro → 3

    Respuesta esperada:

    {"data":[{"id":"74aa002e-e5d6-4398-85bd-aa6275a70ba0","type":"fact","attributes":{"body":"Male dogs have a bone in their penis."}},{"id":"71c4c81c-34e0-493a-a28c-002aebf4cdcf","type":"fact","attributes":{"body":"Obesity is the top health problem among dogs."}},{"id":"c9f0dec8-9f0e-465c-a864-1a3db537073c","type":"fact","attributes":{"body":"Dogs have three eyelids, including one to keep their eyes moist and protected."}}]}
  • Body (parte principal de la petición) → Los datos que el cliente/usuario le manda al servidor/servicio para crear, actualizar o eliminar datos. Por ejemplo:

    {
      "userName": "goddess",
      "firstName": "Ada",
      "lastName": "Lovelance"
    }

¿Cómo obtener headers de HTTPS?

(Ejemplo con Safari)

  1. Entramos a un sitio web, por ejemplo Google: https://myhttpheader.com
  2. Abrimos el inspector de la consola → cmd + shift + C y luego seleccionar cualquier elemento de la página
  3. Nos dirigimos a la pestaña de “Network”.
  4. Al “entrar” a la página, nuestro navegador realizó una petición por medio del protocolo HTTPS, por lo tanto estos paquetes de información llevan adjuntos los “Request Headers”. Selecciona cualquier archivo y dirígete a la sección “Headers”. Dentro encontrarás los atributos que mencionamos anteriormente.
01.jpg
  1. Guarda (copia y pega) los atributos de al menos Accept-Language y User-Agent en un diccionario. Por ejemplo:

    HEADERS   = {
        "Accept-Language": "en-US,en;q=0.9",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.3.1 Safari/605.1.15"
    }

¿Qué pasa si no incluyo headers en mi petición?

Resumen: depende

Si es una API pública, realmente nada.

Si es una API pública pero con autenticación, dependiendo de los requisitos que indique en su documentación, puede no permitir comunicación entre el servicio y tu programa

Si estas haciendo web scrapping, es casi seguro que el sitio te bloqué o te niegue el acceso porque prácticamente de estás auto-delatando como bot.

Entonces, de preferencia: siempre incluye headers

Response (Respuesta)

  • URL → Dado que realizamos una petición por HTTPS, lo que estamos haciendo es solicitar una URL con parámetros

  • Status code → Cada petición posee un código de 3 dígitos (HTTP response status codes) que indican si la petición ha sido completada exitosamente o no. En caso de error, el código de estatus nos precisa en qué parte del proceso hubo un error (del lado del cliente, del servidor, en la sintaxis, etc.). Algunos de los códigos más comunes son:

    200 → Ok

    201 → Created (POST)

    202 → Accepted

    400 → Bad Request (Error en sintaxis)

    404 → Not found

    429 → Too Many Requests

  • Response headers → Información relevante sobre la respuesta de parte del servicio/servidor (fecha, cuánto se tardó, ID de la petición, etc.)

    Ejemplo:

    {'Cache-Control': 'max-age=0, private, must-revalidate', 'Content-Length': '453', 'Content-Type': 'application/vnd.api+json; charset=utf-8', 'Etag': 'W/"77f42af2412cefc7414aa3ad430988d8"', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'Vary': 'Accept, Origin', 'X-Content-Type-Options': 'nosniff', 'X-Download-Options': 'noopen', 'X-Frame-Options': 'SAMEORIGIN', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Request-Id': '30e1577f-a3a1-4126-90df-f30b180468a1', 'X-Runtime': '0.014208', 'X-Xss-Protection': '0', 'Date': 'Mon, 23 Mar 2026 15:37:03 GMT'}
  • Response body → Los datos que le le pedimos al servidor. Si se produjo un error, se muestra a detalle en esta parte

    Ejemplo:

    {"data":[{"id":"822aead4-aa62-4e0a-8f04-a50476d3675f","type":"fact","attributes":{"body":"Dogs can understand up to 250 words and gestures."}}]}

    Cuando obtenemos una respuesta muy larga, es conveniente transformarla en un JSON para facilidad de lectura humana. Mi formateador para JSON favorito es: https://jsonformatter.curiousconcept.com

    Ejemplo de output:

    {
       "data":[
          {
             "id":"822aead4-aa62-4e0a-8f04-a50476d3675f",
             "type":"fact",
             "attributes":{
                "body":"Dogs can understand up to 250 words and gestures."
             }
          }
       ]
    }

Ejemplo

Vamos a pedir 3 datos curiosos aleatorios sobre perros a DogAPI (API pública sin autenticación).

  1. Crea un nuevo proyecto con su propio ambiente (venv)

  2. Primero, vamos a necesitar importar la librería requests para hacer peticiones por HTTPS. Instálala desde la consola con el comando pip install requests

  3. Definimos nuestro endpoint: https://dogapi.dog/api/v2/facts/

  4. De acuerdo con la documentación oficial, este endpoint acepta 1 parámetro: limit, el cual limitará el número de datos curiosos que la API nos devolverá . Por orden mental, es conveniente separar todos los parámetros en un diccionario aparte, por ejemplo:

    parameters = {
         "limit": "3"
    }
  5. Ahora creamos una nueva instancia del módulo de requests para hacer nuestra petición (response). Dado que es una API pública, sólo necesitamos el endpoint y los parámetros para hacer nuestra petición.

  6. Imprimimos la respuesta de la petición con print(response.text)

Juntando todo obtenemos:

# ------------------------- Libraries -------------------------
import requests

# ------------------------- Variables -------------------------
DogAPI_endpoint = "https://dogapi.dog/api/v2/facts/"

parameters = {
     "limit": "3"
}

# --------------------------- Code ----------------------------
response = requests.get(DogAPI_endpoint, params=parameters)

# Get response plain text
print(response.text)
{"data":[{"id":"822aead4-aa62-4e0a-8f04-a50476d3675f","type":"fact","attributes":{"body":"Dogs can understand up to 250 words and gestures."}}]}

Obtener la URL con la que hicimos nuestra petición

print(response.status_code)
200

Obtener el código de estatus de la respuesta

print(response.headers)
print(response.headers['content-type']) # Get a specified attribute
{'Cache-Control': 'max-age=0, private, must-revalidate', 'Content-Length': '485', 'Content-Type': 'application/vnd.api+json; charset=utf-8', 'Etag': 'W/"af3744c0320ebcdb55aa86ebbd6bdae9"', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'Vary': 'Accept, Origin', 'X-Content-Type-Options': 'nosniff', 'X-Download-Options': 'noopen', 'X-Frame-Options': 'SAMEORIGIN', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Request-Id': '1e2bafa8-3725-43d3-9f0a-b9ca635f5dfe', 'X-Runtime': '0.011593', 'X-Xss-Protection': '0', 'Date': 'Mon, 23 Mar 2026 16:26:12 GMT'}
application/vnd.api+json; charset=utf-8

Obtener la codificación de la respuesta

print(response.encoding)
utf-8

Obtener la respuesta en formato JSON

Esto no es sólo cómo leemos la información como humanos, sino que ahora python lo trata como un objeto:

data = response.json()
print(data['data'][0]['attributes']['body'])
The Girl Scouts and Boy Scouts both offer merit badges in dog care.

API Keys

Código para identificar y autenticar a un usuario o sistema dentro de una aplicación

Existen diversas maneras de autenticarse, pero normalmente consiste en obtener un usuario (correo electrónico casi siempre) y una API key (un código alfanumérico por aplicación). Dependiendo de la API estos datos pueden pasarse directamente en la petición, pero para mayor seguridad el mismo servicio puede pedir que estas credenciales se autentiquen desde el lado del cliente (nosotros).

Ejemplo: API de Kaggle

Kaggle es una plataforma para ciencia de datos y Machine Learning. Tiene muy buenos cursos (gratis), datasets y competencias (con paga generosa). La razón por la cual queremos conectarnos a su API es para descargar sus datasets automáticamente. Explora la plataforma y elige uno.

Pasos para autenticarse con la API de Kaggle:

  1. Crea una cuenta de Kaggle: https://www.kaggle.com/

  2. Existen diversas maneras de conectarse a la API de Kaggle cada una con sus pros y contras. Para efectos de demostración vamos a crear una llave para la Legacy API en https://www.kaggle.com/settings

  3. Descarga el archivo .json y muévelo a una carpeta oculta en:

    • macOS → Users/machineusername/.kaggle/
    • Windows → C:\machineusername\.kaggle
  4. Esta API en específico requiere que instalemos una librería de python para poder conectarnos, instala: pip install kaggle

  5. Ahora sí, procedemos a conectarnos a la API

    from kaggle.api.kaggle_api_extended import KaggleApi
    
    datasetFolder = 'BacteriaDataset' # Your folder name
    datasetId = 'kanchana1990/bacteria-dataset' # Get ID from URL
    # Original URL: https://www.kaggle.com/datasets/kanchana1990/bacteria-dataset
    global datasetPath
    
    try:
        datasetPath = f'{datasetFolder}/{os.listdir(datasetFolder)[0]}'
    except FileNotFoundError or IndexError:
        print(f'File not found. Downloading dataset at {datasetFolder}')
        api = KaggleApi()
        api.authenticate()
        api.dataset_download_files(datasetId, path=datasetFolder, unzip=True)
        print("File successfully downloaded")

Ejemplo: DogAPI

# ------------ Resources / Documentation involved -------------
# Dog API Documentation: https://dogapi.dog/docs/api-v2
# Requests library documentation: https://requests.readthedocs.io/en/latest/user/quickstart/

# ------------------------- Libraries -------------------------
import requests

# ------------------------- Variables -------------------------
DogAPI_Breeds_Endpoint = "https://dogapi.dog/api/v2/breeds/"

parameters = {
     "page[number]": "1",
     "page[size]": 2
}

# --------------------------- Code ----------------------------
response = requests.get(DogAPI_Breeds_Endpoint, params=parameters)

# Get sent URL
print(response.url)

# Get status code
print(response.status_code)

# Get headers
print(response.headers)

# Get response encoding
print(response.headers)
# print(response.headers['content-type'])

# Get response plain text
print(response.text)

# Get the actual data
print(response.json())
https://dogapi.dog/api/v2/breeds/?page%5Bnumber%5D=1&page%5Bsize%5D=2
200
{'Cache-Control': 'max-age=0, private, must-revalidate', 'Content-Length': '1460', 'Content-Type': 'application/vnd.api+json; charset=utf-8', 'Etag': 'W/"3ead69bf01026ef0e2d5843892d99399"', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'Vary': 'Accept, Origin', 'X-Content-Type-Options': 'nosniff', 'X-Download-Options': 'noopen', 'X-Frame-Options': 'SAMEORIGIN', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Request-Id': 'ba52941b-0d73-40e3-921b-ce7dcc40e8db', 'X-Runtime': '0.013605', 'X-Xss-Protection': '0', 'Date': 'Mon, 06 Apr 2026 20:34:45 GMT'}
{'Cache-Control': 'max-age=0, private, must-revalidate', 'Content-Length': '1460', 'Content-Type': 'application/vnd.api+json; charset=utf-8', 'Etag': 'W/"3ead69bf01026ef0e2d5843892d99399"', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'Vary': 'Accept, Origin', 'X-Content-Type-Options': 'nosniff', 'X-Download-Options': 'noopen', 'X-Frame-Options': 'SAMEORIGIN', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Request-Id': 'ba52941b-0d73-40e3-921b-ce7dcc40e8db', 'X-Runtime': '0.013605', 'X-Xss-Protection': '0', 'Date': 'Mon, 06 Apr 2026 20:34:45 GMT'}
{"data":[{"id":"036feed0-da8a-42c9-ab9a-57449b530b13","type":"breed","attributes":{"name":"Affenpinscher","description":"The Affenpinscher is a small and playful breed of dog that was originally bred in Germany for hunting small game. They are intelligent, energetic, and affectionate, and make excellent companion dogs.","life":{"max":16,"min":14},"male_weight":{"max":5,"min":3},"female_weight":{"max":5,"min":3},"hypoallergenic":true},"relationships":{"group":{"data":{"id":"f56dc4b1-ba1a-4454-8ce2-bd5d41404a0c","type":"group"}}}},{"id":"dd9362cc-52e0-462d-b856-fccdcf24b140","type":"breed","attributes":{"name":"Afghan Hound","description":"The Afghan Hound is a large and elegant breed of dog that was originally bred in Afghanistan for hunting small game. They are intelligent, independent, and athletic, and make excellent companion dogs.","life":{"max":14,"min":12},"male_weight":{"max":27,"min":23},"female_weight":{"max":25,"min":20},"hypoallergenic":false},"relationships":{"group":{"data":{"id":"be0147df-7755-4228-b132-2518c0c6d10d","type":"group"}}}}],"meta":{"pagination":{"current":1,"next":2,"last":142,"records":283}},"links":{"self":"https://dogapi.dog/api/v2/breeds?page%5Bnumber%5D=1\u0026page%5Bsize%5D=2","current":"https://dogapi.dog/api/v2/breeds?page[number]=1\u0026page[size]=2","next":"https://dogapi.dog/api/v2/breeds?page[number]=2\u0026page[size]=2","last":"https://dogapi.dog/api/v2/breeds?page[number]=142\u0026page[size]=2"}}
{'data': [{'id': '036feed0-da8a-42c9-ab9a-57449b530b13', 'type': 'breed', 'attributes': {'name': 'Affenpinscher', 'description': 'The Affenpinscher is a small and playful breed of dog that was originally bred in Germany for hunting small game. They are intelligent, energetic, and affectionate, and make excellent companion dogs.', 'life': {'max': 16, 'min': 14}, 'male_weight': {'max': 5, 'min': 3}, 'female_weight': {'max': 5, 'min': 3}, 'hypoallergenic': True}, 'relationships': {'group': {'data': {'id': 'f56dc4b1-ba1a-4454-8ce2-bd5d41404a0c', 'type': 'group'}}}}, {'id': 'dd9362cc-52e0-462d-b856-fccdcf24b140', 'type': 'breed', 'attributes': {'name': 'Afghan Hound', 'description': 'The Afghan Hound is a large and elegant breed of dog that was originally bred in Afghanistan for hunting small game. They are intelligent, independent, and athletic, and make excellent companion dogs.', 'life': {'max': 14, 'min': 12}, 'male_weight': {'max': 27, 'min': 23}, 'female_weight': {'max': 25, 'min': 20}, 'hypoallergenic': False}, 'relationships': {'group': {'data': {'id': 'be0147df-7755-4228-b132-2518c0c6d10d', 'type': 'group'}}}}], 'meta': {'pagination': {'current': 1, 'next': 2, 'last': 142, 'records': 283}}, 'links': {'self': 'https://dogapi.dog/api/v2/breeds?page%5Bnumber%5D=1&page%5Bsize%5D=2', 'current': 'https://dogapi.dog/api/v2/breeds?page[number]=1&page[size]=2', 'next': 'https://dogapi.dog/api/v2/breeds?page[number]=2&page[size]=2', 'last': 'https://dogapi.dog/api/v2/breeds?page[number]=142&page[size]=2'}}

Implementación con objetos

Dado que vamos a hacer llamadas a diversas APIs con diversos endpoints y parámetros pero con un mismo procedimiento, es conveniente crear una clase base que replique este comportamiento en diversas situaciones y que sea mutable para ajustar a APIs específicas. A continuación, una propuesta de implementación:

API_requester_class.py

# +----------------------------------------------------------------------------+
# | CARDUI TECH v1.0.0
# +----------------------------------------------------------------------------+
# | Copyright (c) 2026 - 2026, CARDUITECH.COM (www.carduitech.com)
# | Vanessa Reteguín <vanessa@reteguin.com>
# | Released under the MIT license
# | www.carduitech.com/license/
# +----------------------------------------------------------------------------+
# | Author.......: Vanessa Reteguín <vanessa@reteguin.com>
# | First release: March 16th, 2026
# | Last update..: March 16th, 2026
# | WhatIs.......: API Requester - Class
# +----------------------------------------------------------------------------++

# ------------ Resources / Documentation involved -------------
# Requests library documentation: https://requests.readthedocs.io/en/latest/user/quickstart/
# URL Decoder/Encoder: https://meyerweb.com/eric/tools/dencoder/

# ------------------------- Libraries -------------------------
import requests

# ------------------------- Class -------------------------
class API_Requester:
    def __init__(self, endpoint, parameters, api_key=""):
        self.endpoint = endpoint
        self.parameters = parameters
        self.api_key = api_key

    def fetch_data(self, method="GET", show_url=False, show_status_code=False, show_json=False):
        response = requests.get(self.endpoint, params=self.parameters)

        if show_url:
            print(f"Sent URL: {response.url}")

        if show_status_code:
            print(f"Status code: {response.status_code}")

        if show_json:
            print("Response: ") # Separate prints for easier response copy/paste
            print(response.json())

        return response.json()

Para este ejemplo nos conectaremos a tres APIs públicas:

  • Dog API: Datos curiosos sobre perros
  • SWAPI: Datos sobre personajes, películas, planetas, especies, entre otros sobre StarWars
  • SpaceXData: Información precisa sobre los lanzamientos de las naves de SpaceX

⭐️ Esta última posee parámetros anidados

main.py

# +----------------------------------------------------------------------------+
# | CARDUI TECH v1.0.0
# +----------------------------------------------------------------------------+
# | Copyright (c) 2026 - 2026, CARDUITECH.COM (www.carduitech.com)
# | Vanessa Reteguín <vanessa@reteguin.com>
# | Released under the MIT license
# | www.carduitech.com/license/
# +----------------------------------------------------------------------------+
# | Author.......: Vanessa Reteguín <vanessa@reteguin.com>
# | First release: March 11th, 2026
# | Last update..: March 16th, 2026
# | WhatIs.......: Dog API (API connections exercise)  - Main
# +----------------------------------------------------------------------------++

# ------------ Resources / Documentation involved -------------
# Dog API documentation: https://dogapi.dog/docs/api-v2
# Star Wars API documentation: https://swapi.dev/documentation
# SpaceX query launches API documentation: https://github.com/r-spacex/SpaceX-API/blob/master/docs/launches/v5/query.md

# -------------------------- Imports --------------------------
from API_requester_class import API_Requester

# ------------------------- Variables -------------------------
DogAPI_endpoint_facts = "https://dogapi.dog/api/v2/facts/"
DogAPI_facts_breeds = {
     "limit": "3"
}

DogAPI_endpoint_breeds = "https://dogapi.dog/api/v2/breeds/"
DogAPI_parameters_breeds = {
     "page[number]": "1",
     "page[size]": 2
}

StarWars_endpoint_species = "https://swapi.dev/api/species/"
StarWars_parameters_species = {
     "search": "togruta"
}

StarWars_endpoint_planets = "https://swapi.dev/api/planets/"
StarWars_parameters_planets = {
     "search": "naboo"
}

# Note that this request has nested parameters
SpaceX_endpoint_launches = "https://api.spacexdata.com/v5/launches/"
SpaceX_parameters_launches = {
     "query": {
          "upcoming": True
     },
     "options": {
          "limit": 1,
          "sort": {
               "flight_number": "asc"
          }
     }
}

# --------------------------- Code ----------------------------

dog_facts = API_Requester(endpoint=DogAPI_endpoint_facts, parameters=DogAPI_facts_breeds)
dog_facts.fetch_data(show_url=True, show_status_code=True, show_json=True)

dog_breeds = API_Requester(endpoint=DogAPI_endpoint_breeds, parameters=DogAPI_parameters_breeds)
dog_breeds.fetch_data(show_url=True, show_json=True)

starwars_species_facts = API_Requester(endpoint=StarWars_endpoint_species, parameters=StarWars_parameters_species)
starwars_species_facts.fetch_data(show_url=True, show_status_code=True, show_json=True)

starwars_planets_facts = API_Requester(endpoint=StarWars_endpoint_planets, parameters=StarWars_parameters_planets)
starwars_planets_facts.fetch_data(show_url=True, show_status_code=True, show_json=True)

SpaceX_launches = API_Requester(endpoint=SpaceX_endpoint_launches, parameters=SpaceX_parameters_launches)
launch_data = SpaceX_launches.fetch_data(show_url=True, show_status_code=True, show_json=False)

for i in range(0, 4):
     print(f"""\nMission data #{i}
Success: {launch_data[i]['success']}
Detail: {launch_data[i]['details']}
Article: {launch_data[i]['links']['article']}""")

Output:

Sent URL: https://dogapi.dog/api/v2/facts/?limit=3
Status code: 200
Response: 
{'data': [{'id': '425b86b3-5f71-4e4e-be30-54f6e8d68799', 'type': 'fact', 'attributes': {'body': 'The normal body temperature of a dog is 100.94 degrees Fahrenheit (38.3 Celsius) to 102.56 F (39.2 C) whereas human normal body temperature 98.6 F (37 C).'}}, {'id': '20b4826f-28d8-4cf2-aa26-7f66230e498d', 'type': 'fact', 'attributes': {'body': "A dog's nose is wet because it is lined with mucus, which helps to pick up scents."}}, {'id': 'aa24f68c-1468-4df6-8fd8-12995d931d76', 'type': 'fact', 'attributes': {'body': 'Those born under the sign of the dog in Chinese astrology are considered to be loyal and discreet, though slightly temperamental.'}}]}
Sent URL: https://dogapi.dog/api/v2/breeds/?page%5Bnumber%5D=1&page%5Bsize%5D=2
Response: 
{'data': [{'id': '036feed0-da8a-42c9-ab9a-57449b530b13', 'type': 'breed', 'attributes': {'name': 'Affenpinscher', 'description': 'The Affenpinscher is a small and playful breed of dog that was originally bred in Germany for hunting small game. They are intelligent, energetic, and affectionate, and make excellent companion dogs.', 'life': {'max': 16, 'min': 14}, 'male_weight': {'max': 5, 'min': 3}, 'female_weight': {'max': 5, 'min': 3}, 'hypoallergenic': True}, 'relationships': {'group': {'data': {'id': 'f56dc4b1-ba1a-4454-8ce2-bd5d41404a0c', 'type': 'group'}}}}, {'id': 'dd9362cc-52e0-462d-b856-fccdcf24b140', 'type': 'breed', 'attributes': {'name': 'Afghan Hound', 'description': 'The Afghan Hound is a large and elegant breed of dog that was originally bred in Afghanistan for hunting small game. They are intelligent, independent, and athletic, and make excellent companion dogs.', 'life': {'max': 14, 'min': 12}, 'male_weight': {'max': 27, 'min': 23}, 'female_weight': {'max': 25, 'min': 20}, 'hypoallergenic': False}, 'relationships': {'group': {'data': {'id': 'be0147df-7755-4228-b132-2518c0c6d10d', 'type': 'group'}}}}], 'meta': {'pagination': {'current': 1, 'next': 2, 'last': 142, 'records': 283}}, 'links': {'self': 'https://dogapi.dog/api/v2/breeds?page%5Bnumber%5D=1&page%5Bsize%5D=2', 'current': 'https://dogapi.dog/api/v2/breeds?page[number]=1&page[size]=2', 'next': 'https://dogapi.dog/api/v2/breeds?page[number]=2&page[size]=2', 'last': 'https://dogapi.dog/api/v2/breeds?page[number]=142&page[size]=2'}}
Sent URL: https://swapi.dev/api/species/?search=togruta
Status code: 200
Response: 
{'count': 1, 'next': None, 'previous': None, 'results': [{'name': 'Togruta', 'classification': 'mammal', 'designation': 'sentient', 'average_height': '180', 'skin_colors': 'red, white, orange, yellow, green, blue', 'hair_colors': 'none', 'eye_colors': 'red, orange, yellow, green, blue, black', 'average_lifespan': '94', 'homeworld': 'https://swapi.dev/api/planets/58/', 'language': 'Togruti', 'people': ['https://swapi.dev/api/people/78/'], 'films': ['https://swapi.dev/api/films/5/', 'https://swapi.dev/api/films/6/'], 'created': '2014-12-20T18:44:03.246000Z', 'edited': '2014-12-20T21:36:42.209000Z', 'url': 'https://swapi.dev/api/species/35/'}]}
Sent URL: https://swapi.dev/api/planets/?search=naboo
Status code: 200
Response: 
{'count': 1, 'next': None, 'previous': None, 'results': [{'name': 'Naboo', 'rotation_period': '26', 'orbital_period': '312', 'diameter': '12120', 'climate': 'temperate', 'gravity': '1 standard', 'terrain': 'grassy hills, swamps, forests, mountains', 'surface_water': '12', 'population': '4500000000', 'residents': ['https://swapi.dev/api/people/3/', 'https://swapi.dev/api/people/21/', 'https://swapi.dev/api/people/35/', 'https://swapi.dev/api/people/36/', 'https://swapi.dev/api/people/37/', 'https://swapi.dev/api/people/38/', 'https://swapi.dev/api/people/39/', 'https://swapi.dev/api/people/42/', 'https://swapi.dev/api/people/60/', 'https://swapi.dev/api/people/61/', 'https://swapi.dev/api/people/66/'], 'films': ['https://swapi.dev/api/films/3/', 'https://swapi.dev/api/films/4/', 'https://swapi.dev/api/films/5/', 'https://swapi.dev/api/films/6/'], 'created': '2014-12-10T11:52:31.066000Z', 'edited': '2014-12-20T20:58:18.430000Z', 'url': 'https://swapi.dev/api/planets/8/'}]}
Sent URL: https://api.spacexdata.com/v5/launches/?query=upcoming&options=limit&options=sort
Status code: 200

Mission data #0
Success: False
Detail: Engine failure at 33 seconds and loss of vehicle
Article: https://www.space.com/2196-spacex-inaugural-falcon-1-rocket-lost-launch.html

Mission data #1
Success: False
Detail: Successful first stage burn and transition to second stage, maximum altitude 289 km, Premature engine shutdown at T+7 min 30 s, Failed to reach orbit, Failed to recover first stage
Article: https://www.space.com/3590-spacex-falcon-1-rocket-fails-reach-orbit.html

Mission data #2
Success: False
Detail: Residual stage 1 thrust led to collision between stage 1 and stage 2
Article: http://www.spacex.com/news/2013/02/11/falcon-1-flight-3-mission-summary

Mission data #3
Success: True
Detail: Ratsat was carried to orbit on the first successful orbital launch of any privately funded and developed, liquid-propelled carrier rocket, the SpaceX Falcon 1
Article: https://en.wikipedia.org/wiki/Ratsat

Etiquetas relacionadas:
Arriba