MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Construindo APIs REST usando EVE


Python é uma das linguagens de programação mais fáceis de ler e escrever de todos os tempos. Ao longo dos anos, a popularidade do Python só aumentou e é amplamente utilizado no desenvolvimento de aplicativos da Web, scripts, criação de jogos, computação científica etc.

Flask é uma estrutura de aplicativo da Web Python que está ganhando popularidade devido à sua facilidade de uso para iniciantes em Python. Neste tutorial, veremos o EVE, um framework de construção de API REST baseado em Flask, MongoDB e Redis. Dos documentos oficiais:
Fornecido por Flask, MongoDB, Redis e boas intenções, o Eve permite sem esforço construir e implantar um serviço Web RESTful altamente personalizável e com todos os recursos.

O que vamos criar


Neste tutorial, veremos como criar APIs REST usando a estrutura EVE. Em seguida, usando o AngularJS, projetaremos o front-end para um aplicativo simples e o tornaremos funcional consumindo as APIs REST criadas usando o EVE. Neste tutorial, implementaremos a seguinte funcionalidade:
  • Criar API do usuário
  • Validar a API do usuário
  • Adicionar API de itens
  • API de exclusão de itens
  • Atualizar API de itens

Primeiros passos

Instalação


Nós estaremos usando pip para instalar o EVE.
pip install eve

Usaremos o MongoDB como banco de dados. Dê uma olhada nos documentos oficiais para instalação de acordo com o seu sistema.

Criando a API básica


Crie uma pasta de projeto chamada PythonAPI . Navegue até PythonAPI e crie um arquivo chamado api.py . Dentro de api.py importar EVE e crie um objeto EVE.
from eve import Eve
app = Eve()

Em seguida, execute app quando o programa é executado como um programa principal.
from eve import Eve
app = Eve()

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

Execute seu MongoDB usando o seguinte comando:
mongod --dbpath= <PATH-TO> /data/db/

Como você pode ver, precisamos especificar um caminho para os arquivos db. Basta criar data/db em seu sistema de arquivos e execute o comando acima.

Junto com uma instância do MongoDB em execução, o EVE requer um arquivo de configuração com informações sobre os recursos da API. Portanto, na PythonAPI pasta crie outro arquivo chamado settings.py e adicione o seguinte código:
DOMAIN = {'user': {}}

O código acima informa ao EVE que um recurso para user está disponível.

Salve todos os arquivos e execute api.py :
python api.py

A API deve estar online conforme mostrado:

