Olá Eduardo, tudo bem com você?
Peço desculpas pela demora em obter um retorno.
Nos tópicos abaixo abordo sobre usuários anônimos e limites de requisição em APIs, incluindo a definição de limites por meio de tokens de acesso e a implementação de limites na classe da API.
Sobre usuários anônimos e consumo da API: O usuário anônimo é aquele que não está autenticado no sistema, ou seja, não fez login, desde que sua API permite acesso não autenticado. Na verdade, é comum que APIs sejam acessíveis por qualquer pessoa, independentemente de estarem autenticados ou não.
Definindo limites de requisição para usuários da API: É possível definir limites para o número de requisições que um cliente pode fazer à sua API. Existem várias abordagens para implementar essa restrição. Uma maneira comum é usar tokens de acesso (API keys) para identificar e rastrear os clientes que estão consumindo sua API. Você pode associar uma quantidade máxima de requisições por período de tempo (por exemplo, 1000 requisições por dia) a cada token de acesso. Dessa forma, você pode controlar o uso da API pelos clientes e impor limites para evitar abusos.
Implementando limites de requisição na classe da API: Na classe BookSellerViewSet
que você compartilhou, você pode implementar a lógica para definir limites de requisição dentro dos métodos da classe. Por exemplo, você pode usar decorators como ratelimit
ou throttle_classes
para definir limites específicos, como número máximo de requisições por período de tempo para cada cliente que consome a API. Esses decorators podem ser aplicados a métodos específicos ou a toda a classe, dependendo dos requisitos do seu projeto. Segue abaixo um exemplo:
from ratelimit.decorators import ratelimit
class BookSellerViewSet(viewsets.ModelViewSet):
"""View BookSellers"""
queryset = BookSeller.objects.all()
serializer_class = ListBookSellerSerializer
filter_backends = [DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter]
ordering_fields = ['name']
search_fields = ['name', 'phone_number']
@ratelimit(key='user', rate='10/h', block=True)
def alugar_livro(self, request):
# Sua lógica de aluguel de livro aqui
Nesse exemplo, a função alugar_livro
só poderá ser chamada 10 vezes por hora para cada usuário, caso contrário, o usuário receberá uma mensagem de erro.
Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!