John Cardozo
Rest API
Request - Response
Servidor
Cliente
request - response
Arquitectura que define las restricciones en el uso de servicios web
REST
REpresentational State Transfer
API
Application Programming Interface
Conjunto de operaciones que definen la interacción entre varios sistemas
cómo se van a conectar?
Qué se puede utilizar?
cliente
servidor
http
request
response
resource
www.miempresa.com
/usuarios
request
http://www.miempresa.com/usuarios
http
protocolo
www.miempresa.com
servidor
/usuarios
recurso
response
{
"usuarios": [
{ "nombres": "john", "apellidos": "lennon", "edad": 30 },
{ "nombres": "paul", "apellidos": "mccartney", "edad": 31 },
{ "nombres": "george", "apellidos": "harrison", "edad": 30 },
{ "nombres": "ringo", "apellidos": "star", "edad": 33 },
]
}
flask
Instalación de Flask
pip install flask
* usualmente en un ambiente virtual
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Servidor en funcionamiento'
@app.route('/hola')
def hola():
return 'Hola desde el servidor'
Código fuente: servidor.py
resources
set FLASK_ENV="development"
set FLASK_APP="server.py"
Variables de entorno
export FLASK_ENV=development
export FLASK_APP=server.py
flask run
Ejecución
flask run --host=0.0.0.0
Ejecución recibiendo peticiones externas
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/usuarios')
def usuarios():
data = {
"usuarios": [
{'id': 1, 'name': 'john'},
{'id': 2, 'name': 'paul'},
{'id': 3, 'name': 'george'},
{'id': 4, 'name': 'ringo'}
]
}
return jsonify(data)
requests
Instalación de Requests
pip install requests
* usualmente en un ambiente virtual
# Libreria
import requests
# Peticion
url = 'http://servidor:5000/recurso'
respuesta = requests.get(url)
# Obtener datos json
datos = respuesta.json()
Código fuente: cliente.py
python cliente.py
Ejecución desde consola
import requests
# Petición a /usuarios
respuesta = requests.get('http://localhost:5000/usuarios')
# Imprimir datos de la respuesta
print(type(respuesta))
print(respuesta)
print(respuesta.headers)
print(respuesta.text)
print(respuesta.json())
# Convertir la respuesta a JSON
datos = respuesta.json()
# Imprime los datos recibidos
for usuario in datos['usuarios']:
print(f"ID={usuario['id']}\tNAME={usuario['name']}")
@app.route('/longitud/', methods=['POST'])
def longitud_cadena():
# Obtiene el valor enviado por el cliente
cadena = request.values['cadena']
# Calcula la longitud de la cadena
longitud = len(cadena)
# Retorna la longitud
return {'longitud': longitud}
# Hace la petición al servidor
respuesta = requests.post(
'http://localhost:5000/longitud/',
data = {'cadena': 'universidad'}
)
# Imprime la respuesta del servidor
print(respuesta.text)
Cliente
Servidor
johncardozo@gmail.com