iPhone:对example.com API进行Web调用

时间:2011-04-14 02:52:20

标签: iphone api ios4 iphone-sdk-3.0

我想验证从我的iPhone应用程序,我可以调用我的自定义网站API(PHP)并发送/接收信息没有任何问题。如果是这样,是否有首选的交易语言? XML,JSON,还有什么?

我只是不确定是否需要通过SSL进行任何网络通话......这只是一个无害的问题。

4 个答案:

答案 0 :(得分:0)

您可以使用XML或JSON。 JSON被认为比XML更轻量级。

答案 1 :(得分:0)

我认为json应该是解析的好媒介。 json-framework可以很容易地将NSDictionary和原始对象转换为json数据,反之亦然。

使用json轻松实现Web服务。

{ name : value , name : value } = NSDictionary
[ value , value , value] = NSArray
NSString, NSNumber, BOOL and NSNull are the items it create, I believe.

查看此页面https://github.com/stig/json-framework

我将包含一些针对json-framework构建的代码,并与json Web服务一起使用。

- (NSDictionary*) sendJSONRPCRequestTo:(NSString*) url 
                            forCommand:(NSString*)command 
                        withParamaters:(NSMutableArray*) parameters 
                           synchronous:(BOOL) sendSynchronous
{

    if (self.commandId == nil)
    {
        self.commandId = @"1";//Just set a commandID
    }

    NSMutableURLRequest *request = [self.baseTransaction makeNewRequestFor:url];

    NSMutableDictionary *mainPackage = [NSMutableDictionary dictionary];
    [mainPackage setValue:self.commandId forKey:@"id"];
    [mainPackage setValue:command forKey:@"method"];
    [mainPackage setValue:parameters forKey:@"params"];

    NSString *jsonData = [mainPackage JSONRepresentation];

    [request setValue:command forHTTPHeaderField:@"X-JSON-RPC"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

    if (jsonData != nil && [jsonData isEqual:@""] == NO)
    {
        [request setHTTPMethod:@"POST"];
        [request setValue:[[NSNumber numberWithInt:[jsonData length]] stringValue] forHTTPHeaderField:@"Content-Length"];
    }

    [request setHTTPBody:[jsonData dataUsingEncoding:NSUTF8StringEncoding]];
    if (sendSynchronous)
    {
        NSHTTPURLResponse   * response = nil;
        NSError             * error = nil;

        NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

        NSString *jsonResult = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];

        NSDictionary *jsonDict = nil;

        @try 
        {
            jsonDict = [jsonResult JSONValue];
        }
        @catch (NSException * e) 
        {
            NSLog(@"Error: %@",jsonResult);
            jsonDict = [NSMutableDictionary dictionary];
                [jsonDict setValue:self.commandId forKey:@"id"];
                [jsonDict setValue:@"Unable to call function on server" forKey:@"error"];
                [jsonDict setValue:[NSNull null] forKey:@"result"];
        }
        @finally
        {
            return jsonDict;
        }
    }

    return nil;
}

此代码用于.net服务器上的jayrock webservices。

答案 2 :(得分:0)

SDK缺少对XML和JSON的本机支持。对于JSON,第三方库支持更好一点 - 我会使用它。

您不需要使用SSL - 您可以使用您想要的任何协议和端口。

您可以使用[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];NSMutableURLRequestNSURLResponseNSError作为三个参数。

答案 3 :(得分:0)

您可以使用HTTP库或内置Cocoa Framework代码调用任何URL。

我推荐ASIHTTPRequest,它允许异步HTTP请求和简单的进度报告。

您可以使用NSXMLParser类解析返回的数据(作为XML)。这个类的缺点是它是线性的而不是那么灵活。 Ray Wenderlich有an article on the topic of XML parsing on iOS

请参阅提及this questionJSON parser for iOS