diego's weblog

there and back again

one small REST call for man, one giant API for mankind

Here’s a question I’ve heard a couple of times recently: how committed is Ning to the platform idea?

It’s question that emerges from our need to focus right now, as a company, on building out the social network application on Ning and empowering Network Creators from the top-down, through simple but powerful tools, to customize and evolve their networks.

Given our limited resources, this creates sometimes the external impression that we’re not paying much attention to Ning as a platform, or to the evolution of our APIs, or the support of them, but nothing could be further from the truth.

Without the platform, there is no Social Network application. Allow me to explain.

When you create a network on Ning today, you get to add features, customize its appearance, change profile questions, privacy options, and more, all through a straightforward drag-and-drop user interface.

Hidden in this process is the fact that the network itself, and every feature in it, uses the APIs of the Ning platform to do the job.

“But wait,” I hear you say, “everyone and their pet has an API these days! How is Ning different?”

Here’s the difference: Every single Web API out there, except for Ning’s, is a parallel plug into the backend that runs the service, website, or application in question.

Every other web site out there (that I know of) has a set of separate systems that deal with API requests — it’s how API access to other sites can be slower, or more unpredictable, or be more restricted than access to the site itself (see the image to the right for the Layers in typical websites). Every site has its databases and various server systems that compose the service they provide. Then (in most cases after the service has been launched) an API is added as a way to expose some of the data or services provided by that website/product. I am not aware of any API out there (except for Ning’s, that is :)) that exposes all of the website’s services in API form — perhaps GData‘s comes closest. Most APIs allow you to read data, sometimes a lot of the available data, and a few let you perform several specific write operations–GData again being a good example of this.

So what is it with this exception I keep making for Ning? What’s special about our APIs?

The answer is there when we look at it the other way: it’s not so much that Ning’s APIs are special, but that the Ning Social Network is built entirely using them. Every application on Ning written by Ning is built using the same APIs available to anyone else on the platform (and even for external remote calls).

Anyone could have built the Social Network application on Ning, starting from scratch. There are no special, high-privilege data paths. There are no hidden authentication systems. There are no datastores that are available only to Ning.

Layers within the Ning Platform


The Ning platform is one giant API that runs on what we call the core, a collection of hundreds of servers and dozens of server types that power the platform, presenting a homogeneous view of data and services through a variety of HTTP-based REST APIs.

The Ning APIs are built using REST, but PHP applications running on Ning have access to them through a thin layer of PHP code that simplifies their use from within PHP. However, it is possible to use the Ning REST APIs directly from PHP, It’s just a little more cumbersome. In the future, when we add language wrappers, we will use the same APIs as the underlying mechanism to access the Ning services.

So going back to the question: how committed is Ning to the platform? The answer is simple: We are 100% committed to it — if we were to remove features, or change them, or disable them, every network on Ning would be affected.

The reliability, performance, longevity, and availability of the Ning APIs is exactly the same for everyone modifying the Social Network code, or creating new apps from scratch.

The platform is our DNA. Simple, but not easy.🙂

Comments are closed.

%d bloggers like this: