I am getting started with iPhone application development and would like to create an application that involves pulling data from from a web application. I will be developing the API using PHP and the Zend Framework. I have never created a public API before, nor an iPhone app that works with public data.
Here are some specific questions I have:
One of the things I will need to do is create a table view with data from the API.
- What data format should my API return? XML, JSON, HTML? (I'm assuming XML will be the easiest)
Let's say my API has a fetchAll
function which returns all the records in a database table, how should I format this data so it is easy to work with in my iPhone application?
# http://myapp.com/api/people/fetchAll
array(
0 => 'John',
1 => 'Sally',
2 => 'Chris'
)
Update: Afte开发者_StackOverflow中文版r doing some research I decided that (on the Server-side) I want to implement a RESTful API that returns JSON. So my iPhone application will ultimately be a REST client.
I also found this post, though it may be outdated now: Creating RESTful Web Service Clients in Cocoa and Cocoa Touch
I would recommend using JSON.
On the server, you would want to return the data in a JSON format from your "fetchAll" request.
On the iPhone client app, after getting the data from the request (try the ASIHTTPRequest library), you can parse the JSON using a library such as TouchJSON.
UPDATE
I still recommend JSON, but I just use NSURLConnection to communicate with APIs. Actually, I use the wrappers from the iOS Recipes book because they give nice block callbacks rather than needing to implement delegate methods.
Check out the Objective Resource project. It works out of the box with rails, but will work with any site that uses ActiveResource conventions.
I've used it successfully with a couple of different projects.
The JSON serialization its expecting for objects is like this:
{ "className" : { "key1" : "value1", "key2" : { "className2" : { "key1" : "value1" }}}}
Arrays, I believe, are the same with multiple entries like the preceding surrounded by square brackets and comma separated.
As I mentioned in the comments, I would go REST + JSON. However, in case you want to test another approach, I've posted some code in Github that provides a wrapper around the NSURL loading mechanism of Cocoa, which might be of help.
It was originally intended to load XML data formatted as Apple property lists (plists) which are the native serialization mechanism of Cocoa. There are Ruby and Python libraries available to generate XML in the plist format (I suppose some of them also generate binary plists, which are faster to parse and deserialize).
In line 154 you can see how the property list loaded into an NSData instance is transformed into a native NSDictionary.
http://github.com/akosma/iphonerestwrapper/blob/master/Classes/Wrapper.m#L154
精彩评论