paint-brush
Como arquitetar aceleradores individuais para usuários e tabelas no FastAPIpor@kaizenthecreator
2,190 leituras
2,190 leituras

Como arquitetar aceleradores individuais para usuários e tabelas no FastAPI

por Philip Ireoluwa Okiokio4m2023/02/07
Read on Terminal Reader

Muito longo; Para ler

FastAPI: Arquitetando aceleradores individuais para usuários e tabelas. Aqui está a premissa da minha generalização. Se você leu algum dos meus trabalhos anteriores, saberia que minha origem de back-end é Django (e sua estrutura restante). Sou grato por sua direção e seus padrões de design, eles me permitiram modificar a roda para se adequar ao meu caso de uso.
featured image - Como arquitetar aceleradores individuais para usuários e tabelas no FastAPI
Philip Ireoluwa Okiokio HackerNoon profile picture
0-item


A engenharia de software é mais fácil do que pensamos porque às vezes as respostas são simples e muitas vezes bem diante de nossos olhos.


O FastAPI tem sido fundamental para entender a engenharia de back-end e pensar sobre os processos e como as coisas podem e devem funcionar. É uma ferramenta inteligente, porém depende exclusivamente da sua criatividade e dos olhos da sua imaginação. Aqui está a premissa da minha generalização.


Se você leu algum dos meus trabalhos anteriores, saberia que minha origem de back-end é Django (e sua estrutura restante), e sou grato por sua direção e seus padrões de design, eles me permitiram modificar a roda para se adequar ao meu caso de uso.


Enquanto crescia, meu pai sabia que minha mente se perguntava e eu queria criar coisas e meu pai sempre me disse que você não pode reinventar a roda, modificá-la.


Certa vez, trabalhei em um aplicativo ou endpoint acelerado/limitado por taxa com DRF e foi incrível, aprendi algo novo e fiquei intrigado (no início de minha carreira). O acelerador neste caso afetou os endpoints em que o apliquei, recentemente fiquei interessado em fazer algo semelhante no FastAPI, e primeiro peguei o caminho mais fácil (google for the win) e vi que existem pacotes que executam a ação do acelerador .


Pessoalmente, senti que eles forneceram o mesmo conforto e familiaridade que tive quando usei o Django. Eles não ofereciam a flexibilidade que eu queria (ou talvez eu estivesse com preguiça de fazer algumas substituições), então sentei e arquitetei uma solução. Então, vamos olhar para o código.


Isenção de responsabilidade: não fornecerei informações sobre como começar com o FastAPI e como fazer muito para se atualizar. Presumo que você possa fazer isso, se não puder verificar os melhores recursos para começar com o FastAPI ( , tutorial em documento)

Aplicativo de demonstração: Tranzact algum aplicativo Fintechy (bare bones).

Muitas partes móveis são mantidas por um ponto de entrada do servidor.


Então, vamos criar uma tabela chamada Tranzact que pode ser usada para criar registros de dados Tranzact e uma API-Key seria gerada para poder identificar registros Tranzact distintos.


Esta tabela e aplicativo utilizam o SQLAlchemy, então confira a documentação.


tabela tranzact, ela fica idealmente no arquivo models.py.


Aqui está o roteador.

Roteador API onde moram as rotas para tranzact. Idealmente, reside em seu arquivo router.py.


Podemos executar operações CRUDy no roteador (se o aplicativo parecer estranho, farei outro post sobre o padrão de design aqui chamado padrão de design de repositório).


Este é o endpoint com o qual uma chave de API se comunica, essa chave de API serve como autenticação para executar algumas ações. O que podemos ver é que há uma dependência que aponta para um registro de transação.


uma rota que requer uma chave de API para comunicação.


Vamos examinar a dependência tranzact_header e verificar as chamadas.

uma função que verifica a API-Key enviada como um cabeçalho de solicitação e retorna um único registro tranzact.


Isso reconhece a API_Key e retorna o registro tranzact associado a uma api_key.

Portanto, para resolver o desafio da limitação individualizada, resolvi isso ao criar um registro para a tabela tranzact. Eu crio um registro com o tranzact.id e uma contagem com padrão 0 para a tabela de limite de taxa tranzact. Aqui está a tabela abaixo.



um trecho da tabela Rate Limit e os modelos tranzact.


Portanto, com esta solução, eu precisava de uma maneira de rastrear o registro de limite de taxa, com API_KEY podemos aumentar a contagem incremental com base em cada chamada e acelerar com base na função freemium que o registro tranzact possui. Aqui está a aparência da função.



Assim, com esta função, podemos fazer algum controle de qualidade e verificar com base em um sinalizador e com a contagem. Isso depende da função api_header. Em seguida, trocamos a dependência nos terminais de chamada da API pela função de limite de taxa da API de aceleração. Podemos fazer isso porque ambos retornam o mesmo registro Tranzact. Para entender mais sobre as dependências e suas chamadas com FastAPI veja este ponto da documentação .


Aqui está um caso de teste no meu carteiro.


Configurando a API_KEY para minha coleção no carteiro.

Definindo a chave de API da ideia no carteiro em um nível de coleção.


Abaixo está a resposta limitada para uma chamada de solicitação que atingiu o número limitado, o que significa que outro api_key responderá de forma diferente, dando a resposta desejada, além disso, se o registro tranzact for premium, ele ignorará a verificação do acelerador.


resposta de API limitada para chamadas de API.


Portanto, foi assim que criei um acelerador de registro de banco de dados singular, o estágio final de minha implementação inclui o uso de um trabalho de batida de aipo (um trabalho/tarefa agendado) para reverter toda a contagem de registro de limite de taxa de tranzact para zero na hora. Esta é uma implementação pessoal que outras pessoas podem fazer.


Em conclusão, aceite minhas palavras abaixo com um coração leve, mas é a minha verdade.


Podemos construir qualquer produto/recurso que você possa ver, imaginar ou conceituar, independentemente de sua complexidade, uma vez que podemos vê-lo, o FastAPI pode nos ajudar a dar vida a ele.


Também publicado aqui.