# Consumer
El BackEndBase permite utilizar urllib (opens new window) para definir funciones y clases que ayudan a abrir conexiones URL (principalmente HTTP): autenticación básica y resumida, redirecciones, cookies y más.
# modo de uso
La función consumer
espera los siguientes parametros:
uri: La url a donde se enviaran o recibirán los datos.
method: Métodos de petición (opens new window) para indicar la acción que se desea realizar para un recurso determinado.
data: Son los bytes de datos transmitidos en un mensaje de transacción HTTP inmediatamente después de los encabezados, (este campo no es requerido).
custom_headers: Son los parámetros que se envían en una petición o respuesta HTTP (opens new window) al cliente o al servidor para proporcionar información esencial sobre la transacción en curso, (este campo no es requerido).
session: Especifica si se utilizará una Cookie (opens new window) en la transacción, (este campo no es requerido).
use_ssl: Especifica si la transacción deberá ser por https (opens new window), (este campo no es requerido).
options: Actualmente sobreescribe las cabeceras por defecto para el envío de XML (opens new window), (este campo no es requerido).
def consumer(uri=None, method='GET', data=None, custom_headers=None, session=False, use_ssl=False, options=None):
...
El parámetro
custom_headers
por defecto es{'Content-Type': 'application/json'}
y no es necesario enviarlo cuando se trabaja con este tipo de cabeceras. Si desea cambiarlo use el parámetrooptions
.El parámetro
use_ssl
especifica si la transacción deberá ser porhttps
(recomendado), aunque está deshabilitado por defecto (False
). Consulta más información por aquí (opens new window).Para el parseo de XML se utiliza The ElementTree XML API (opens new window).
A tener en cuenta:
- El parámetro
options
sobreescribe las cabeceras por defecto({'Content-Type': 'application/json'}
), por las que se envían en el parámetrocustom_headers
, principalmente para el envío de XML (opens new window)
Se recomienda usar:
headers = {
"Content-Type": "text/xml",
"Accept": "text/xml"
}
en las cabeceras cuando maneje solicitudes en XML.
# utilizando JSON
Ejemplo:
from app.ext.rest import consumer
...
uri = 'https://httpbin.org/post'
data = {
"name": "lilith"
"lastname": "Doe",
}
headers = {
"Authorization": "AwesomeToken"
}
resp = consumer(uri, "POST", data, headers, use_ssl=True)
print("response", resp)
El resultado del ejemplo anterior:
{
"args": {},
"data": "{"name": "lilith", "lastname": "Doe"}",
"files": {},
"form": {},
"headers": {
"Accept-Encoding": "identity",
"Authorization": "AwesomeToken",
"Content-Length": "37",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.7",
"X-Amzn-Trace-Id": "Root=1-5f90504b-5fb7d2e42efd5d7f5db2c308"
},
"json": {
"lastname": "Doe",
"name": "lilith"
},
"origin": "190.251.251.251",
"url": "http://httpbin.org/post"
}
# utilizando XML
Ejemplo:
from app.ext.rest import consumer
import xml.etree.ElementTree as xmlTree
...
uri = 'https://fakerestapi.azurewebsites.net/api/Authors'
headers = {
"Content-Type": "text/xml",
"Accept": "text/xml"
}
data = """
<Author xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/FakeRestAPI.Web.Models">
<FirstName>lilith</FirstName>
<ID>1</ID>
<IDBook>2</IDBook>
<LastName>doe</LastName>
</Author>
"""
resp = consumer(uri, 'POST', data, headers, use_ssl=True, options='xml')
resp_xml = xmlTree.tostring(resp)
# or
# resp_xml = xmlTree.tostring(resp, encoding='ISO-8859-1', method='xml')
print("response", resp_xml)
El resultado del ejemplo anterior:
<Author
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/FakeRestAPI.Web.Models">
<FirstName>lilith</FirstName>
<ID>1</ID>
<IDBook>2</IDBook>
<LastName>doe</LastName>
</Author>
# Más información
Para mas información consulte:
- urllib (opens new window)
- Python SSL library (opens new window)
- The ElementTree XML API (opens new window)
- Introducción a XML (opens new window)
- Fake rest Api XML (opens new window)
- jsoneditoronline (opens new window)
- codebeautify xmlviewer (opens new window)
- La sección de issues (opens new window) del BackEndBase