HTTP通信の基本構成要素
モバイルアプリ開発ではサーバーとのデータ交換にHTTPプロトコルを活用します。主要な要素は以下の通りです:
- エンドポイントURL:通信先のサーバーアドレス
- リクエストパラメータ:サーバーへ送信する認証情報やクエリデータ
- レスポンスデータ:サーバーから返却されるJSON/XML形式の情報
通信処理の実装フロー
基本的な実装手順は次の通りです:
- URLにパラメータを付加(例:
https://api.example.com/data?account=user1&token=xyz) - 非同期リクエストの送信
- 受信データの形式変換と処理
データフォーマットの処理
サーバーレスポンスの主要フォーマット対応方法:
JSONデータの変換
FoundationフレームワークのJSONSerializationクラスを使用:
guard let jsonObject = try? JSONSerialization.jsonObject(
with: responseData,
options: [.mutableContainers]
) as? [String: Any] else { return }
変換ルール:
{ }→ ディクショナリ型[ ]→ 配列型"text"→ 文字列型123→ 数値型
ネットワーク通信の実装例
URLSessionを用いた非同期通信の実装パターン:
let account = "user1"
let authKey = "secure_password"
// 1. リクエストURLの構築
var components = URLComponents(string: "https://auth.example.com/verify")!
components.queryItems = [
URLQueryItem(name: "account", value: account),
URLQueryItem(name: "authKey", value: authKey)
]
// 2. リクエストオブジェクトの生成
var request = URLRequest(url: components.url!)
request.httpMethod = "POST"
request.httpBody = "account=\(account)&authKey=\(authKey)".data(using: .utf8)
// 3. 通信タスクの実行
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { return }
// レスポンスデータの処理
}
task.resume()
セキュリティ対策の実装
通信データの安全性を確保するための手法:
- 機密情報はPOSTリクエストで送信(URLにパラメータを含めない)
- パスワードはSHA-256でハッシュ化(例:
SHA256(SHA256(plainText))) - コード難読化による逆解析対策:
// 変換前 class UserProfile { func authenticate() { ... } } // 変換後 class A { func b() { ... } }
ネットワーク状態の監視
接続状況のリアルタイム監視実装:
import Network
let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print(path.isExpensive ? "モバイル回線" : "Wi-Fi接続")
}
}
let queue = DispatchQueue(label: "NetworkMonitor")
monitor.start(queue: queue)
// 後処理
monitor.cancel()