iPhone: веб-вызовы API example.com - PullRequest
0 голосов
/ 14 апреля 2011

Я хочу убедиться, что из моего приложения для iPhone я могу вызывать API своего пользовательского веб-сайта (PHP) и отправлять / получать информацию без каких-либо проблем. Если да, то есть ли предпочтительный язык транзакций? XML, JSON, что-то еще?

Я просто не уверен, нужно ли делать какие-либо веб-звонки только через SSL или нет ... просто безобидный вопрос.

Ответы [ 4 ]

0 голосов
/ 14 апреля 2011

Вы можете совершать звонки на любой URL, используя библиотеку HTTP или встроенный код Cocoa Framework.

Я рекомендую ASIHTTPRequest , который допускает асинхронные HTTP-запросы и простую отчетность о ходе выполнения.

Вы можете анализировать возвращаемые данные (как XML) с помощью класса NSXMLParser . Недостатком этого класса является то, что он линейный и не такой гибкий. У Рэя Вендерлиха есть статья на тему парсинга XML на iOS .

См. этот вопрос , в котором упоминается анализатор JSON для iOS .

0 голосов
/ 14 апреля 2011

Я думаю, что json должен быть хорошим средством для анализа.json-framework позволяет легко превращать NSDictionary и примитивные объекты в данные json и наоборот.

Делает веб-сервисы используя json бриз.

{ 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-фреймворка и работает с веб-сервисами json.

- (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;
}

Этот код используется против веб-сервисов jayrock на сервере .net.

0 голосов
/ 14 апреля 2011

В SDK отсутствует собственная поддержка XML и JSON.Поддержка сторонних библиотек немного лучше для JSON - я бы использовал это.

Вам не нужно использовать SSL - вы можете использовать любой протокол и порт, который хотите.

Вы можетесделать что-то вроде [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];, с NSMutableURLRequest, NSURLResponse и NSError в качестве трех параметров.

0 голосов
/ 14 апреля 2011

Вы можете использовать XML или JSON. JSON считается более легким, чем XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...