Facebook quietly deprecated their Python/Ruby libraries for Instagram API
github.com
github.com
In Ruby, the best API wrappers (or at least, the ones I used back in the day) for Twitter and Facebook are maintained independently:
https://github.com/sferik/twitter
https://github.com/arsduo/koala
The koala gem for Facebook is a godsend...the FB API and models are not trivial...and that's before trying to keep up with the many and frequent changes to the API spec. It's hard to imagine that FB would put the resources into continually maintaining that gem if it were an official gem...not when (I assume) so many more of their API consumers use iOS/JS/Android.
But at least they now give you a notice. :)
Allowing 'anonymous, public' APIs either requires that you rate-limit either too conservatively (e.g. by client ID—so clients with more users hit rate limits) or too liberally (e.g. by IP—so truly malicious clients can just hit you with a botnet.)
The only good way to provide a registration-less public API boils down to pairing—effectively "registering the machine" by handing it a token, and then relying on supercookies or frequently-revalidated 2FA tokens to persist the session. But this only works if you can reasonably expect a person to only want to query your API from one device at a time. If there are real use-cases for which your clients will want to hit you from random new machines (e.g. CoreOS's hosted etcd) then pairing won't help you.
Unfortunately, I have not seen a significant decrease in Instagram spam since the changes. So the changes just hurt legitimate developers.
You can check it out on GitHub at https://github.com/haikuginger/beekeeper, read more at http://beekeeper.rtfd.org, or just install it with pip.
I'm biased, but I think it's pretty cool.
Also, generic mapping types are second class citizens, id est just wanting to specify string -> string
Disclosure: I'm a top contributor to Swagger-Codegen
I feel like abstracting APIs into objects (essentially RPC calls?) creates too much of a dependency on the network. The friction of writing the calls and their handlers helps minimize their use :)
That is, it should keep track of how many requests you made over time, and if making another will put you over the rate limit, the library should block for however much time is needed before actually sending the request.
For example, I can't imagine interacting with Reddit's API without praw taking care of the rate limiting for me.
But then you have companies like Braintree that only supports its libraries?