In REST you can use any data encoding. I suppose Kevin referst to OData ( https://en.wikipedia.org/wiki/Open_Data_Protocol#A_sample_OData_JSON_data_payload) and needs to use GET and not POST, since that is a query not an insertion (PUT) or a modification (POST). I do not know if OData is apt to make a search query, but one can try the following
GET .../api/available_resources/?search_criteria='%7B%22date%22%3A%20%225/31/2015%22%2C%20%22duration%22%3A%2060%2C%20%22locations%22%3A%20%5B%7B%22services%22%3A%20%5B%22Housekeeping%22%2C%20%22Catering%22%5D%2C%20%22attendees%22%3A%2010%2C%20%22location_name%22%3A%20%22Los%20Angeles%22%7D%2C%20%7B%22services%22%3A%20%5B%22Housekeeping%22%5D%2C%20%22attendees%22%3A%205%2C%20%22location_name%22%3A%20%22New%20York%22%7D%5D%7D' search_criteria parameter is created from search_criteria dict as following: urllib.quote(json.dumps(searc_criteria)) 2015-05-22 6:57 GMT+02:00 Dave S <snidely....@gmail.com>: > > > On Thursday, May 21, 2015 at 8:42:12 PM UTC-7, > ke...@amplifieddevelopment.net wrote: >> >> Thanks, Massimo. I can see how that would work well in the web2py >> environment. >> >> In our organization, however, we have heterogeneous systems that use REST >> interfaces to share data. So, I am hoping to find a solution that aligns >> as closely as possible with REST principles. >> >> > JSON appears to align with REST principle. From Wikipedia: > "Unlike SOAP <http://en.wikipedia.org/wiki/SOAP>-based web services, > there is no "official" standard for RESTful web APIs.[10] > <http://en.wikipedia.org/wiki/Representational_state_transfer#cite_note-Elkstein-10> > This is because REST is an architectural style, while SOAP is a protocol. > Even though REST is not a standard *per se*, most RESTful implementations > make use of standards such as HTTP <http://en.wikipedia.org/wiki/HTTP>, > URI <http://en.wikipedia.org/wiki/URI>, JSON > <http://en.wikipedia.org/wiki/JSON>, and XML > <http://en.wikipedia.org/wiki/XML>." > <http://en.wikipedia.org/wiki/Representational_state_transfer#cite_note-Elkstein-10> > <URL:en.wikipedia.org/wiki/Representational_state_transfer> > > However, your resources may already use a defined API in a non-JSON form. > RedHat, for instance, has a RESTful storage API that uses XML. > In the Web2Py book, chapter 10 has a section on XMLRPC that may be > helpful, as well as the REST section: > <URL: > http://www.web2py.com/books/default/chapter/29/10/services#Restful-Web-Services > > > > If the resources are not yet defined, you have the option of choosing any > of above choices, and perhaps others, as fits your needs, > while still being RESTful. > > /dps > > > > > >> >> >> On Tuesday, May 19, 2015 at 10:38:36 PM UTC-7, Massimo Di Pierro wrote: >>> >>> Hello Kevin, >>> >>> the best way is to make an Ajax request with content type 'application/json' >>> and put the JSON search_criteria into the HTTP request body. For example: >>> >>> curl -H "Content-Type: application/json" - X POST -d "{...}" http:// >>> ..../mypage >>> >>> where {...} is your JSON object. Then in the web2py app >>> >>> def mypage(): >>> data = request.post_vars >>> ... >>> >>> data will contain the parsed JSON as a python object. >>> >>> >>> >>> >>> >>> >>> On Tuesday, 19 May 2015 19:50:22 UTC-5, ke...@amplifieddevelopment.net >>> wrote: >>>> >>>> We are developing a RESTful API. One of our use cases requires that we >>>> query a resource with somewhat complex search criteria. Internally, the >>>> search criteria would be represented by a data structure similar to this: >>>> >>>> search_criteria = {'date':'5/31/2015', >>>> 'locations':[{'location_name':'Los Angeles', >>>> 'attendees':10, >>>> 'services':['Housekeeping','Catering'] >>>> }, >>>> {'location_name':'New York', >>>> 'attendees':5, >>>> 'services':['Housekeeping'] >>>> } >>>> ], >>>> 'duration':60 >>>> >>>> } >>>> >>>> >>>> What would be a recommended strategy for passing complex query parameters >>>> to a RESTful API built with web2py? >>>> >>>> >>>> Our short term solution has been to provide simple query parameters that >>>> can contain delimited values. For example: >>>> >>>> >>>> GET .../api/available_resources/?date=2015-05-31&locations=Los >>>> Angeles|New >>>> York&attendees=10|5&services=Housekeeping,Catering|Housekeeping&duration=60 >>>> >>>> >>>> But, this seems less than ideal. It is not intuitive that Los Angeles >>>> should be associated with 10 attendees and the two specified services. >>>> >>>> >>>> Options we have considered include: >>>> >>>> >>>> - Treating the search criteria as a resource. Thus, we would first >>>> POST the complex search criteria and receive a handle in return. Then, we >>>> would GET available_resources, passing the search criteria handle. (This >>>> seems to be messy regarding how to handle the search criteria. Is it >>>> stored statefully in the session? Is it written to the database? When >>>> would it get cleaned up?) >>>> - Treat the search as a command. We would POST a resource search >>>> command with a JSON representation of the search criteria in the body. >>>> - Implement oData parsing for the query string. (While it is true that >>>> oData syntax could be constructed to meet the needs, yikes!, that's a lot >>>> of overhead for the API consumer and the API parser.) >>>> >>>> Are any of these considered best practice? Or, is there yet another >>>> strategy that we could consider? >>>> >>>> Many thanks for your help! >>>> >>>> Kevin >>>> >>>> >>>> >>>> -- > Resources: > - http://web2py.com > - http://web2py.com/book (Documentation) > - http://github.com/web2py/web2py (Source code) > - https://code.google.com/p/web2py/issues/list (Report Issues) > --- > You received this message because you are subscribed to the Google Groups > "web2py-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to web2py+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.