# Rest
La clase Rest contiene métodos estáticos que permiten enviar la respuesta al usuario (usualmente en formato json
)
# Métodos disponibles
response
response_custom
response_xml
response_csv
raw_response
# response
El método response espera los siguientes parámetros:
- status_http: El código http que será enviado por el servidor.
- message: El mensaje de respuesta (por defecto
success
) - data: Un
objeto
con la información la respuesta solicitada. - status_code: Un codigo de estado adicional, diferente a codigo de estado http (este campo no es requerido).
- errors: Sí se envía, sobreescribe el json de respuesta, para visualizar errores personalizados (este campo no es requerido).
@api.representation('application/json')
def response(status_http=200, message='success', data=None, status_code=None, errors=None):
...
La salida por defecto es:
{
"status": 200,
"message": "success",
"data": null
}
# Un ejemplo:
from app.ext.rest import Rest, HttpStatus
...
resp = {
"name": app_to_find.name,
"description": app_to_find.description,
"url": app_to_find.url
}
return Rest.response(200, HttpStatus.OK, resp)
salida:
{
"status": 200,
"message": "success",
"data": {
"name": "John Doe",
"description": "user admin",
"url": "https://www.servinformacion.com"
}
}
Si se envia el parámetro errors
, el valor de data
es omitido y enviado como null
# Un ejemplo:
from app.ext.rest import Rest, HttpStatus
...
reason = 'there is no information to update, check if the submitted fields match the original record'
return Rest.response(400, HttpStatus.DEFAULT_ERROR_MESSAGE, errors=reason)
salida:
{
"status": 400,
"message": "An error occurred. Please try again.!",
"data": null,
"error":"there is no information to update, check if the submitted fields match the original record"
}
# response_custom
El método response_custom
espera los siguientes parámetros:
- status_http: El código http que será enviado por el servidor.
- data: Un
objeto
con la información la respuesta solicitada.
@api.representation('application/json')
def response_custom(status_http=200, data=None):
...
La salida por defecto es:
{
"message": "success",
}
# Un ejemplo:
from app.ext.rest import Rest
...
data = {
"status": "Bad Request",
"errors": [314, 16],
"message": "some reason",
"data": None
}
return Rest.response_custom(200, data)
salida:
{
"status": "Bad Request",
"errors": [314, 16],
"message": "some reason",
"data": null
}
# response_xml
Este metodo envía cabeceras 'application/xml' por defecto.
El método response_xml
espera los siguientes parámetros:
- status_http: El código http que será enviado por el servidor.
- data: Un
objeto
con la información la respuesta solicitada.
def response_xml(status_http=200, data=None):
...
La salida por defecto es:
<root></root>
# Un ejemplo:
from app.ext.rest import Rest
...
xml_example = """
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<status>200</status>
<message>success</message>
<data>
<name>John Doe</name>
<description>user admin</description>
<url>https://www.servinformacion.com</url>
</data>
</root>
"""
return Rest.response_xml(200, xml_example)
salida:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<status>200</status>
<message>success</message>
<data>
<name>John Doe</name>
<description>user admin</description>
<url>https://www.servinformacion.com</url>
</data>
</root>
# response_csv
Este metodo envía cabeceras 'application/csv' por defecto.
El método response_csv
espera los siguientes parámetros:
- status_http: El código http que será enviado por el servidor.
- data: Un
objeto
con la información la respuesta solicitada. - filename: El nombre que contendrá el archivo al ser descargado (por defecto
exportCSV.csv
).
def response_csv(status_http=200, data=None, filename='exportCSV'):
...
La salida por defecto es:
<!-- Write your comments here -->
# Un ejemplo:
import StringIO
import csv
from app.ext.rest import Rest, HttpStatus
...
filename = "users"
sIO = StringIO.StringIO()
writer = csv.writer(sIO, delimiter=';', quoting=csv.QUOTE_MINIMAL)
headers = ["name", "description", "url"]
writer.writerow(headers)
try:
for row in data:
writer.writerow([row.name, row.description, row.url])
return Rest.response_csv(200, sIO.getvalue(), filename)
except Exception as e:
print("genCSV Exception:", e)
return Rest.response(400, HttpStatus.UNEXPECTED_ERROR, {'reason': str(e)})
salida:
<!-- users.csv file here -->
# raw_response
Este metodo envía cabeceras 'text/html' por defecto.
El método raw_response
espera los siguientes parámetros:
- status_http: El código http que será enviado por el servidor.
- data: Un
objeto
con la información la respuesta solicitada.
def raw_response(status_http=200, data=None):
...
La salida por defecto es:
<!-- Write your comments here -->
# Un ejemplo:
from app.ext.rest import Rest
...
data = "OK"
return Rest.raw_response(200, data)
salida:
OK
← Introducción Consumer →