¿Qué es la API REST?

Hablando de forma remota, se necesita la API REST para crear un sitio web. Pero después de todo, esto requiere muchas cosas (dices): ¿en qué parte de la API REST?



Frontend y Backend



Empecemos por orden. ¿Qué son frontend y backend? El sitio tiene dos lados: frontal e interior, respectivamente. El primero suele ser responsable de la disposición visual de los objetos en la página (dónde están qué imágenes, dónde está qué texto y dónde están qué botones). El segundo es responsable de las "acciones". Por lo general, se trata de clics en los mismos botones o en otras "cosas" del sitio. Por ejemplo, vas a la página de tu red social favorita y primero necesitas iniciar sesión en tu cuenta. En la parte frontal (interfaz) ingrese su nombre de usuario y contraseña y haga clic en el botón "Iniciar sesión". En este momento, la solicitud se envía a la base de datos para verificar la existencia de dicho usuario y, si tiene éxito, se lo llevará a la red social de su cuenta; de lo contrario, verá un mensaje de error. En este caso, el backend es esencialmente responsable de enviar una solicitud a la base de datos.Por lo general, se divide en tres subpartes:



  1. API web para aceptar solicitudes
  2. Lógica empresarial para procesar solicitudes
  3. Interacción con la base de datos


En este artículo, hablaremos principalmente sobre API o interfaz de programación de aplicaciones y un poco sobre lógica empresarial. Pero primero, creemos un servidor.



Creando tu propio servidor



Así es como se ve la aplicación de servidor Python más simple usando el marco del matraz:



from flask import Flask

app = Flask(__name__)

@app.route("/")

def index():

   return "Hello, World!"

app.run()


Ya hay una ruta vacía (“/”) y si ejecuta esta aplicación y abre el navegador en la página 127.0.0.1 : 5000, verá la inscripción “¡Hola, mundo!”. Desde el lado del servidor, verá el siguiente mensaje:



127.0.0.1 - - [07 / Ago / 2020 20:32:16] "GET / HTTP / 1.1" 200 - Por lo tanto, yendo a este enlace en el navegador (cliente), lo hacemos Una solicitud GET a nuestro servidor y entramos en la función de índice - desde aquí se toma "Hello, World!" Puede agregar otras consultas (mucho más complejas) a lo largo de otras rutas (o no necesariamente). Como dije, en este caso usamos una solicitud GET, la predeterminada estándar. Pero hay muchos otros, los más populares son POST, PUT, DELETE. Pero, ¿por qué es esto necesario?



Crear Leer Actualizar Eliminar



Primero, REST significa Transferencia de Estado REpresentacional (o, de una manera más simple, Transferencia de Estado REpresentacional). De hecho, la definición de REST en sí no es tan importante, pero generalmente se asocia con otro acrónimo: CRUD - Create Read Update Delete. Al principio, di un ejemplo relacionado con una base de datos y estas cuatro operaciones son una parte integral del trabajo con ella (bueno, o solo con datos).



En segundo lugar, una API REST o RESTfull debe admitir el manejo de estas cuatro acciones. Aquí es donde los métodos GET, POST, PUT, DELETE resultan útiles. Como regla (¡no necesariamente!) El método POST se usa para agregar nuevos datos (Crear), GET - para leer (Leer), PUT - para actualizar los datos existentes (Actualizar) y DELETE, respectivamente, para eliminar (Eliminar). Por ejemplo, la misma aplicación de matraz se puede rediseñar así:



from flask import Flask, request

app = Flask(__name__)

@app.route("/", methods=["POST", "GET", "PUT", "DELETE"])

def index():

   if request.method == "POST":

       #   

   if request.method == "GET":

       #  

   if request.method == "PUT":

       #  

   if request.method == "DELETE":

       #  

app.run()


Esta es la API REST primitiva. El lado de la interfaz ahora puede enviar solicitudes y, según su tipo, tomaremos más acciones.



Trabajando con datos



Nuestra aplicación actual no es interesante en absoluto; sería bueno trabajar con algunos datos. Para hacer esto, debe pensar en cómo transferirlos. La forma más popular es el formato JSON (pero puede usar otros, por ejemplo, XML). Es análogo a un diccionario en Python y es muy fácil de usar. Usaré datos primitivos para un ejemplo con autorización en una red social:



data = {

   1: {

       "login": "login1",

       "password": "Qwerty1"},

   2: {

       "login": "login2",

       "password": "Ytrewq2"}

   }


Tenemos un dato en el que hay dos usuarios hasta el momento (login1 e login2) y CRUD esta fecha. Debe decirse que los cuatro métodos rara vez funcionan en la misma ruta y, por lo general, hacen esto: para los métodos GET (devolver todos los usuarios) y POST, la ruta se usa, por ejemplo, "/ usuarios", y para los métodos GET (dar un usuario por su id), PUT y BORRAR “/ users / id”. También debe tenerse en cuenta que para actualizar y crear nuevos usuarios, recibimos datos sobre ellos en el cuerpo de la solicitud (request.json). Ahora nuestro programa se puede reescribir de la siguiente manera:



from flask import Flask, request

app = Flask(__name__)

data = {

   1: {

       "login": "login1",

       "password": "Qwerty1"},

   2: {

       "login": "login2",

       "password": "Ytrewq2"}

   }

@app.route("/users", methods=["POST", "GET"])

def work_with_users():

   if request.method == "POST":

       data[max(data.keys())+1] = request.json

       return {"message": "User was created"}, 201

   if request.method == "GET":

       return data, 200

@app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"])

def work_with_user_by_id(user_id):

   if request.method == "GET":

       return data[user_id], 200

   if request.method == "PUT":

       data[user_id]["login"] = request.json["login"]

       data[user_id]["password"] = request.json["password"]

       return {"message": "User was updated"}, 200

   if request.method == "DELETE":

       data.pop(user_id)

       return {"message": "User was deleted"}, 200

app.run()


Hay muchos programas para probar peticiones (Postman, Fiddler, Insomnia ...) y te recomiendo que te familiarices con alguno de ellos (personalmente, Postman es mi favorito). Con su ayuda, puede ver lo que viene como resultado de la solicitud y con qué código de estado (números 200/201 en return'ah). Y también puede organizar el envío de datos agregándolos al cuerpo de la solicitud.



También vale la pena señalar que este enfoque no se usa actualmente, y que generalmente se usa la biblioteca flask-restplus (o flask-restx, que lo reemplazó), pero creo que primero debe familiarizarse con pure flask. También es necesario comprobar la presencia de datos y su corrección y prever la devolución de un error en los casos opuestos.



Conclusión



Las API REST son simplemente métodos CRUD a los que accede el lado del cliente del sitio a lo largo de ciertas rutas. De oído y de vista, esto puede ser difícil de percibir, así que recomiendo escribir su propio servidor por analogía con el ejemplo. Personalmente, considero que flask es uno de los marcos más fáciles para esto, y si eres un principiante, te aconsejo que lo pruebes.



All Articles