Moyen le plus rapide pour suivre l'accès aux API

voix
0

Je crée une API pour mon application Rails, et je veux suivre le nombre de fois qu'un utilisateur appelle une méthode API particulière, et plafonner leur disent à 1000 comme demandes par jour. Je me attends à des volumes de demande très élevés sur plusieurs utilisateurs.

Avez-vous une suggestion quant à la façon dont je peux garder une trace de quelque chose comme ça par utilisateur? Je veux éviter d'avoir à écrire dans la base de données à plusieurs reprises et de traiter les verrous.

Je vais bien faire une écriture différée (limite API ne pas être super exacte), mais est-il un moyen standard de faire cela?

Créé 27/08/2009 à 00:16
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
0

Cela dépend vraiment du nombre de serveurs, l'ensemble de données, le # d'utilisateurs, etc.

Une approche serait de maintenir une structure de données de quota en mémoire sur le serveur et le mettre à jour par appel. Si vous avez plusieurs serveurs, vous pouvez maintenir un memcache du quota. De toute évidence, une mise en œuvre basée sur la mémoire ne survivrait pas un redémarrage ou un redémarrage, donc une sorte de serializiation serait nécessaire à l'appui.

Si la précision des quotas est critique, il est probablement préférable de simplement le faire dans la DB. Vous pouvez le faire dans un fichier, mais vous faites face aux mêmes problèmes que vous essayez d'éviter / w la base de données.

EDIT: Vous pouvez également faire une approche mixte - maintenir un cache basé sur la mémoire de l'utilisateur | api | nombre d'invocations et de les écrire périodiquement à la base de données.

Un peu plus d'informations sur les exigences contribuerait à rogner les options ..

Créé 27/08/2009 à 00:23
source utilisateur

voix
0

Vous pouvez essayer Apigee . On dirait qu'il est « gratuit jusqu'à 10.000 messages par heure ».

Disclaimer: Je ne l'ai jamais utilisé Apigee.

Créé 27/08/2009 à 00:35
source utilisateur

voix
0

Voici une façon de le faire en utilisant le cache de rails

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

Ce n'est pas une solution parfaite, car elle ne gère pas correctement et si la concurrence vous utilisez le cache en mémoire (par défaut de rails), alors ce sera un processus par contre

Créé 27/08/2009 à 04:06
source utilisateur

voix
0

Si vous êtes ok avec une solution hébergée, jetez un oeil à ma compagnie, WebServius ( http://www.webservius.com ) qui fait la gestion de l' API (émission clés, l' application des quotas, etc.). Nous avons aussi un support de facturation, de sorte que vous serez en mesure de fixer les prix par appel, etc.

Créé 01/10/2009 à 00:53
source utilisateur

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