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)
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.
Aqui está o roteador.
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.
Vamos examinar a dependência tranzact_header e verificar as chamadas.
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.
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 .
Configurando a API_KEY para minha coleção no carteiro.
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.
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.