Aprenda a criar uma API RESTful usando Flask e Postgres, permitindo a troca de dados perfeita entre seu aplicativo e sistemas externos.

As interfaces de programação de aplicativos (APIs) são uma parte crítica da criação e conexão de diferentes sistemas, permitindo que seus aplicativos se comuniquem e troquem dados com outros serviços.

Embora o desenvolvimento de back-end envolva mais do que apenas escrever APIs - ele também abrange escrever lógica de negócios do lado do servidor, projetar sistemas eficientes arquiteturas e outras funções importantes, continue lendo para aprender como criar uma API CRUD REST simples com Flask (uma estrutura Python leve) e Postgres base de dados.

Usando o Flask para criar APIs de back-end

Frasco é um peso leve estrutura Python que fornece vários recursos para simplificar a criação de APIs de back-end para clientes da Web escritos usando diferentes tecnologias, como React e Angular.

Você pode encontrar o código-fonte deste projeto neste Repositório GitHub.

Este guia irá guiá-lo através da escrita de um

API REST que implementa as quatro operações CRUD: crie, leia, atualize e exclua para gerenciar os dados do usuário armazenados em um banco de dados Postgres.

Configurar um banco de dados Postgres

Para começar, acesse ElefanteSQL, uma solução de hospedagem de banco de dados baseada em nuvem que fornece uma plataforma para criar e gerenciar bancos de dados Postgres na nuvem, inscreva-se e faça login na página de visão geral da sua conta.

Clique no Criar nova instância botão para criar uma nova instância para seu aplicativo.

Forneça o nome de sua instância e selecione o plano gratuito e, por fim, selecione a região onde a instância será hospedada para finalizar o processo de configuração.

Depois que a instância for criada, navegue até a página de configurações e copie o URL do banco de dados, você o usará para estabelecer uma conexão com o banco de dados.

Configurar um servidor Flask

No seu terminal, crie uma pasta de projeto e altere o diretório atual para essa nova pasta.

Antes de instalar o Flask, confirme se você está executando o Python versão 3.6+ em sua máquina. Se não, você precisa instalar a versão mais recente Pitão versão.

python --versão

Depois, instale virtualenv, para criar um ambiente de desenvolvimento virtual isolado.

pip instalar virtualenv

Em seguida, execute o comando abaixo para criar um ambiente virtual.

virtualenv venv

Por fim, ative o ambiente virtual.

# No Windows: 
.\venv\Scripts\ativar
# No Unix ou MacOS:
fonte venv/bin/ativar

Instale os pacotes necessários

No diretório raiz da pasta do seu projeto, crie um requisitos.txt arquivo e adicione esses pacotes.

frasco
python-dotenv
psycopg2-binary

Em seguida, instale os pacotes.

pip install -r requisitos.txt

O psycopg2-binary é uma biblioteca Python que atua como um middleware, para permitir que você estabeleça conexões com seu banco de dados Postgres e execute várias operações de banco de dados.

Por último, crie um .env arquivo e cole o URL do banco de dados.

DATABASE_URL= URL do seu banco de dados

Criar o Servidor Flask

Por fim, crie um app.py arquivo no diretório raiz e adicione o código abaixo.

importar os 
importar psicopg2
de dotenv importar load_dotenv
de frasco importar Frasco, solicitação, jsonify

load_dotenv()

app = Frasco (__name__)
url = os.getenv("DATABASE_URL")
conexão = psycopg2.connect (url)

@app.get("/")
deflar():
retornar"Olá Mundo"

Esse código configura uma instância do aplicativo Flask. Em seguida, ele cria uma conexão com o banco de dados especificado na string da URL e, por último, configura uma rota inicial que retorna uma string como resposta.

Crie a API REST Habilitando Operações CRUD

Agora, crie a API REST que implementa as quatro operações CRUD.

Crie uma tabela de demonstração

Crie uma tabela de usuários no banco de dados.

No arquivo app.py, adicione o código abaixo.

CREATE_USERS_TABLE = "CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, nome TEXT);"

com conexão:
com conexão.cursor() como cursor:
cursor.execute (CREATE_USERS_TABLE)

  • Este código cria uma nova tabela PostgreSQL chamada Usuários com duas colunas.
  • Ele usa o método de conexão psycopg2 para estabelecer a conexão com o banco de dados e cria um novo objeto de cursor usando o conexão.cursor método que é usado para executar consultas SQL.

1. Definir o método POST

Crie a rota de postagem para adicionar dados.

