Я согласен, что с помощью 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 для взаимодействия с этой сетью сервисный интерфейс).
не тянет xml в живую программу? Динамически генерируется XML? –
Лучший способ сделать это - создать REST API http://www.restapitutorial.com/lessons/whatisrest.html – KyleK
REST API позволит двунаправленную связь через XML или JSON. –