Frontend e Backend
Vamos começar em ordem. O que são front-end e back-end? O site possui duas faces: frontal e interna, respectivamente. O primeiro geralmente é responsável pelo arranjo visual dos objetos na página (onde estão quais imagens, onde estão quais textos e quais botões). O segundo é responsável pelas “ações”. Normalmente, são cliques nos mesmos botões ou em outras “coisas” do site. Por exemplo, você vai para a página de sua rede social favorita e primeiro precisa fazer login em sua conta. Na parte frontal (frontend) você insere seu nome de usuário e senha e clica no botão "Login". Neste momento, a solicitação é enviada ao banco de dados para verificar a presença de tal usuário e, em caso de sucesso, você será encaminhado para a rede social da sua conta, caso contrário, verá uma mensagem de erro. Nesse caso, o back-end é essencialmente responsável por enviar uma solicitação ao banco de dados.Geralmente é dividido em três sub-partes:
- API da Web para aceitar solicitações
- Lógica de negócios para processar solicitações
- Interação com o banco de dados
Neste artigo, falaremos principalmente sobre API ou Interface de Programação de Aplicativos e um pouco sobre lógica de negócios. Mas primeiro, vamos criar um servidor.
Criando seu próprio servidor
É assim que se parece o aplicativo de servidor Python mais simples usando a estrutura flask:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, World!"
app.run()
Já existe uma rota vazia (“/”) e se você executar este aplicativo e abrir o navegador na página 127.0.0.1 : 5000, verá a inscrição “Hello, World!”. Do lado do servidor, você verá a seguinte mensagem:
127.0.0.1 - - [07 / Ago / 2020 20:32:16] "GET / HTTP / 1.1" 200 - Assim, ao acessar este link no navegador (cliente), fazemos Uma solicitação GET para o nosso servidor e entramos na função de índice - a partir daqui, “Hello, World!” É obtido. Você pode adicionar outras consultas (muito mais complexas) ao longo de outras rotas (ou não necessariamente). Como eu disse, neste caso usamos uma solicitação GET - o padrão padrão. Mas há muitos outros, os mais populares são POST, PUT, DELETE. Mas por que isso é necessário?
Criar Ler Atualizar Excluir
Primeiro, REST significa Transferência de Estado Representacional (ou, de uma forma mais simples, Transferência de Estado Representacional). Na verdade, a definição de REST em si não é tão importante, mas geralmente está associada a outra sigla - CRUD - Create Read Update Delete. No início, dei um exemplo relacionado a um banco de dados e essas quatro operações são parte integrante do trabalho com ele (bem, ou apenas com dados).
Em segundo lugar, uma API REST ou RESTfull deve suportar o manuseio dessas quatro ações. É aqui que os métodos GET, POST, PUT, DELETE são úteis. Como regra (não necessariamente!) O método POST é usado para adicionar novos dados (Criar), GET - para ler (Ler), PUT - para atualizar os dados existentes (Atualizar) e DELETE, respectivamente, para excluir (Excluir). Por exemplo, o mesmo aplicativo de frasco pode ser redesenhado assim:
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["POST", "GET", "PUT", "DELETE"])
def index():
if request.method == "POST":
#
if request.method == "GET":
#
if request.method == "PUT":
#
if request.method == "DELETE":
#
app.run()
Esta é a API REST primitiva. O frontend agora pode enviar solicitações e, dependendo do tipo, tomaremos outras providências.
Trabalhando com dados
Nosso aplicativo atual não é nada interessante - seria bom trabalhar com alguns dados. Para fazer isso, você precisa pensar em como transferi-los. A forma mais popular é o formato JSON (mas você pode usar outros, por exemplo, XML). É análogo a um dicionário em python e é muito fácil de usar. Usarei dados primitivos como exemplo com autorização em uma rede social:
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
Temos um dado em que há dois usuários até o momento (login1 e login2) e faremos CRUD nesta data. Deve-se dizer que todos os quatro métodos raramente funcionam na mesma rota e geralmente fazem isso: para os métodos GET (retornar todos os usuários) e POST, a rota é usada, por exemplo, “/ usuários”, e para os métodos GET (distribuir um usuário por seu id), PUT e DELETE “/ users / id”. Também deve ser destacado que para atualizar e criar novos usuários, recebemos dados sobre eles no corpo da solicitação (request.json). Agora nosso programa pode ser reescrito da seguinte forma:
from flask import Flask, request
app = Flask(__name__)
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
@app.route("/users", methods=["POST", "GET"])
def work_with_users():
if request.method == "POST":
data[max(data.keys())+1] = request.json
return {"message": "User was created"}, 201
if request.method == "GET":
return data, 200
@app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"])
def work_with_user_by_id(user_id):
if request.method == "GET":
return data[user_id], 200
if request.method == "PUT":
data[user_id]["login"] = request.json["login"]
data[user_id]["password"] = request.json["password"]
return {"message": "User was updated"}, 200
if request.method == "DELETE":
data.pop(user_id)
return {"message": "User was deleted"}, 200
app.run()
Existem muitos programas para solicitações de teste (Postman, Fiddler, Insomnia ...) e eu recomendo que você se familiarize com um deles (pessoalmente, Postman é o meu favorito). Com a ajuda deles, você pode ver o que vem como resultado da solicitação e com qual código de status (números 200/201 em return'ah). E você também pode preparar o envio de dados adicionando-os ao corpo da solicitação.
Também é importante notar que esta abordagem não é usada atualmente, e a biblioteca flask-restplus (ou o flask-restx que a substituiu) é geralmente usada, mas acho que primeiro você precisa se familiarizar com o frasco puro. Também é necessário verificar a disponibilidade dos dados e sua exatidão e prever o retorno de um erro nos casos opostos.
Conclusão
APIs REST são simplesmente métodos CRUD que são acessados pelo lado do cliente do site ao longo de certas rotas. De ouvido e de relance, isso pode ser difícil de perceber, então eu recomendo escrever seu próprio servidor por analogia com o exemplo. Pessoalmente, acho o flask um dos frameworks mais fáceis para isso, e se você é um iniciante, eu o aconselho a experimentá-lo.