Summer of Code Progress: Debugging Launchpad’s RESTful API
Related Links
Summer of Code Archive | Inspirated Code |
Original Proposal | Ubuntu Wiki |
Report
RESTful web services are very fun once they get properly integrated in end-user applications. Testing those services is a whole different thing and I wanted to dive deep into the bare essentials of REST communication performed by Launchpad for its API. The most straightforward way was to write a Python script using urllib2
and/or httplib
for the HTTP request/response mantra. Obviously I found it to be a cumbersome solution and then found this little beauty:
(Click on the thumbnail for larger version.)
RESTClient does one thing and does it sweetly: it gives you a nice GUI for toying with REST requests. Getting it to work with Launchpad was not as straightforward though as all requests have to be signed to be of any real value. I also had to spent a few hours trying to understand why api.edge.launchpad.net
was not recognizing my access tokens until by sheer stroke of luck I used api.staging.launchpad.net
and it started working perfectly.
1 2 3 4 5 6 7 8 9 10 11 12 | <rest-client version="2.3"> <request> <http-version>1.1</http-version> <URL>https://api.staging.launchpad.net/beta/bugs/1</URL> <method>GET</method> <headers> <header key="Authorization" value="OAuth realm="OAuth", oauth_nonce="77848601", oauth_timestamp="1274537900", oauth_consumer_key="just%20testing", oauth_signature_method="PLAINTEXT", oauth_version="1.0", oauth_token="6dwHFn3CPzxjNrrdp3r9", oauth_signature="%26xxxxxx""/> <header key="Accept" value="application/json"/> <header key="Host" value="api.staging.launchpad.net"/> </headers> </request> </rest-client> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <rest-client version="2.3"> <response> <execution-time>897</execution-time> <status code="200">HTTP/1.1 200 Ok</status> <headers> <header key="Date" value="Sat, 22 May 2010 14:26:32 GMT"/> <header key="Server" value="zope.server.http (HTTP)"/> <header key="X-Powered-By" value="Zope (www.zope.org), Python (www.python.org)"/> <header key="Content-Type" value="application/json"/> <header key="Content-Length" value="2888"/> <header key="Etag" value=""d9b357c932ada0a71e96401a8c87368d4704a500-dec69b947b887c4addba8eb4aae5ca64c94f616c""/> <header key="Vary" value="Accept,Accept-Encoding"/> <header key="Via" value="1.1 wildcard.staging.launchpad.net"/> <header key="Keep-Alive" value="timeout=15, max=100"/> <header key="Connection" value="Keep-Alive"/> </headers> <body> { users_unaffected_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/users_unaffected', latest_patch_uploaded : null, users_affected_count_with_dupes : 378, security_related : false, private : false, bug_watches_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/bug_watches', date_made_private : null, linked_branches_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/linked_branches', subscriptions_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/subscriptions', number_of_duplicates : 0, id : 1, users_unaffected_count : 6, title : 'Microsoft has a majority market share', name : 'liberation', http_etag : '"d9b357c932ada0a71e96401a8c87368d4704a500-dec69b947b887c4addba8eb4aae5ca64c94f616c"', messages_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/messages', self_link : 'https://api.staging.launchpad.net/beta/bugs/1', who_made_private_link : null, attachments_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/attachments', resource_type_link : 'https://api.staging.launchpad.net/beta/#bug', date_last_updated : '2010-05-13T23:24:26.362094+00:00', description : 'Microsoft has a majority market share in the new desktop PC marketplace.\nThis is a bug, which Ubuntu is designed to fix.\n\nNon-free software is holding back innovation in the IT industry, restricting access to IT to a small part of the world\'s population and limiting the ability of software developers to reach their full potential, globally. This bug is widely evident in the PC industry.\n\nSteps to repeat:\n\n1. Visit a local PC store.\n\nWhat happens:\n2. Observe that a majority of PCs for sale have non-free software pre-installed.\n3. Observe very few PCs with Ubuntu and free software pre-installed.\n\nWhat should happen:\n1. A majority of the PCs for sale should include only free software like Ubuntu.\n2. Ubuntu should be marketed in a way such that its amazing features and benefits would be apparent and known by all.\n3. The system shall become more and more user friendly as time passes.\n\n', duplicates_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/duplicates', tags : [ 'iso-testing', 'ubuntu' ], message_count : 1198, heat : 2138, bug_tasks_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/bug_tasks', cves_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/cves', users_affected_with_dupes_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/users_affected_with_dupes', duplicate_of_link : null, users_affected_count : 378, owner_link : 'https://api.staging.launchpad.net/beta/~sabdfl', date_created : '2004-08-20T00:00:00+00:00', can_expire : false, date_last_message : '2010-05-13T23:24:21.253673+00:00', users_affected_collection_link : 'https://api.staging.launchpad.net/beta/bugs/1/users_affected' } </body> </response> </rest-client> |
With a local Launchpad ready to do my bidding and a debugging process in place for elaborating its API, I’m looking forward to the coding phase. Which, coincidentally, begins on the same day I give my final exam for the current semester.
Tags: API, Arsenal, Code, GSoC, Launchpad, Open Source, Python, REST, RESTClient, Ubuntu“
RestREST: the sweet sauce of labor.” — Plutarch