Como criar uma API REST em Python usando a biblioteca Flask

Uma API (Application Programming Interface) é uma interface que permite que as aplicações se comuniquem entre si. Uma API RESTful é uma API que segue o estilo arquitetural REST (Representational State Transfer), que é um conjunto de princípios que definem como as aplicações devem se comunicar via HTTP. Neste artigo, vamos ver como criar uma API REST em Python usando a biblioteca Flask.

Pré-requisitos

Antes de começar, é preciso ter o Python instalado no seu sistema e ter conhecimentos básicos de programação em Python. Além disso, vamos usar o Flask para criar a aplicação e Flask-RESTful para criar os recursos da API. Execute o seguinte comando no terminal para instalar as dependências:

pip install flask flask-restful
ShellScript

Criando a aplicação

O primeiro passo é criar um arquivo chamado app.py e importar a biblioteca Flask:

from flask import Flask

app = Flask(__name__)
app.py

Criando um recurso

Para criar um recurso, crie uma classe que herda de flask_restful.Resource. Em seguida, implemente os métodos HTTP necessários (GET, POST, PUT, DELETE, etc.).

No exemplo abaixo, estamos criando um recurso chamado HelloWorld que responde a uma requisição GET com a mensagem “Hello, World!”.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'
app.py

Rodando a aplicação

Por fim, precisamos rodar a aplicação. Para isso, basta adicionar o seguinte código ao final do arquivo:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'
    
if __name__ == '__main__':    app.run(debug=True)
app.py

O parâmetro debug=True ativa o modo de debug, que é útil durante o desenvolvimento. Para rodar a aplicação, basta executar o comando python app.py no terminal.

Testando a API

O código construido define um endpoint para a rota raiz (/) da aplicação Flask. Quando um cliente fizer uma requisição HTTP GET para essa rota, o método hello_world será executado e retornará a mensagem “Hello, World!” como resposta.

Para testar a API, basta salvar o código acima em um arquivo chamado app.py e executá-lo com o comando python app.py no terminal. Em seguida, a API estará disponível em http://localhost:5000 e, ao acessar essa URL em um navegador ou fazer uma requisição HTTP GET com outra ferramenta, como o curl, a mensagem “Hello, World!” será retornada.

Exemplo de API REST em Python com mais recursos

Agora vamos demonstrar um exemplo um pouco mais completo sobre como criar alguns recursos na API REST, como não estamos acessando nenhuma banco de dados vamos configurar uma lista de recursos para que seja possível fazer todas as operações comum de uma API, segue o exemplo:

from flask import Flask, jsonify, request

app = Flask(__name__)

# Dados de exemplo para a API
livros = [
    {'id': 1, 'titulo': 'O Hobbit', 'autor': 'J.R.R. Tolkien'},
    {'id': 2, 'titulo': 'A Guerra dos Tronos', 'autor': 'George R. R. Martin'},
    {'id': 3, 'titulo': 'O Senhor dos Anéis', 'autor': 'J.R.R. Tolkien'}
]

# Endpoint para listar todos os livros
@app.route('/livros', methods=['GET'])
def listar_livros():
    return jsonify(livros)

# Endpoint para obter um livro específico pelo ID
@app.route('/livros/<int:livro_id>', methods=['GET'])
def obter_livro(livro_id):
    livro = [livro for livro in livros if livro['id'] == livro_id]
    if len(livro) == 0:
        return jsonify({'erro': 'Livro não encontrado'}), 404
    return jsonify(livro[0])

# Endpoint para adicionar um novo livro
@app.route('/livros', methods=['POST'])
def adicionar_livro():
    livro = {
        'id': livros[-1]['id'] + 1,
        'titulo': request.json['titulo'],
        'autor': request.json['autor']
    }
    livros.append(livro)
    return jsonify(livro), 201

# Endpoint para atualizar um livro existente pelo ID
@app.route('/livros/<int:livro_id>', methods=['PUT'])
def atualizar_livro(livro_id):
    livro = [livro for livro in livros if livro['id'] == livro_id]
    if len(livro) == 0:
        return jsonify({'erro': 'Livro não encontrado'}), 404
    livro[0]['titulo'] = request.json.get('titulo', livro[0]['titulo'])
    livro[0]['autor'] = request.json.get('autor', livro[0]['autor'])
    return jsonify(livro[0])

# Endpoint para deletar um livro existente pelo ID
@app.route('/livros/<int:livro_id>', methods=['DELETE'])
def deletar_livro(livro_id):
    livro = [livro for livro in livros if livro['id'] == livro_id]
    if len(livro) == 0:
        return jsonify({'erro': 'Livro não encontrado'}), 404
    livros.remove(livro[0])
    return jsonify({'resultado': True})

if __name__ == '__main__':
    app.run(debug=True)
app,py

Este exemplo define uma API REST simples para gerenciar uma lista de livros. Os endpoints disponíveis permitem listar todos os livros, obter um livro específico pelo ID, adicionar um novo livro, atualizar um livro existente e deletar um livro existente.

Para executar este exemplo, salve o código acima em um arquivo chamado app.py e execute o comando python app.py no terminal. Em seguida, a API estará disponível em http://localhost:5000.

Conclusão

Neste artigo, vimos como criar uma API RESTful em Python usando a biblioteca Flask. Criamos um recurso simples que responde a uma requisição GET com a mensagem “Hello, World!”. Agora você pode adicionar mais recursos à sua API e implementar a lógica necessária para atender aos requisitos do seu projeto. A Flask e a Flask-RESTful são ferramentas poderosas e fáceis de usar para criar APIs RESTful em Python.

Links

Mauricio Lima
Mauricio Lima

Bacharel em Ciência da Computação, profissional dedicado ao desenvolvimento de software e entusiasta da tecnologia.

Artigos: 65