こんにちは!株式会社メモリアインクのふくしまです!
今回は、Swiftを使用したAPIの連携方法と、API通信で発生する可能性のあるエラーを効果的に処理する方法について解説します。
この記事を読んで分かること…
・APIって何?
・APIリクエストの構築方法(URLSession, Alamofire)
・Alamofireを使った実際の具体的なAPI連携方法
APIとは何か?
APIの基本的な定義と仕組み
APIは、異なるソフトウェア間でデータを交換し、機能を共有するためのインターフェイスです。Web APIは、インターネット経由で情報を共有するために広く使用されています。
REST APIとWeb APIの違い
REST(Representational State Transfer)は、Web APIを設計するための一般的なアーキテクチャスタイルです。RESTful APIは、HTTPメソッドを使用してリソースにアクセスします。
SwiftでのAPI連携の基礎
APIリクエストの構築方法
APIリクエスの構築方法には、Appleによって提供された標準ライブラリ(URLSession)と外部ライブ(今回はAlamofire)を利用する方法があります。
Alamofireを利用すると、より簡潔なコードでAPIリクエストの構築ができるので、URLSessionとAlamofireの違いを見ていきましょう!
URLSession
Swiftでは、URLSession
クラスを使用してAPIリクエストを行います。以下は、GETリクエストを送信する基本的なコード例です。
let url = URL(string: "https://api.example.com/data")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
// レスポンスとデータの処理
}
task.resume()
このコードは、指定されたURLからデータを非同期で取得し、結果を処理する方法を示しています。URLSession.shared.dataTask
は、ネットワークリクエストを作成し、task.resume()
でそのリクエストを開始します。
標準ライブラリの一部であり、外部ライブラリやフレームワークをプロジェクトに追加する必要はありません。
Alamofire
URLSession
のAPIリクエストの記述と比較するとかなりコードが簡潔に、より短く実装できます。
AF.request(urlString).responseJSON { response in
switch response.result {
case .success(let value):
print("Success with JSON: \(value)")
case .failure(let error):
print("Request failed with error: \(error)")
Alamofireを使用してAPIリクエストを送信するには、AF.request
メソッドを使用します。
APIのリクエストを送信した結果のresponseが帰ってきたタイミングで、クロージャ内のresponse in
の処理が発火し、APIのリクエストの結果(.success
または.failure
)によってエラーハンドリングの処理を記述します。
非同期の際に使われるクロージャ(無名関数)については以下の記事で詳しく解説しています!
実践!簡単なAPI連携のプロジェクト
ではここから、実際に天気情報を提供する「OpenWeatherMap API」を例に、APIリクエストの送信とレスポンスの処理方法を紹介します。
「OpenWeatherMap API」を使用するためにはAPIキーが必要になりますので、APIキーの取得手順を以下に示します。
APIキー取得手順
①以下のサイトからアカウントを作成する
https://home.openweathermap.org/users/sign_up
②登録したメールアドレスに本登録のメールが届くので、認証する
③トップ画面の「APIキー」をタップ
Alamofireのインストール
Alamofireをプロジェクトで利用する場合、CocoaPodsやCarthageなどの依存関係管理ツールでインスールをする必要があります。
今回は、CocoaPodsを使用したインストール方法を紹介します。
CocoaPodsが利用できる環境であることを前提とします。
①Podfile
を開き、以下の行を追加します。
pod 'Alamofire'
同時に、SwiftでJSONデータを扱う際の煩雑さを解消するためのサードパーティライブラリである「SwiftyJSON」もインストールしておきましょう。
②ターミナルでプロジェクトのルートディレクトリに移動し、pod install
を実行してAlamofireをインストールします。
pod 'SwiftyJSON'
APIリクエストの送信
①ViewControllerに紐づく画面を以下のように作っておく。
②①で配置したLabelとButtonをViewControllerに紐付け、APIリクエストの処理を記述する。
import UIKit
import Alamofire
import SwiftyJSON
class ViewController: UIViewController {
@IBOutlet weak var Weather: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
getWeather()
}
func getWeather() {
let APIKey: String = "{先ほど取得したAPIKey}"
let urlString: String = "http://api.openweathermap.org/data/2.5/weather?q=Tokyo&appid=\(APIKey)"
AF.request(urlString, method: .get).responseData{ (response) in
switch response.result {
case .success:
let json = JSON(response.data as Any)
self.Weather.text = json["weather"][0]["main"].string!
case .failure(let error):
print(error)
}
}
}
@IBAction func getCurrentWeather(_ sender: Any) {
getWeather()
}
}
コードの説明…
2行目・3行目でライブラリ「Alamofire」「 SwiftyJSON」 をインポートしています。getWeather()
メソッド内で、東京の天気情報を取得するためのリクエストをAPIのURL(http://api.openweathermap.org/data/2.5/weather?q=Tokyo&appid=(APIKey))に送信して、response
が帰ってきた際の処理を18行目の(response) in
以降で記述しています。.success
内にレスポンス成功時の処理を記述(20行目).failure(let error)
でAPIのエラー時の処理を記述(23行目)
ライブラリ「SwiftyJSON」を使うと、22行目のようなJSON形式で返ってきたレスポンスのパースや、22行目のようにその要素へのアクセスを直感的かつ簡単に行うことができます。
以上で、API連携の実装は完了です!
最後に、作成したアプリを実行して、取得したデータが問題なく表示されているか確認してみましょう!
データ連携の確認
データ連携が成功していることを確認するには、以下のポイントを検証します。
- APIリクエストが成功し、HTTPステータスコードが200であること。
- 受け取ったデータが期待通りの形式(この場合はJSON)であること。
- データを正しく解析し、必要な情報を取り出せていること。
開発中は、デバッグコンソールにこれらの情報を出力して確認します。また、エラーハンドリングを適切に行い、想定外の状況にも対応できるようにすることが重要です。
まとめ
お疲れ様でした!いかがだったでしょうか?
SwiftでのAPI連携は、外部データをアプリに取り込む上で不可欠です。この記事で解説した手順に従えば、APIからデータを取得し、アプリで利用する基本的なフローを構築できます。また、連携したデータの確認方法を理解することで、開発プロセスがよりスムーズになり、ユーザーに価値あるサービスを提供できるようになりますので、積極的にAPIを活用していきましょう!
この記事が皆様の開発ライフの一助になれれば幸いです!
この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
コメント