2013-06-06 2 views
0

У меня есть сайт и приложение для iOS для этого сайта. Прямо сейчас приложение связывается с сайтом, вытаскивая XML-файл. Мне любопытно, как я мог бы создать API, чтобы они могли говорить живым программным способом. Это позволит мне делать более сложные вещи с помощью приложения.У меня есть сайт и приложение для iOS. Как я буду строить API для них?

Я никогда не делал ничего подобного раньше, и я не знаю, с чего начать, какие-либо предложения?

Сайт написан на PHP, но не так, потому что API, который я хочу создать, будет отделен от существующего кода.

-Спасибо

+0

не тянет xml в живую программу? Динамически генерируется XML? –

+2

Лучший способ сделать это - создать REST API http://www.restapitutorial.com/lessons/whatisrest.html – KyleK

+1

REST API позволит двунаправленную связь через XML или JSON. –

ответ

1

Я согласен, что с помощью REST API, отличный подход.

Возможно, это может быть иллюстрацией взгляда на взаимодействие с веб-сервером, если вы собираетесь писать свой собственный веб-сервис без помощи REST API. Если вы можете обойти этот подход, вы можете решить это с помощью REST API, возможно, лучше понять, что происходит за кулисами (и оценить, что API-интерфейсы приносят в таблицу).

Например, вот некоторые тривиальный PHP, который получает ввод JSON из устройства IOS в виде:

{"animal":"dog"} 

И он возвращает JSON, указывающий звук, что животное будет делать:

{"status":"ok","code":0,"sound":"woof"} 

(где «status» ли был запрос «ok» или «error», где «code» является цифровой код для идентификации типа ошибки, если таковые имеются, и «sound» есть, если й Запрос е был успешным, то звук, что животное делает)

Исходный PHP-код, animal.php, для этого простого примера может выглядеть следующим образом:.

<?php 

// get the json raw data 

$handle = fopen("php://input", "rb"); 
$http_raw_post_data = ''; 
while (!feof($handle)) { 
    $http_raw_post_data .= fread($handle, 8192); 
} 
fclose($handle); 

// convert it to a php array 

$json_data = json_decode($http_raw_post_data, true); 

// now look at the data 

if (is_array($json_data)) 
{ 
    $animal = $json_data["animal"]; 
    if ($animal == "dog") 
     $response = array("status" => "ok", "code" => 0, "sound" => "woof"); 
    else if ($animal == "cat") 
     $response = array("status" => "ok", "code" => 0, "sound" => "meow"); 
    else 
     $response = array("status" => "error", "code" => 1, "message" => "unknown animal type"); 
} 
else 
{ 
    $response = array("status" => "error", "code" => -1, "message" => "request was not valid json"); 
} 

echo json_encode($response); 

?> 

КСН код для взаимодействия с этим сервером может выглядеть :

- (IBAction)didTouchUpInsideSubmitButton:(id)sender 
{ 
    NSError *error; 

    // build a dictionary, grabbing the animal type from a text field, for example 

    NSDictionary *dictionary = @{@"animal" : self.animalType}; 
    NSData *requestData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error]; 
    if (error) 
    { 
     NSLog(@"%s: error: %@", __FUNCTION__, error); 
     return; 
    } 

    // now create the NSURLRequest 

    NSURL *url = [NSURL URLWithString:@"http://insert.your.url.here.com/animal.php"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    [request setHTTPMethod:@"POST"]; 
    [request addValue:@"text/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:requestData]; 

    // now send the request 

    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
    [NSURLConnection sendAsynchronousRequest:request 
             queue:queue 
          completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 

           // now parse the results 

           // if some generic NSURLConnection error, report that and quit 

           NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 
           if (error) 
           { 
            NSLog(@"%s: NSURLConnection error=%@", __FUNCTION__, error); 
            return; 
           } 

           // otherwise, we'll assume we have a good response, so let's parse it 

           NSDictionary *results = [NSJSONSerialization JSONObjectWithData:data 
                         options:0 
                         error:&error]; 

           // if we had an error parsing the results, let's report that fact and quit 

           if (error) 
           { 
            NSLog(@"%s: JSONObjectWithData error=%@", __FUNCTION__, error); 
            return; 
           } 

           // otherwise, let's interpret the parsed json response 

           NSString *status = results[@"status"]; 

           if ([status isEqualToString:@"ok"]) 
           { 
            // if ok, grab the "sound" that animal makes and report it 

            NSString *result = results[@"sound"]; 

            dispatch_async(dispatch_get_main_queue(),^{ 
             self.label.text = result; 
            }); 
           } 
           else 
           { 
            // if not ok, let's report what the error was 

            NSString *message = results[@"message"]; 

            dispatch_async(dispatch_get_main_queue(),^{ 
             self.label.text = message; 
            }); 
           } 
          }]; 
} 

Очевидно, что это тривиальный пример (более вероятно, сервер PHP будет хранить или поиск данных в базе данных на сервере), но более полный PHP веб-служба выходит за рамки данной прошивкой конкретный вопрос. Но, надеюсь, это дает вам представление о некоторых элементах построения приложений для iOS с некоторыми веб-службами на основе PHP (создайте интерфейс веб-сервиса, напишите PHP для поддержки этого интерфейса, напишите код iOS для взаимодействия с этой сетью сервисный интерфейс).

+1

Ты босс. Это именно то, что я хотел знать. Спасибо вам большое за это. – sonicrocketman

Смежные вопросы