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: