iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

iOS / iPhoneからRESTfulサービス(REST API)にアクセスする方法【Swift】

SwiftでREST APIにアクセスするには、Swift標準のネットワーキング機能であるURLSessionDataTaskを使って、いくつかの手順を踏む必要があります。

まず「REST」とは、Representational State Transfer(表現状態転送)の略で、Webサービスが従うべき一連の制約を定義したアーキテクチャスタイルのことです。この記事では、SwiftでRESTfulなWebサービスへアクセスする基本的な手順を順番に解説していきます。

手順1:URLSessionオブジェクトを作成する

最初に行うのは、デフォルト設定を使用してセッションオブジェクトを作成することです。以下のコードで実現できます。

let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)

手順2:URLRequestオブジェクトを作成する

次に、必要なHTTPメソッドタイプのURLRequestを作成します。指定できるメソッドは「GET」「POST」「DELETE」「PUT」などです。ここでは例として「GET」タイプを使用します。

let url = URL(string: URLString)
var request : URLRequest = URLRequest(url: url!)
request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

リクエストヘッダーにapplication/jsonを指定することで、JSON形式のデータを送受信する前提であることをサーバー側に伝えています。

手順3:dataTaskを実行する

リクエストオブジェクトを作成したら、そのURLに対してdataTaskを実行します。レスポンスを受け取り、ステータスコードごとに処理を分岐させるのがポイントです。完全なdataTaskメソッドは以下のようになります。

let dataTask = session.dataTask(with: url!) {
    data,response,error in
    guard let httpResponse = response as? HTTPURLResponse, let receivedData = data
    else { print("error: not a valid http response")
        return
    }
    switch (httpResponse.statusCode) {
        case 200: //成功レスポンス
            break
        case 400:
            break
        default:
            break
    }
}
dataTask.resume()

guard let文でレスポンスとデータの有効性を確認し、ステータスコードが200なら成功、400ならエラーとして処理を分けています。最後にresume()を呼び出すことで、タスクが実際に開始される点にも注意してください。

完成形:関数としてまとめて使う

これまでのコードをひとつの関数にまとめると、アプリ内のどこからでも再利用できるようになります。

func hitAPI(_for URLString:String) {
    let configuration = URLSessionConfiguration.default
    let session = URLSession(configuration: configuration)
    let url = URL(string: URLString)
    var request : URLRequest = URLRequest(url: url!)
    request.httpMethod = "GET"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    let dataTask = session.dataTask(with: url!) {
        data,response,error in
        // GETリクエストの成功可否をHTTPレスポンスでチェック
        guard let httpResponse = response as? HTTPURLResponse, let receivedData = data
        else {
            print("error: not a valid http response")
            return
        }
        switch (httpResponse.statusCode) {
            case 200:
                // 成功レスポンス
                break
            case 400:
                break
            default:
                break
        }
    }
    dataTask.resume()
}

注意点:App Transport Security(ATS)への対応

注意: 一部のAPIにアクセスするには、Info.plistファイルでApp Transport Security(ATS)の例外設定を許可する必要がある場合があります。特にHTTP(非暗号化)通信を行うAPIの場合は、例外ドメインの設定が必要になることがあります。

なお、このサンプルコードは実際にデータを取得するためのAPIが必要となるため、単体では出力結果は表示されません。実際のAPIエンドポイントを指定して動作を確認してみてください。

  1. iOS 15からiOS 14.6へダウングレードする方法|ベータ版をやめて安定版に戻す完全ガイド

    iOS 15からiOS 14へのダウングレード方法 最新機能をいち早く試すにはベータ版が便利ですが、日常使用では必ずしも快適に動作するとは限りません。勢いでiOS 15にアップグレードしたものの、後悔している方もいるのではないでしょうか。この記事では、安定版であるiOS 14.6に戻す方法を詳しく解説します。 最も簡単な方法:ベータプロファイルの削除 iOS 14.6にダウングレードする最も簡単な方法は、iOS 15のベータプロファイルを削除し、次の正式アップデートを待つことです。手順は以下の通りです。 iPhoneの「設定」を開き、「一般」をタップします。 「プロファイルとデバイス管理」

  2. iOS 12のインストール方法|GM版・IPSWファイルを使った2つの手順を解説

    Appleは、待ち望まれていたiOS 12のリリース日を9月17日と発表しました。しかし、正式リリースまで待ちたくない方には、今すぐiOS 12のゴールドマスター(GM)版をインストールする方法があります。そのためには「Apple Beta Software Program」に参加し、お使いのデバイスを登録する必要があります。 正式版のiOS 12は約1週間後に一般公開される予定で、「スクリーンタイム」「Memoji」「Siriショートカット」、改善された通知機能など、多数の新機能が利用できるようになります。 ポイント:iOS 12は、古い機種から新しい機種まで、あらゆるiPhoneの応答速度