Drupal - How do I consume REST as a client?

Normally, I just roll my own.

I use a combo of drupal_http_build_query and drupal_http_request to make the request. I then use drupal_json_decode to parse JSON results, or simplexml_load_string to parse XML results.

When possible, I try to abstract out all of this into a PHP class as a singleton, which also includes static caching and/or caching via cache_set/cache_get for the actual requests. I will then wrap up everything as a normal Drupal module.

Invariably, the service I am consuming will have something odd about it that precludes using a generic solution. Also, I don't find the generic solutions any simpler than a custom one.