Parse Supports Many to Many Relations

There is updated content on this subject. Please see this post for more information.

A few days ago, we came out of beta with our 1.0 SDK. The 1.0 blog post discusses a few backwards incompatible changes, but I’m here to talk about some of the awesome new features that it included. In the new SDK, Parse supports a richer relational model by allowing many to many relations.

Let’s say you are writing a hot new social app that records which people like which local establishments. You can store an array of users who like a particular place by doing:

 // Let's say people is a NSArray of "Person" PFObjects.
 PFObject *place = [PFObject objectWithClassName:@"Place];
 [place setObject:@"Sid's BBQ" forKey:@"name"];
 [place setObject:people forKey:@"likes"];
 [place saveInBackground];

You can then search for places that Bob liked by doing:

  PFObject *personNamedBob = ...;
  PFQuery *query = [PFQuery queryWithClassName:@"Place"];
  [query whereKey:@"likes" equalTo:personNamedBob];

You can also do more complicated queries such as finding all places liked by people in Australia. It’s as simple as:

// Create a query for People in Australia
PFQuery *query1 = [PFQuery queryWithClassName:@"Person"];
[query1 whereKey:@"location" equalTo:@"Australia"];

// Create a query for Places liked by People in Australia.
PFQuery *query2 = [PFQuery queryWithClassName:@"Place"];
[query2 whereKey:@"likes" matchesQuery:query1];
[query2 findObjectsInBackgroundWithBlock:^(NSArray *results, NSError*error) {
   // results contains the places that are liked by people from Australia

These new features make storing and retrieving your data from Parse even easier. And of course, if you have any feedback, let us know.

Shyam Jayaraman
March 28, 2012

Parse is Officially Out of Beta

Today is an exciting day for Parse. Ever since our beta launch, we’ve been working tirelessly to make the best mobile platform out there. We’ve launched dozens of features, scaled our infrastructure by many orders of magnitude, and talked to thousands of you as you built your apps. That work has paid off and we’re thrilled to announce that Parse is officially out of beta.

We’ve come a long way since November. Here are a few stats:

  • We have over 10,000 developers on the platform.
  • The SDK is installed on tens of millions of devices.
  • The platform serves hundreds of millions of API requests per month.
  • The platform sends tens of millions of push notifications per month.
  • The company is up to 13 full time employees now.
  • Most of the numbers above are growing at 40% each month.

This milestone brings three exciting changes for our existing customers.

We’ve released version 1.0 of our SDK with a number of improvements. For more information on upgrading to 1.0, take a look at this blog post.

We’ve also overhauled our pricing plans to be clearer, simpler, and vastly cheaper for most of our customers. The Basic plan now offers twenty times more free usage! For our existing customers, we’ve sent you an email with more details on the transition and how to stay on the old plans. To give everyone ample time to get adjusted, we’re waiting until May to start charging.

Lastly, take a look at our beautiful new homepage! (You’ll need to logout if you’re logged in)

We’d like to thank all of our beta users for their feedback throughout the process. Your support is invaluable and we hope to continue making a platform that people love.

As always, send us your thoughts. If you’re interested in joining us, we’re hiring for many open positions.

James Yu
March 26, 2012

Parse 1.0 is released!

The big idea behind Parse is that developers shouldn’t have to manage a server in order to write mobile applications. Of course, we can’t dream up every application that people want to write. An important part of our philosophy is to listen closely to developers to figure out what we need to build, so that every application can be freed from servers. By working with our community, we think we’ve made Parse a platform that makes mobile development faster, easier, and more robust than any other way of doing it.

Today, we’re proud to announce our release of the Parse SDK, version 1.0. Parse 1.0 represents the biggest milestone in Parse’s development to date: a rock solid SDK ready to power anything from large, complex applications to a quick weekend project.

You can download Parse 1.0 from the Developer Docs.

Parse 1.0 does have a few minor backward-incompatible changes from Parse 0.x versions, that we’ve made in order to clean up some warts and prepare for future functionality.

  • objectForKey: in iOS and get() in Android will now never do a network request, which was rarely the desired behavior. Instead, fetching relations happens as a separate step. See the Relational Data section in the iOS guide and Android guide for more details.

  • The logIn and getFirst methods will now return a descriptive error on failure, instead of returning a null result and a null error.

  • In iOS, skip and limit are now int instead of NSNumber, which was a source of bugs. See the docs for example code.

  • Several method names were changed to adhere to a consistent style. In iOS, withTarget:, withBlock: and withError: clauses were renamed to target:, block: and error:. In Android, objectId() and className() accessors were removed in favor of the alternative getObjectId() and getClassName().

We couldn’t build Parse without the tremendously useful feedback from the Parse community. Let us know about your greatest hopes and dreams, what you wish the Parse platform could do for you. Or just if you find a bug. We want to make your life easier.

Thanks for using Parse!

Kevin Lacker
March 26, 2012

One Click Export

We work hard to make sure your data is secure, always available, and backed up. We’re also big believers in data portability and recognize that the ability to get data out of Parse is important to some users. We built the REST API with this goal in mind but we’ve gotten many requests for an easier method for bulk exporting of an app’s entire data set.

So, today we’re launching a new way to export everything with just one click.

Go to your app’s settings page and click export. After a few minutes we’ll send you an email with
a link to a file that contains all of your data stored in Parse. The format is identical to the one returned by the REST API so there’s no need to write extra parsing code.

ilair:export ilya$ unzip
 extracting: Foo.json                
 extracting: LocationUpdate.json     
 extracting: StackObject.json        
 extracting: Temp.json               
 extracting: TestObject.json         
 extracting: TestObject2.json        
  inflating: Thing.json              
 extracting: _User.json              
ilair:export ilya$ cat Thing.json
{ "results": [
  "name": "plate",
  "createdAt": "2012-03-08T23:36:14.832Z",
  "updatedAt": "2012-03-09T22:04:08.937Z",
  "objectId": "7xS50cVZ2O"
  "name": "knife",
  "createdAt": "2012-03-08T23:36:20.233Z",
  "updatedAt": "2012-03-09T22:04:05.686Z",
  "objectId": "NyCyWue7wu"
  "name": "fork",
  "createdAt": "2012-03-08T23:36:24.239Z",
  "updatedAt": "2012-03-09T22:04:03.851Z",
  "objectId": "fywEg7EHav"
  "name": "cup",
  "createdAt": "2012-03-09T22:04:01.259Z",
  "updatedAt": "2012-03-09T22:04:01.259Z",
  "objectId": "WU2KkJaNmK"
] }

Let us know what you think!

Ilya Sukhar
March 9, 2012

Better Pushing from Your Browser

Today we’ve released an improved web interface for sending push notifications. You can now use all of the push parameters in our REST API from the comfort of your browser.

You can use this feature to send raw JSON data to apps, select one or more target channels, and set an expiration for your push notification. This is also a great way to see your app’s channels and subscriber counts.

Let us know what you think!

Brian Jacokes
March 7, 2012

A Powerful Data Browser

The data browser is a great developer tool to administer data stored on Parse. Today, we are happy to announce that the data browser has just become a lot more powerful. Developers can now create sophisticated backends using the data browser, as seen here:

Via the data browser, developers can create, edit and delete every single type of data on Parse. This includes objects, relations, numbers, strings, dates, GeoPoints, arrays and hashes. You can also use it to upload and remove files served on Parse. Furthermore, you can use it to manage your app’s user data, such as creating or deleting users and changing a user’s password.

The data browser has become one of our most treasured tools, and we are just getting started. We are constantly improving its UI and functionality so that more developers can take advantage of this wonderful visual tool.

As always, if you have any questions or suggestions, send us a note.

Andrew Wang
March 2, 2012

Usage and Analytics

As an app developer, it’s important for you to understand how your app is being used and the volume of requests being generated. Today, we’ve added usage and analytics graphs to your app’s dashboard, and also aggregated stats on your account page.

You’ll now be able to see how many API requests and push notifications your app is making to Parse on a daily basis, and also the number of total requests and pushes, and how much file storage has been used in the past month. Here’s a sample of what it looks like:

And, this is just the first step. We have big plans to add more in-depth analytics so that you can get visibility into what your app is doing at every level.

As always, if you have any questions or suggestions, send us a note.

James Yu
March 1, 2012

Link to Facebook and Twitter Now Available Through the REST API

Until now, logging your users in with Facebook or Twitter has been exclusive to the realm of Android and iOS apps backed by Parse. Today, we’re happy to announce the availability of this capability to all consumers of Parse through our REST API.

As a developer, you are responsible for retrieving the necessary authorization tokens from Twitter or Facebook, after which you can sign up or log in by posting to our REST API:

curl -X POST -H "X-Parse-Application-ID: ${APPLICATION_ID}" 
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" 
  -H "Content-Type: application/json" 
  -d '{
        "authData": {
          "twitter": {
            "screen_name": "ParseIt",
            "consumer_key": "SaMpLeId3X7eLjjLgWEw",
            "consumer_secret": "SaMpLew55QbMR0vTdtOACfPXa5UdO2THX1JrxZ9s3c",
            "auth_token": "12345678-SaMpLeTuo3m2avZxh5cjJmIrAfx4ZYyamdofM7IjU",
            "auth_token_secret": "SaMpLeEb13SpRzQ4DAIzutEkCE2LBIm2ZQDsP3WUU"

Or, you can link a user to a service with a PUT request:

curl -X PUT -H "X-Parse-Application-ID: ${APPLICATION_ID}" 
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" 
  -H "X-Parse-Session-Token: samplei3l83eerhnln0ecxgy5"
  -H "Content-Type: application/json" 
  -d '{
        "authData": {
          "facebook": {
            "id": "123456789",
            "access_token": "SaMpLeAAibS7Q55FSzcERWIEmzn6rosftAr7pmDME10008bWgyZAm...",
            "expiration_date": "2012-02-28T23:49:36.353Z"

Check out the documentation for linking users to services using our REST API for more details!

David Poll
March 1, 2012



RSS Feed Follow us Like us