#!/usr/bin/env python
# coding: utf-8

# # Acceso a información a través de APIs

# In[1]:


import requests


# ### GET

# **Extracción de datos**

# In[23]:


api_url = "https://jsonplaceholder.typicode.com/todos/1"
response = requests.get(api_url)


# In[24]:


response.json()


# In[7]:


response.status_code


# In[8]:


response.headers["Content-Type"]


# ### POST

# **Carga de datos**

# In[19]:


api_url = "https://jsonplaceholder.typicode.com/todos"
todo = {"userId": 1, "title": "Compra leche", "completed": False}
todo


# In[20]:


response = requests.post(api_url, json=todo)


# In[21]:


response.json()


# In[22]:


response.status_code


# Si no utilizamos el argumento de la palabra clave JSON para suministrar los datos JSON, entonces tenemos que establecer el Content-Type correspondiente y serializar el JSON manualmente...

# In[29]:


import requests
import json
api_url = "https://jsonplaceholder.typicode.com/todos"
todo = {"userId": 1, "title": "Compra leche", "completed": False}
headers =  {"Content-Type":"application/json"}
response = requests.post(api_url, data=json.dumps(todo), headers=headers)
print(response.json())
print(response.status_code)


# In[28]:


json.dumps(todo)


# A través de headers, estamos indicando a la API REST que estamos enviando los datos en formato JSON.  El enviar los datos en un formato u otro depende de cómo haya sido configurada la API. headers =  {"Content-Type":"application/json"}

# json.dumps(todo) --> Serializa los datos para su uso junto con headers.  Lo convierte en un string json

# Extraemos la respuesta de la API a través de responde.json().  El código de estado 201, nos indica que el nuevo recurso (dato), se ha creado correctamente.

# ### PATCH

# **Actualización de datos**

# In[32]:


import requests
api_url = "https://jsonplaceholder.typicode.com/todos/10"
todo = {"title": "Mow lawn"}
response = requests.patch(api_url, json=todo)
print(response.json())
print(response.status_code)


# Podemos comprobar si se ha actualizado el dato recién parcheado.  La web jsonplaceholder es una web para hacer pruebas (es de sólo lectura) por lo que las operaciones de escritura, aunque no dan error, no se ejecutan realmente.

# In[35]:


response = requests.get(api_url)
response.json()


# ### DELETE

# **Borrado de datos**

# In[36]:


import requests
api_url = "https://jsonplaceholder.typicode.com/todos/10"
response = requests.delete(api_url)
response.json()


response.status_code


# Se llama a requests.delete() con una URL de la API que contiene el ID de la tarea que se desea eliminar. Ésto envía una solicitud DELETE a la API REST, que elimina el recurso correspondiente. 
# Después de eliminar el recurso, la API devuelve un objeto JSON vacío que indica que el recurso ha sido eliminado.