Usaremos o Postman REST Client para enviar solicitações às APIs. É gratuito e pode ser instalado com um simples clique. Depois de concluir a instalação, inicie o aplicativo e insira a URL da API (http://127.0.0.1:5000/) e clique em enviar. Você deve ter a resposta como mostrado:

Como não chamamos nenhum recurso de API específico, ele mostrará todos os recursos disponíveis. Agora, tente chamar o user recurso e você deve ter a resposta específica para o user .

Criar e validar a API do usuário

Criar API do usuário


Começaremos construindo uma API para criar ou registrar um usuário para nosso aplicativo. O usuário teria certos campos como First Name , Last Name , Username , Password e Phone Number .

Então, primeiro precisaremos definir um esquema para um usuário. O esquema define os campos e os tipos de dados dos campos-chave. Abra settings.py e modifique o DOMAIN definindo um esquema como mostrado:
DOMAIN = {
    'user': {
        'schema': {
            'firstname': {
                'type': 'string'
            },
            'lastname': {
                'type': 'string'
            },
            'username': {
                'type': 'string',
                 'unique': True
            },
            'password': {
                'type': 'string'
            },
            'phone': {
                'type': 'string'
            }
        }
    }
}

Como você pode ver no código acima, definimos os campos-chave necessários para criar um usuário e seu tipo de dados definido no esquema. Salve as alterações e execute api.py . No Postman Client, tente fazer uma solicitação POST junto com os parâmetros necessários para http://127.0.0.1/user conforme mostrado:

Na solicitação POST para o usuário, ele lançou um 405 Method Not Allowed erro. Por padrão, o EVE aceita apenas solicitações GET. Se quisermos usar qualquer outro método, precisamos defini-lo explicitamente. Abra settings.py e defina os métodos de recursos como mostrado:
RESOURCE_METHODS = ['GET', 'POST']

Salve as alterações e execute api.py . Agora tente novamente POST to user e você deve ter a resposta abaixo:

Como você pode ver, a solicitação POST acima foi bem-sucedida. Não definimos as configurações do banco de dados em nosso settings.py , então o EVE concluiu a solicitação usando a instância em execução do MongoDB . Vamos fazer login no MongoDB shell e veja o registro recém-criado. Com a instância do MongoDB em execução, acione o shell do mongo:
mongo

Uma vez dentro do mongo shell, liste todos os bancos de dados disponíveis.
show databases;

Deve haver uma eve base de dados. Mudar para a eve base de dados.
use eve;

Execute o show comando para listar as tabelas dentro do eve base de dados.
show tables;

As tabelas listadas devem ter uma tabela chamada user . Liste os registros do user tabela usando o seguinte comando:
db.user.find()

Aqui estão os registros selecionados das tabelas de usuários:

Validar a API do usuário


Em seguida, criaremos uma API para validar um usuário existente. Normalmente, se fizermos um get request para o endpoint do usuário (http://127.0.0.1:5000/user), ele fornecerá detalhes de todos os usuários registrados do banco de dados. Precisamos implementar duas coisas aqui. Primeiro, precisamos autenticar um usuário usando o nome e a senha e, em segundo lugar, precisamos retornar os detalhes do usuário do banco de dados na autenticação bem-sucedida.

Para obter detalhes com base no primeiro nome, precisamos adicionar um campo de pesquisa adicional no DOMAIN em settings.py .
'additional_lookup': {
            'url': 'regex("[\w]+")',
            'field': 'username',
            }

Como visto no código acima, adicionamos um campo de pesquisa para username . Agora, quando uma solicitação GET é enviada para o http://127.0.0.1:5000/user/ <username> ele retornará os detalhes do usuário com o username específico . Ao fazer uma solicitação a um usuário específico, também enviaremos o username e password para autenticação.

Faremos uma autenticação básica para verificar um usuário específico com base no nome de usuário e na senha. Primeiro, precisamos importar o Basic Auth aula de EVA. Crie uma classe chamada Authenticate para implementar a autenticação conforme mostrado:
from eve.auth import BasicAuth

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

Agora, quando o recurso for user e o método de solicitação é GET , autenticaremos o usuário. Na autenticação bem-sucedida, os detalhes do usuário com nome no endpoint da API serão retornados. Também restringiremos a criação de usuários fornecendo um nome de usuário e uma senha. Portanto, se o método for POST e o endpoint da API for usuário, verificaremos e validaremos o nome de usuário e a senha. Então, aqui está o Authenticate completo aula:
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

Precisamos passar o Authenticate nome da classe ao iniciar a API. Portanto, modifique o código de inicialização da API conforme mostrado:
if __name__ == '__main__':
    app = Eve(auth=Authenticate)
    app.run()

Salve todas as alterações e execute o api.py . Tente enviar uma solicitação de autenticação básica com um nome de usuário e senha do Postman para http://127.0.0.1/user/username (substitua o nome de usuário por qualquer outro nome de usuário existente). Na autenticação bem-sucedida, você deve obter os detalhes do usuário em resposta, conforme mostrado:

Adicionar, excluir e atualizar itens 

Adicionar API de item


Para criar uma API Add item, tudo o que precisamos fazer é criar um novo esquema para o item em settings.py .
'item': {
        'schema': {
            'name':{
                'type': 'string'
                },
            'username': {
                'type': 'string'
                }
            }
        }

A API Add Item ajudaria cada usuário conectado a adicionar um item. Salvaremos o item junto com o nome de usuário do usuário que inseriu o item. Salve as alterações e tente fazer uma solicitação POST para http://127.0.0.1/item, conforme mostrado:


Excluir API de item


Para excluir um item criado por um usuário, tudo o que precisamos fazer é chamar o ponto de extremidade do item /item_id . Mas simplesmente chamar uma solicitação DELETE não excluirá o item. Para excluir um item, também precisamos fornecer um _etag relacionados a um determinado item. Uma vez item id e _etag correspondência, o item é excluído do banco de dados. Aqui está como o método DELETE é chamado no ponto de extremidade do item.

Atualizar API de itens


A API de atualização é semelhante à API de exclusão. Tudo o que precisamos fazer é enviar uma solicitação PATCH com o item id e _etag e os campos do formulário que precisam ser atualizados. Veja como os detalhes do item são atualizados: