it's merely a question about "angles"....

suppose you want to give access only to one table, e.g., products. only 
search by name and return just the quantity in stock in addition to the 
name.

with jsonrpc you need to code a function that searches through your 
products and returns a list of tuples (or a dictionary) holding "name, 
stock" values.

Now, suppose you want to add the possibility to order a product, or 
multiple ones.

again, with jsonrpc you need to code a function that searches through your 
products and returns a list of tuples holding "name, ordered_qty" values.

Now, suppose you want to give the ability to search through product tags, 
and order products

you need to come up with a representation of your model, code a function 
that searches through tags, links them through products, and then again 
return the result.

In all of this, you need to figure out a result that carries all the info 
needed for an API to be used (such as, e.g., returning tags in the 1st 
function anyway if they are handy, etc etc etc). 

When you add more and more functionality, or "features", you need to be 
consistent in what you return, else your API becomes more and more bloated 
and patched and disconnetted from piece to piece. JSONRPC doesn't define 
the state of your products, unless you come up with that. You have to tell 
your users that order_product method returns "name, ordered_qty" , come up 
with an error when they can't order something, tell them that a product can 
be searched also by tags with the search_by_tag method, etc etc etc.

At any given point in time, clients need to know what feature you expose 
and what to expect back.

On the other side, REST uses urls, response codes http verbs (HEAD, GET, 
POST, PUT, DELETE) and headers to describe both your returned format and 
your model. They know when an operation change something, if they can cache 
the result, etc etc. 

In richer and standards conformant APIs you get back with the results also 
links to access connected resources (i.e. the details about the tag of the 
product). Clients can ask xml or json just changing headers, and generally 
must be informed of your model only .... they know already (if your API is 
totally REST "certified") that they should use x to achieve y. 

tl;dr: In general, a REST API feels more "open" but yes, more complicated 
because it involves several base concepts on how the web works. 
JSONRPC on the other end feels more "explicit". JSONRPC in an APIs exposes 
more "how to work with" while REST "what to work with".

So, suppose you want to expose an api to access your online store.... I'd 
go for REST hands down. 
You need instead to expose a service that returns the avatar picture 
location given an email ? JSONRPC. 
You need to expose a service that crops pictures sent by users ? ..... 
neither (binary formats don't play well with both JSONRPC or REST)
You don't need a service but some means of communication by a server 
written by you and a client that only you use ? JSONRPC will be more 
productive in a short term and if you have all the detailed implementation 
planned, but on the long run REST may be more appropriate.

-- 

--- 
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/groups/opt_out.


Reply via email to