Atom REST API for Google App Engine
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Project Description – Atom REST API for Google App Engine


The goal of this project is to develop an Open Source set of scripts that implements the Ning Atom API entry-points on any application hosted on Google Application Engine.

Here is a thread with people asking for such API


Before turning into a social network provider, was a platform to build web applications, with almost all the same goals of the current Google App Engine , and for a couple of years a good lot of work was spent to build a robust platform and API (that is still the same base were the current social network product runs on ), with a scalable non-relational database with dynamic shapes, (aka Ning Content Store ).

One of the great things about Ning’s Platform is that any app created on the Ning platform comes out-of-the-box, with a powerful REST API, to handle the main operations, like querying content, adding, removing, getting user info, authenticating, managing roles, uploading files, messaging and a lot of other nice features of the platform .

When Google launched the App engine, another opportunity for interesting web applications to grow have arrived, but the platform is still not as mature as it’s predecessor, and this is the gap where this project aims to help with.


  • a plug’nplay package that enable easy web services API with full read access without having to code anything on any GAE app
  • execute arbitrary queries against the Data Store and get the results as an Atom feed
  • 3rd party developers can easily create mash-ups and applications using your app’s data
  • developers without prior Python knowledge can take advantage of DataStore bigtable implementation and GAE app hosting
  • since the output is atom, people can subscribe to any data view of your application using existing feed readers
  • anyone can make queries from the location bar instantly!
  • two apps with the REST package installed can perform cross app queries (something currently not supported by the App Engine)


Here are the full documentation from the Ning website (Cahed version here)


Check some examples of the syntax and uses of the Ning REST API to get an idea of what people do.


The person or company willing to contribute to this project must ideally have the following profile:

  • Experience with web development
  • Familiarity with the Python programming language
  • Passion for standards and open source code
  • Enjoy rapid development and fast release cycles
  • Deliver clean and well documented code
  • Comfortable with source version control systems (ideally git, but svn is ok)
  • Ideally have played with Google App Engine before (not required)
  • Ideally have PHP skills (not required)
  • Ideally have developed on the Ning platform before (fantastic! but also not required)


Phase 1: Content Operations

The first part of the project involves the implementation of a set of python scripts that can easily be copied into any existing GAE application and perform seamless out-of-the-box, or with minimum configuration, and using the same url syntax (/xn/atom/1.0/content etc) the following basic operations:

  1. Make Content queries and retrieve a feed with the results, or an error
  2. Make Content rollup queries and retrieve a feed with the xn:rollout results
  3. Create Content using POST
  4. Update Content using PUT
  5. Delete Content using DELETE
  6. Create Binary Content using POST

The details of the syntax of the feeds, the calls and the expected results are in (Cahed version here)

Phase 2: Profiles


Phase 3: Tags


Phase 4: Roles


Other References

Open Questions

  • how to flag/treat private vs public content on GAE ? (Ning has the →isPrivate boolean attribute)
  • how to query contents of all types without prior knowledge of what Entitie Models an app has? (Ning does not require a kind to be specified on queries)
    • would it be possible to simulate this behavior on GAE, by running an extra-step in the installation to craw the code and identify all db.Model and db.Expando Entity types?