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 [email protected].
For more options, visit https://groups.google.com/d/optout.