sql >> Base de Datos >  >> NoSQL >> MongoDB

Creación de API REST con EVE

Python es uno de los lenguajes de programación más fáciles de leer y escribir de todos los tiempos. A lo largo de los años, la popularidad de Python no ha hecho más que aumentar y se utiliza ampliamente en el desarrollo de aplicaciones web, secuencias de comandos, creación de juegos, computación científica, etc.

Flask es un marco de aplicación web de Python que está ganando popularidad debido a su facilidad de uso para los principiantes de Python. En este tutorial, veremos EVE, un marco de trabajo de creación de API REST basado en Flask, MongoDB y Redis. De los documentos oficiales:

Con la tecnología de Flask, MongoDB, Redis y las buenas intenciones, Eve permite crear e implementar sin esfuerzo un servicio web RESTful altamente personalizable y con todas las funciones.

Lo que crearemos

En este tutorial, veremos cómo crear API REST utilizando el marco EVE. Luego, usando AngularJS, diseñaremos el front-end para una aplicación simple y la haremos funcional al consumir las API REST creadas con EVE. En este tutorial, implementaremos la siguiente funcionalidad:

  • Crear API de usuario
  • Validar API de usuario
  • API para agregar elementos
  • API para eliminar elementos
  • Actualizar la API de elementos

Cómo empezar

Instalación

Usaremos pip para instalar EVE.

pip install eve

Usaremos MongoDB como base de datos. Eche un vistazo a los documentos oficiales para la instalación según su sistema.

Creación de la API básica

Cree una carpeta de proyecto llamada PythonAPI . Navegue a PythonAPI y crea un archivo llamado api.py . Dentro de api.py importar EVE y crea un objeto EVE.

from eve import Eve
app = Eve()

A continuación, ejecute app cuando el programa se ejecuta como programa principal.

from eve import Eve
app = Eve()

if __name__ == '__main__':
    app.run()

Ejecute su MongoDB usando el siguiente comando:

mongod --dbpath= <PATH-TO> /data/db/

Como puede ver, necesitamos especificar una ruta para los archivos db. Simplemente cree data/db en su sistema de archivos y ejecute el comando anterior.

Junto con una instancia de MongoDB ejecutándose, EVE requiere un archivo de configuración con información sobre los recursos de la API. Entonces, en PythonAPI carpeta crea otro archivo llamado settings.py y agrega el siguiente código:

DOMAIN = {'user': {}}

El código anterior informa a EVE que un recurso para user está disponible.

Guarde todos los archivos y ejecute api.py :

python api.py

La API debe estar en línea como se muestra:

