Beste Tweakers,
Voor een eigen geschreven web app ben ik in de laatste fase aanbeland voor het publiceren van de API. Waar ik nog op vastloop is de beste wijze om de API te limiteren zonder direct ergernis bij de developer op te wekken. Alvorens een discussie op te werpen of je een API wel of niet moet limiteren heb ik al besloten een limiet op de API te zetten. Het doel is hoofdzakelijk om developers, die... uhm niet zo goed uitgedachte code draaien niet gelijk alle server recources daarin mee te nemen.
Elke aanroep naar de api wordt gelogged en opgeslagen in de database. Handig voor onze statistieken maar ook voor developers want die kunnen namlijk de aanroepen realtime volgen... en zien wanneer een limiet bereikt wordt. (Dit wordt overigens ook via een JSON/XML foutmelding teruggekoppeld)
Nu komt het, hoe bouw ik het daadwerklijk limiteren van de API in? Zelf dacht ik het volgende:
Bij elk request naar de API volgt een aanroep naar de database. (Loggen doen we al) kijken we hoevel requests er zijn gedaan de afgelopen 5 minuten. Vervolgens wordt een gemiddelde berekend. Komt deze boven de x requests / seconde volgt een sleep van respectievelijk 2 of meer seconden.
Bij zwaar abusive gebruik zou je delays kunnen inbouwen tot maximaal 10 seconden.
Volgens mij zeer gebruiksvriendelijk en zorgt voor weinig frustratie bij developers en effedctief. Maarrr..
1. Levert dit niet teveel overhead op de database en het systeem op?
2. Zijn er betere manieren om dit in te bouwen?
3. Kan ik gebruik maken van memchached of file caching om de limieten te berekenen?
4. Betere suggesties?
Hier staat trouwens nog een mooi voorbeeld maar de code is niet compleet en een cruciale functie staat niet uitgelegd net zo min als waar de opslag van de data zich bevindt. Maar legt wel mooi een basis principe neer. Iemand die deze method kent (Leak Bucket)
http://stackoverflow.com/questions/1375501/how-do-i-throttle-my-sites-api-users
Ik zou graag code voorbeelden zien, ik hoeft het echt niet uitgeschreven te hebben maar help mij in de goede richting denken in de code en de rest schrijf ik zelf wel. Ik programmeer overigens in PHP 5.3 in een eigen geschreven MVC framework.
Ik ben zeer benieuwd naar jullie suggesties!
Voor een eigen geschreven web app ben ik in de laatste fase aanbeland voor het publiceren van de API. Waar ik nog op vastloop is de beste wijze om de API te limiteren zonder direct ergernis bij de developer op te wekken. Alvorens een discussie op te werpen of je een API wel of niet moet limiteren heb ik al besloten een limiet op de API te zetten. Het doel is hoofdzakelijk om developers, die... uhm niet zo goed uitgedachte code draaien niet gelijk alle server recources daarin mee te nemen.
Elke aanroep naar de api wordt gelogged en opgeslagen in de database. Handig voor onze statistieken maar ook voor developers want die kunnen namlijk de aanroepen realtime volgen... en zien wanneer een limiet bereikt wordt. (Dit wordt overigens ook via een JSON/XML foutmelding teruggekoppeld)
Nu komt het, hoe bouw ik het daadwerklijk limiteren van de API in? Zelf dacht ik het volgende:
Bij elk request naar de API volgt een aanroep naar de database. (Loggen doen we al) kijken we hoevel requests er zijn gedaan de afgelopen 5 minuten. Vervolgens wordt een gemiddelde berekend. Komt deze boven de x requests / seconde volgt een sleep van respectievelijk 2 of meer seconden.
Bij zwaar abusive gebruik zou je delays kunnen inbouwen tot maximaal 10 seconden.
Volgens mij zeer gebruiksvriendelijk en zorgt voor weinig frustratie bij developers en effedctief. Maarrr..
1. Levert dit niet teveel overhead op de database en het systeem op?
2. Zijn er betere manieren om dit in te bouwen?
3. Kan ik gebruik maken van memchached of file caching om de limieten te berekenen?
4. Betere suggesties?
Hier staat trouwens nog een mooi voorbeeld maar de code is niet compleet en een cruciale functie staat niet uitgelegd net zo min als waar de opslag van de data zich bevindt. Maar legt wel mooi een basis principe neer. Iemand die deze method kent (Leak Bucket)
http://stackoverflow.com/questions/1375501/how-do-i-throttle-my-sites-api-users
Ik zou graag code voorbeelden zien, ik hoeft het echt niet uitgeschreven te hebben maar help mij in de goede richting denken in de code en de rest schrijf ik zelf wel. Ik programmeer overigens in PHP 5.3 in een eigen geschreven MVC framework.
Ik ben zeer benieuwd naar jullie suggesties!
[ Voor 10% gewijzigd door juggle op 15-02-2013 20:06 ]
Zoek je mede papa's om gezellig mee te gamen? kijk op: fathersoftweakers.nl