INSERT_USER_RETURN_ID = "INSERT INTO users (name) VALUES (%s) RETURNING id;"
@app.route("/api/user", method=["POST"])
defcriar_usuário():
dados = request.get_json()
nome = dados["nome"]
com conexão:
com conexão.cursor() como cursor:
cursor.execute (INSERT_USER_RETURN_ID, (nome,))
user_id = cursor.fetchone()[0]
retornar {"eu ia": ID do usuário, "nome": nome, "mensagem": f"Usuário {nome} criada."}, 201
  • A string de consulta SQL define uma instrução SQL que será executada usando o cursor.execute método para inserir uma nova linha com o nome de um usuário no Usuários' tabela no banco de dados. Ele retorna o ID do usuário recém-criado.
  • O criar_usuário função recebe um nome como parâmetro para armazenar no banco de dados enquanto o cursor.fetchone O método é chamado para recuperar o ID do usuário recém-criado. Por fim, é retornado um dicionário contendo o ID e o nome do usuário recém-criado, juntamente com uma mensagem indicando que o usuário foi criado com sucesso.

2. Definir o método GET

Defina duas rotas de obtenção: uma, para recuperar todos os dados no banco de dados e duas, para recuperar dados específicos do banco de dados com base no ID.

SELECT_ALL_USERS = "SELECIONE * DE usuários;"

@app.route("/api/user", method=["GET"])
defget_all_users():
com conexão:
com conexão.cursor() como cursor:
cursor.execute (SELECT_ALL_USERS)
usuários = cursor.fetchall()
se Usuários:
resultado = []
para do utilizador em Usuários:
result.append({"eu ia": do utilizador[0], "nome": do utilizador[1]})
retornar jsonify (resultado)
outro:
retornar jsonify({"erro": f"Usuários não encontrados."}), 404

@app.route("/api/user/", métodos=["GET"])
defget_user(ID do usuário):
com conexão:
com conexão.cursor() como cursor:
cursor.execute("SELECT * FROM users WHERE id = %s", (ID do usuário,))
usuário = cursor.fetchone()
se do utilizador:
retornar jsonify({"eu ia": do utilizador[0], "nome": do utilizador[1]})
outro:
retornar jsonify({"erro": f"Usuário com ID {ID do usuário} não encontrado."}), 404

  • Essa primeira rota de API lida com solicitações HTTP GET para recuperar todos os usuários do banco de dados. Ele recupera todos os usuários do banco de dados e retorna os resultados em um formato JSON na resposta.
  • Essa segunda rota de API lida com solicitações HTTP GET para recuperar dados de um usuário específico do banco de dados. leva no ID do usuário como parâmetro, recupera os dados do usuário do banco de dados e retorna os resultados em um formato JSON na resposta.

3. Defina o método PUT

Crie a rota put para atualizar os dados armazenados no banco de dados.

@app.route("/api/user/", métodos=["COLOCAR"])
defupdate_user(ID do usuário):
dados = request.get_json()
nome = dados["nome"]
com conexão:
com conexão.cursor() como cursor:
cursor.execute (UPDATE_USER_BY_ID, (nome, user_id))
se cursor.rowcount == 0:
retornar jsonify({"erro": f"Usuário com ID {ID do usuário} não encontrado."}), 404
retornar jsonify({"eu ia": ID do usuário, "nome": nome, "mensagem": f"Usuário com ID {ID do usuário} Atualizada."})
  • O update_user A função usa o parâmetro de ID do usuário como entrada e o usa para atualizar o nome do usuário especificado no banco de dados.
  • Se a operação de atualização for bem-sucedida, ela retornará um objeto JSON com o ID do usuário atualizado, nome e uma mensagem de sucesso na resposta.

4. Definir o método DELETE

Implemente a rota de exclusão para excluir os dados armazenados de um usuário específico no banco de dados.

@app.route("/api/user/", métodos=["EXCLUIR"])
defdeletar usuário(ID do usuário):
com conexão:
com conexão.cursor() como cursor:
cursor.execute (DELETE_USER_BY_ID, (user_id,))
se cursor.rowcount == 0:
retornar jsonify({"erro": f"Usuário com ID {ID do usuário} não encontrado."}), 404
retornar jsonify({"mensagem": f"Usuário com ID {ID do usuário} deletado."})
  • Essa rota de API manipula a funcionalidade de exclusão de um usuário específico do banco de dados com base em seu ID. Se o usuário não for encontrado, ele retornará um código de status 404 com uma mensagem de erro. No entanto, se a operação de exclusão for bem-sucedida, ela retornará um objeto JSON com uma mensagem de sucesso na resposta.

Escrevendo APIs REST com Flask

Este guia demonstra como usar o Flask e o Postgres para construir uma API CRUD REST simples ao lado, como para estabelecer uma conexão de banco de dados e executar diferentes consultas SQL para ler e gravar dados em um base de dados. Agora você pode criar uma API REST simples que pode lidar com as quatro operações CRUD necessárias em qualquer aplicativo da web.

Esteja você criando um blog simples ou um aplicativo da Web complexo, o Flask e o Postgres oferecem recursos e recursos poderosos necessários para criar um sistema de back-end robusto. Alternativamente, você pode usar outras tecnologias como FastAPI e MongoDB para construir APIs RESTful.