0

私はウェブサイトとそのサイトのネイティブ iOS アプリを持っています。現在、アプリは XML ファイルをプルダウンしてサイトと通信しています。API をどのように作成して、ライブ プログラムで会話できるようにするのか興味があります。これにより、アプリでより高度なことができるようになります。

私はこれまでにこのようなことをしたことがなく、どこから始めればよいかわかりません。何か提案はありますか?

このサイトは PHP で書かれていますが、私が作成したい API は既存のコードとは別のものになるため、それほど重要ではありません。

-ありがとう

4

1 に答える 1

1

REST API の使用が優れたアプローチであることに同意します。

おそらく、REST API の助けを借りずに独自の Web サービスを作成しようとしている場合に、Web サーバーとの対話がどのように見えるかを確認することは、実例となる可能性があります。このアプローチを理解できれば、REST API を使用してこれに取り組むことができます。おそらく、舞台裏で何が起こっているかをよりよく理解することができます (そして、API がもたらすものを理解することができます)。

たとえば、iOS デバイスから次の形式で JSON 入力を受け取る簡単な PHP を次に示します。

{"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);

?>

そのサーバーと対話する iOS コードは次のようになります。

- (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 Web サービスは、この iOS 固有の質問の範囲を超えています。しかし、うまくいけば、iOS アプリが PHP ベースの Web サービスと対話するための構成要素のいくつかの感覚をつかむことができます。サービス インターフェイス)。

于 2013-06-06T18:43:28.653 に答える