Hi, I tried to pull together the different sources for restful services, including various hints in this group and of course the excellent web2py documentation. If this is the wrong place or info, feel free to move or delete it.
Here's how you create a restful web2py application in under 2 minutes: - create a wizard application called 'RT' - add a table named 'entries' and add a field 'entry wiki' - finish the wizard with all the default values - register a user 'user' with password 'pass' now you have an application with 10 random entries. The next two step are required due to a bug that I filed before (http://goo.gl/CPO0G) - go to the design page of the app and change the table name from 't_entries' to 'entries' in db_wizard.py (4 times) and in default.py (1 time) - check that the application is still working. you notice that the table now is empty since we changed the name of the table. - Add a couple of entries. - now add the RESTful services to the controller as described in http://goo.gl/iITNd ('parse_as_rest') or here: http://goo.gl/ltfa2 @request.restful() def api(): response.view = 'generic.'+request.extension def GET(*args,**vars): patterns = 'auto' parser = db.parse_as_rest(patterns,args,vars) if parser.status == 200: return dict(content=parser.response) else: raise HTTP(parser.status,parser.error) def POST(table_name,**vars): return db[table_name].validate_and_insert(**vars) def PUT(table_name,record_id,**vars): return db(db[table_name]._id==record_id).update(**vars) def DELETE(table_name,record_id): return db(db[table_name]._id==record_id).delete() return locals() - In the browser: you get all entries with http://127.0.0.1:8000/RT/default/api/entries.json you get the just the second entry with http://127.0.0.1:8000/RT/default/api/entries/id/2.json you get all auto-generated patterns with http://127.0.0.1:8000/RT/default/api/patterns.json That's as far as we get with GET in a browser. To make things more realistic, we add basic user authentication and try some POSTs with curl. - Add auth.settings.allow_basic_login = True @auth.requires_login() above @request.restful. Authentification now is mandatory for the REST interface. - get the first entry curl --user user:pass http://127.0.0.1:8000/RT/default/api/entries/id/1.json - post a new entry curl --user user:pass -d "f_entry=something" http://127.0.0.1:8000/RT/default/api/entries.json - delete the first entry curl -X DELETE --user user:pass http://127.0.0.1:8000/RT/default/api/entries/1.json Same thing from python: import requests from requests.auth import HTTPBasicAuth payload = {'f_entry': 'somevalue'} auth=HTTPBasicAuth('user', 'pass') r = requests.post("http://127.0.0.1:8000/RT/default/api/entries.json", data= payload, auth=auth) r = requests.delete("http://127.0.0.1:8000/RT/default/api/entries/1.json",data =payload, auth=auth) --