Usaremos Postman REST Client para enviar solicitudes a las API. Es gratis y se puede instalar con un simple clic. Una vez que haya terminado con la instalación, inicie la aplicación e ingrese la URL de la API (http://127.0.0.1:5000/) y haga clic en enviar. Debería tener la respuesta como se muestra:

Como no hemos llamado a ningún recurso API específico, mostrará todos los recursos disponibles. Ahora, intente llamar al user recurso y debe tener la respuesta específica para el user .

Crear y validar API de usuario

Crear API de usuario

Comenzaremos construyendo una API para crear o registrar un usuario para nuestra aplicación. El usuario tendría ciertos campos como First Name , Last Name , Username , Password y Phone Number .

Entonces, primero necesitaremos definir un esquema para un usuario. El esquema define los campos y los tipos de datos de los campos clave. Abre settings.py y modificar el DOMAIN definiendo un esquema como se muestra:

DOMAIN = {
    'user': {
        'schema': {
            'firstname': {
                'type': 'string'
            },
            'lastname': {
                'type': 'string'
            },
            'username': {
                'type': 'string',
                 'unique': True
            },
            'password': {
                'type': 'string'
            },
            'phone': {
                'type': 'string'
            }
        }
    }
}

Como puede ver en el código anterior, hemos definido los campos clave que se necesitan para crear un usuario y su tipo de datos definido en el esquema. Guarde los cambios y ejecute api.py . Desde Postman Client, intente realizar una solicitud POST junto con los parámetros necesarios a http://127.0.0.1/user como se muestra:

En la solicitud POST al usuario, arrojó un 405 Method Not Allowed error. Por defecto, EVE solo acepta solicitudes GET. Si queremos usar cualquier otro método, debemos definirlo explícitamente. Abra settings.py y defina los métodos de recursos como se muestra:

RESOURCE_METHODS = ['GET', 'POST']

Guarde los cambios y ejecute api.py . Ahora intenta de nuevo POST al usuario y debería tener la siguiente respuesta:

Como puede ver, la solicitud POST anterior fue exitosa. No hemos definido las configuraciones de la base de datos en nuestro settings.py , por lo que EVE completó la solicitud utilizando la instancia en ejecución de MongoDB . Iniciemos sesión en MongoDB shell y ver el registro recién creado. Con la instancia de MongoDB ejecutándose, active el shell de mongo:

mongo

Una vez dentro del mongo shell, enumere todas las bases de datos disponibles.

show databases;

Debe haber una eve base de datos. Cambiar a la eve base de datos.

use eve;

Ejecutar el show comando para enumerar las tablas dentro de eve base de datos.

show tables;

Las tablas enumeradas deben tener una tabla llamada user . Muestra los registros del user tabla usando el siguiente comando:

db.user.find()

Aquí están los registros seleccionados de las tablas de usuarios:

Validar API de usuario

A continuación, crearemos una API para validar un usuario existente. Normalmente, si hacemos un get solicitud al punto final del usuario (http://127.0.0.1:5000/user), proporcionará detalles de todos los usuarios registrados de la base de datos. Necesitamos implementar dos cosas aquí. Primero, necesitamos autenticar a un usuario usando su nombre y contraseña, y segundo, debemos devolver los detalles del usuario de la base de datos en una autenticación exitosa.

Para obtener detalles basados ​​en el primer nombre, debemos agregar un campo de búsqueda adicional en el DOMAIN en settings.py .

'additional_lookup': {
            'url': 'regex("[\w]+")',
            'field': 'username',
            }

Como se ve en el código anterior, hemos agregado un campo de búsqueda para username . Ahora, cuando se envía una solicitud GET a http://127.0.0.1:5000/user/ <username> devolverá los detalles del usuario con el username particular . Al realizar una solicitud a un usuario en particular, también enviaremos el username y password para la autenticación.

Haremos una autenticación básica para verificar un usuario en particular según el nombre de usuario y la contraseña. Primero, necesitamos importar el Basic Auth clase de EVE. Crea una clase llamada Authenticate para implementar la autenticación como se muestra:

from eve.auth import BasicAuth

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
                   

Ahora, cuando el recurso es user y el método de solicitud es GET , autenticaremos al usuario. En una autenticación exitosa, se devolverán los detalles de usuario del usuario con nombre en el punto final de la API. También restringiremos la creación de usuarios proporcionando un nombre de usuario y una contraseña. Entonces, si el método es POST y el punto final de la API es el usuario, verificaremos y validaremos el nombre de usuario y la contraseña. Entonces, aquí está el Authenticate completo clase:

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
        if resource == 'user' and method == 'GET':
            user = app.data.driver.db['user']
            user = user.find_one({'username': username,'password':password})
            if user:
                return True
            else:
                return False
        elif resource == 'user' and method == 'POST':
            return username == 'admin' and password == 'admin'
        else:
            return True

Necesitamos pasar el Authenticate nombre de clase al iniciar la API. Así que modifique el código de inicio de la API como se muestra:

if __name__ == '__main__':
    app = Eve(auth=Authenticate)
    app.run()

Guarde todos los cambios y ejecute api.py . Intente enviar una solicitud de autenticación básica con un nombre de usuario y una contraseña de Postman a http://127.0.0.1/user/username (reemplace el nombre de usuario con cualquier otro nombre de usuario existente). En una autenticación exitosa, debe obtener los detalles del usuario en respuesta como se muestra:

Añadir, eliminar y actualizar elementos 

API para agregar elementos

Para crear una API Agregar elemento, todo lo que tenemos que hacer es crear un nuevo esquema para el elemento en settings.py .

'item': {
        'schema': {
            'name':{
                'type': 'string'
                },
            'username': {
                'type': 'string'
                }
            }
        }

La API Agregar elemento ayudaría a cada usuario registrado a agregar un elemento. Guardaremos el elemento junto con el nombre de usuario del usuario que ingresó el elemento. Guarde los cambios e intente realizar una solicitud POST a http://127.0.0.1/item como se muestra:

Eliminar API de elemento

Para eliminar un elemento creado por un usuario, todo lo que tenemos que hacer es llamar al punto final del elemento /item_id . Pero simplemente llamar a una solicitud DELETE no eliminará el elemento. Para eliminar un elemento, también debemos proporcionar un _etag relacionado con un elemento en particular. Una vez item id y _etag coinciden, el elemento se elimina de la base de datos. Así es como se llama al método DELETE en el punto final del elemento.

Actualizar API de elementos

La API de actualización es similar a la API de eliminación. Todo lo que tenemos que hacer es enviar una solicitud PATCH con el item id y _etag y los campos del formulario que necesitan ser actualizados. Así es como se actualizan los detalles del artículo: