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 (https://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 https://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 (https://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 https://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 https://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 https://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: