Hoe zet je limieten op het gebruik van een eigen API (PHP)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • juggle
  • Registratie: December 2003
  • Laatst online: 09-07 11:59

juggle

Papa, ondernemer, gamer

Topicstarter
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 10% gewijzigd door juggle op 15-02-2013 20:06 ]

Zoek je mede papa's om gezellig mee te gamen? kijk op: fathersoftweakers.nl


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

juggle schreef op vrijdag 15 februari 2013 @ 20:03:
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
$last_api_request = $this->get_last_api_request(); # get from the DB; in epoch seconds
In de database dus. Lijkt mij ook het makkelijkste. Dan heb je dus eigenlijk alles al. Als je database omgaat vanwege de vele requests buiten je limiet heb je toch waarschijnlijk al een soort van ddos probleem... als dat echt een probleem is/wordt kan je naar andere opties kijken, zoals het in je geheugen gecached houden, maar dat lijkt me helemaal niet nodig. Hoeveel concurrent gebruikers gaat het om? Miljoenen?

Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 09-07 07:51
Je geeft zelf eigenlijk al een perfect antwoord op je vraag. Mocht je naar meer/andere oplossingen willen kijken dan is 'rate limit' je zoekterm.

...


Acties:
  • 0 Henk 'm!

  • juggle
  • Registratie: December 2003
  • Laatst online: 09-07 11:59

juggle

Papa, ondernemer, gamer

Topicstarter
@Zoijar Nee, betreft niet zoveel, ik denk op moment iets van 10 :-) Maar de API kan zeker wel veelvoudig worden aangeroepen. Het betreft een mailingsysteem waarop inschrijvingen worden bijgehouden. Dus op drukke momenten kan het wel iets harder gaan.

Anyway, ik weet dat de aantallen een lachertje zijn, maar dat is het niet het punt. Zodra de API live gaat verwacht ik wel meer gebruikers, en uiteraard gaan we voor de groei van het systeem. Het systeem groeit maandelijks met 50 tot 70 gebruikers en er is veel vraag naar de API. Ik wil graag een robuust systeem die ook in de toekomst duizenden connecties met gemak kan afhandelen.

Zoek je mede papa's om gezellig mee te gamen? kijk op: fathersoftweakers.nl