1
resposta

Usuário anônimo - É um cliente por exemplo?

Boa noite.

O Professor comenta sobre o usuário anônimo, ele pode ser um cliente que vá consumir a nossa API?

Por exemplo, durante o curso eu criei uma API pra locação de livros da minha biblioteca particular, vou estar compartilhando com amigos para ver se vai dar certo um projeto que estou propondo!

No caso, o cliente que vai consumir a minha API eu seto quantas requisições de "alugar" ele pode fazer??

É isso?

Ou eu posso definir através de uma def dentro da classe que eu criei por exemplo?

class BookSeller(models.Model):
    name = models.CharField(max_length=50, unique=True)
    address = models.CharField(max_length=50, )
    phone_number = models.CharField(max_length=14)
    email = models.EmailField(blank=False, max_length=30)

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']

Atenciosamente.

1 resposta

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!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software