The basic concept between the two protocols is the same. URLs are
used in lieu of SQL to specify queries. Relationships and filters must
be encoded as part of the URL and all requests are GETs.
The first difference pointed out by Dare is that Astoria uses a
hierarchical format to represent relationships. For example, to specify
that you wanted the orders for customer key 5 you would have something
like “/Customers/Orders”. Google Base, on the other hand, uses a
flat model where categories and predicates have to be used to ferret
Both support filtering and sorting, but Google Base has a richer
syntax and support for full-text queries across all categories. Google
Base does get a bit carried away however, with support for inline
Astoria does have a really nice feature called expand. It allows the
user to indicate they also want the children nodes for the data they
requested. This eliminates the need to perform 1+N queries to get a
collection of rows and the related child rows. The data comes back as
inline XML under the appropriate node.
Google Base likewise has some features not found in Astoria. For
example one can turn on spelling correction, which works in a manner
similar to Google Search. You can also filter out repetitive
information using the Crowd feature. In the article, Dare requested,
“all restaurants stored within Google Base but show no more than 2 per
Dare Obasanjo concludes:
In comparing both approaches there is a lot to like and dislike. I
like the “expand” feature in Astoria as well as the fact that I can
retrieve XML results from multiple paths of the hierarchy. However
there does seem to be a paucity of operators and functions for better
filtering of results.
From the Google Base data API, I love the “crowd” feature and having
a full library of functions for performing tests within predicates.
Also some of the operators such as the ones for finding results near a
certain location are quite impressive although unnecessary for the
majority of RESTful protocols out there. That said, I do think they
went overboard on some of the features such as having if…else blocks
within the URIs. I suspect that some of that complexity wouldn’t have
been needed if they just had hierarchies instead of a flat namespace
that requires complex filtering to get anything out of it.