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

【Swift入門】iOSアプリでHTTPリクエストを行う方法|URLSessionとDataTaskの使い方を徹底解説

iOSアプリでHTTPリクエストを実行するには、URLSessionDataTaskを使用します。具体的には、設定(Configuration)、セッション(Session)、URL、リクエスト(Request)、データタスク(DataTask)の各オブジェクトを順番に作成していきます。本記事では、その一連の手順をわかりやすく解説します。

HTTPリクエストの種類

HTTPリクエストには複数の種類があり、サーバーに対してどのような操作を行いたいかによって使い分けます。基本的なリクエストタイプは以下の通りです。

  • GET:データの取得
  • POST:データの送信・新規作成
  • PUT:データの更新
  • DELETE:データの削除

これらは利用するAPIの仕様に応じて自由に選択できます。基本的な処理の流れはどのリクエストタイプでも共通しています。ここでは例として、「DELETE」タイプのリクエストを実装する手順を見ていきましょう。

HTTPリクエストの実装手順

1. セッションオブジェクトを作成する

まず、デフォルト設定を使用してセッションオブジェクトを作成します。

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

2. URLRequestオブジェクトを作成する

次に、必要なタイプ(GET・POST・PUT・DELETE)のURLRequestを作成します。この例では「DELETE」タイプを指定しています。また、ヘッダーの「Content-Type」と「Accept」の両方に「application/json」を設定することで、JSON形式のデータを扱うことをサーバーに伝えています。

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

3. DataTaskを実行する

リクエストオブジェクトを作成したら、先ほど用意したURLに対してdataTaskを実行します。レスポンスのステータスコードを判定することで、成功(200)やエラー(400など)に応じた処理を記述できます。

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: //success response.
            break
        case 400:
            break
        default:
            break
    }
}
dataTask.resume()

重要なポイントは、最後にdataTask.resume()を呼び出してタスクを開始することです。この呼び出しを忘れると、リクエストは一切実行されないので注意しましょう。

4. 関数としてまとめて再利用する

ここまでのコードを1つの関数にまとめれば、アプリ内のどこからでも簡単にAPIを呼び出せるようになります。

func hitAPI(_for URLString:String) {
    let configuration = URLSessionConfiguration.default
    let session = URLSession(configuration: configuration)
    let url = URL(string: URLString)
    //let url = NSURL(string: urlString as String)
    var request : URLRequest = URLRequest(url: url!)
    request.httpMethod = "DELETE"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    let dataTask = session.dataTask(with: url!) { data,response,error in
        // 1: Check HTTP Response for successful GET request
        guard let httpResponse = response as? HTTPURLResponse, let receivedData = data
        else {
            print("error: not a valid http response")
            return
        }
        switch (httpResponse.statusCode) {
            case 200:
                //success response.
                break
            case 400:
                break
            default:
                break
        }
    }
    dataTask.resume()
}

注意: 一部のAPIにアクセスする場合は、info.plistファイルでApp Transport Security(ATS)の例外設定を許可する必要があることがあります。

なお、このサンプルコードはデータを削除する実際のAPIが必要になるため、単体で実行しても出力結果は表示されません。実際に動作を確認する際は、テスト用のAPIエンドポイントを用意してください。

  1. 予算ゼロでOK!Macの無料ツールだけでApp StoreにふさわしいiOSアプリプレビュー動画を作る方法

    はじめに 2014年、AppleはApp Storeに「アプリプレビュー」動画を追加できるようにしました。アプリプレビューは、ダウンロード前にアプリの魅力を潜在ユーザーへ伝えるための最も効果的な手段です。StoreMavenの調査によると、プレビュー動画があるアプリは、ないアプリに比べて約3倍インストールされやすいことが分かっています。 しかし、個人開発者の多くは、プロに制作を依頼する予算がないのが現実です。筆者も最近同じ状況に陥りましたが、調べてみると、無料ツールだけでも高品質なアプリプレビューを作れることが判明しました。 本記事では、以下の流れで順番に解説していきます。 コンテンツの準備

  2. iOS 11の「メモ」アプリで書類をスキャンしてPDF化する方法

    iOS 11の登場は、新機能の追加だけでなく、既存アプリの機能強化ももたらしました。特に「メモ」アプリには、ユーザーがまだ気づいていないかもしれない便利な変更が加えられています。この記事では、iPhoneに標準搭載されている「メモ」アプリと、その新機能について詳しく解説します。メールで書類を送るために、わざわざ近くのお店まで行って紙の書類をデジタル化した経験はありませんか?スマホのカメラで書類を撮影して送るという方法もありますが、傾きや光の反射などがあり、必ずしも最適な選択肢とは言えません。「メモ」アプリの書類スキャン機能とはしかし、iOS 11の「メモ」アプリに追加された「書類をスキャン」機