No. At least not in the way web2py uses it.

On Wednesday, 25 June 2014 11:58:01 UTC-5, Cliff Kachinske wrote:
>
> Massimo,
>
> I like the way your thoughts are headed.
>
> doesn't the many2many issue goes away if one uses, for example, MongoDB?
>
> On Sunday, June 22, 2014 4:45:06 PM UTC-4, Massimo Di Pierro wrote:
>>
>> I added Hypermedia API support to web2py using Collection+JSON. 
>> Experimental.
>> Collection+JSON is a standard for self documenting RESTful API.
>> Read more: http://amundsen.com/media-types/collection/
>>
>> Example
>> =========
>>
>> Let's say you have a model:
>>  
>>     db.define_table('thing',Field('name'))
>>
>> and in controller default.py you add
>>
>>     def api():
>>          from gluon.contrib.hypermedia import Collection
>>          rules = {
>>                 'thing': {
>>                     'GET':{'query':None,'fields':['id', 'name']},
>>                     'POST':{'query':None,'fields':['name']},
>>                     'PUT':{'query':None,'fields':['name']},
>>                     'DELETE':{'query':None},
>>                }}
>>         return Collection(db).process(request,response,rules)
>>
>> And now by magic your table "thing" is fully exposed using the 
>> Collection+JSON API. The API is self documenting and supports GET, POST, 
>> PUT, DELETE, etc.
>>
>> For example you can do things like:
>>
>> curl http://127.0.0.1:8000/app/default/api/thing
>> curl http://127.0.0.1:8000/app/default/api/thing/1
>> curl http://127.0.0.1:8000/app/default/api/thing?id=1
>> curl 
>> http://127.0.0.1:8000/app/default/api/thing?name=Box&id.gt=10&_offest=10&_limit=30
>> curl -X POST -d name="Box" http://127.0.0.1:8000/app/default/api/thing
>> curl -X PUT -d name="Chair" http://127.0.0.1:8000/app/default/api/thing
>> ?name=Box
>> curl -X DELETE 
>> http://127.0.0.1:8000/super/collections/conform/thing?name=Chair
>>
>> The API are completely self documenting as explained here 
>> http://amundsen.com/media-types/collection/
>>
>> It is customizable
>> ==============
>>
>>        rules = {
>>                 'thing': {
>>                     'GET':{'query':None,'fields':['id', 'name']},
>>                     'POST':{'query':None,'fields':['name']},
>>                     'PUT':{'query':None,'fields':['name']},
>>                     'DELETE':{'query':None},
>>                }}
>>
>> Let you specify which tables are exposed, which methods are available and 
>> which fields are exposed for each method. The query property lets you 
>> specify optional filters for example  { 
>> 'query':db.thing.name.startswith('A'),....} will only exposed things 
>> starting with letter A. Fields can be conditional and different for 
>> different users or for the same user in different stages of a workflow (the 
>> communication is stateless, but the server is not).
>>
>> Supports complex queries
>> =====================
>> http:/...../{table}
>> http:/...../{table}/{id}
>> http:/...../{table}?{field}=value
>> http:/...../{table}?{field}.gt=value # field>value
>> http:/...../{table}?{field}.le=value # field<=value
>> ...
>> http:/...../{table}?_orderby={field}
>> http:/...../{table}?_limitby=value
>> http:/...../{table}?_offset=value
>> ...
>> and combinations there of. They are mapped directly into DAL queries. 
>> More examples are in the API response itself.
>>
>> The bigger picture
>> ===============
>>
>> This API provide enough information to generate forms and tables and grid 
>> completely client side. Recently we stumbled against the problem of moving 
>> from Bootstrap 2 to Bootstrap 3 because so much of the form and grid logic 
>> is server side. My plan is to move most of the logic in the JS library and 
>> allow users to customize them  for different CSS frameworks.
>>
>> Eventually (in dreams) I would like to have a very slim framework based 
>> on bottle+dal+validators+auth+collection and have client side only 
>> templates (based on jquery, sugar, and ractive.js) that can generate forms 
>> and grids based the collection API. This framework could ship with web2py 
>> and allow you to program using same web interface that we all love. There 
>> are many design decisions to make to get there. Your suggestions are 
>> welcome.
>>
>> How can you help?
>> ===============
>> 1) test it.
>> 2) there are many existing client side tools for Collection+JSON. Try 
>> them with web2py.
>> 3) blog about it and suggest improvements.
>>
>>
>> I said, it is experimental
>> ===================
>>
>> Collection+JSON has limits:
>> - it is very verbose JSON. This is my my implementation has  compact=True 
>> option that breaks the protocol but makes much smaller JSON messages.
>> - it does not convey field type information and constraints. This is why 
>> I extended to do so but more work is needed because DAL types do not map 
>> into HTML5 input types (this of list:string or list:reference).
>>
>> More extensions of the protocol are required. Extensions are allowed. Yet 
>> they may change the API in the near future.
>>
>> Massimo
>>
>

-- 
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.

Reply via email to