maneira mais rápida para rastrear acesso à API

votos
0

Estou criando uma API para meu aplicativo Rails, e eu quero controlar quantas vezes um usuário chama um método API particular, e tampe-os dizer em como 1.000 solicitações por dia. Estou esperando volumes muito elevados pedido em múltiplos usuários.

Você tem uma sugestão de como eu pode manter controle de algo parecido por usuário? Eu quero evitar ter que escrever para o banco de dados repetidamente e lidar com fechaduras.

Eu estou bem fazendo um atraso write (limite de API não tem que ser super exato), mas há uma maneira padrão de fazer isso?

Publicado 27/08/2009 em 00:16
fonte usuário
Em outras línguas...                            


4 respostas

votos
0

Se você estiver ok com uma solução hospedada, dê uma olhada na minha empresa, WebServius ( http://www.webservius.com ) que faz a gestão API (emissão de chaves, impor quotas, etc). Temos também um suporte de cobrança, de modo que você será capaz de definir preços por chamada, etc.

Respondeu 01/10/2009 em 00:53
fonte usuário

votos
0

Aqui está uma maneira de fazê-lo usando o cache trilhos

call_count_key = "api_calls_#{params[:api_key]}_#{Time.now.strftime('%Y-%m-%d-%Hh')}"
call_count = Rails.cache.read(call_count_key) || 0
call_count += 1
Rails.cache.write call_count_key, call_count

# here is our limit
raise "too many calls" if call_count > 100

Esta não é uma solução perfeita, pois não lidar com concorrência de forma adequada e se você estiver usando o na memória cache (padrão rails), então este será um per contador de processo

Respondeu 27/08/2009 em 04:06
fonte usuário

votos
0

Você poderia tentar Apigee . Parece que ele está "libertar até 10.000 mensagens por hora".

Disclaimer: Eu nunca usei Apigee.

Respondeu 27/08/2009 em 00:35
fonte usuário

votos
0

Realmente depende do # de servidores, o conjunto de dados, o # de usuários, etc.

Uma abordagem seria para manter uma estrutura de dados quota na memória do servidor e atualizá-lo por invocação. Se você tiver vários servidores você pode manter um cache de memória da quota. Obviamente, uma implementação baseada em memória não iria sobreviver a uma reinicialização ou reiniciar, de modo algum tipo de serializiation seria necessário para suportar isso.

Se precisão quota é fundamental é provavelmente melhor para fazê-lo apenas no DB. Você poderia fazê-lo em um arquivo, mas, em seguida, você enfrenta os mesmos problemas que você está tentando evitar / w base de dados.

EDIT: Você também pode fazer uma abordagem mista - manter um cache baseado em memória de usuário | api | contagens de invocação e periodicamente escrevê-los ao banco de dados.

Um pouco mais informações sobre os requisitos ajudaria aparar as opções ..

Respondeu 27/08/2009 em 00:23
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more