現在Swiftの学習をしている初学者ですが、不明点があり、ご教示頂きたくご質問いたしました。
SwiftとMySQLのデータ通信に関しての質問です。
目標としているアプリの機能なのですが、SwiftとMySQL(AWSRDS)用いたログイン機能とチャット機能(ユーザーの会員情報なども見れる)を実装したいと考えています。(FirebaseといったDBがあるのは存じていますが、今回はすでにWebアプリケーションとしてリリースしているサービスをiOSアプリ(ネイティブアプリ)としても作成したいという前提で考えていますのでMySQLを使用したいと思っています)
調べたところ、まずSwiftとMySQLをやりとりするにはJSONのHTTP通信を使うのがいいということで、LaravelにてREST APIというものを作成し、Swift側でRDBの中身をJSON形式で取得することはなんとかできました。
しかし、REST APIでいうStore,Update,DestroyなどのメソッドをSwift側でどうやって扱うのかがわからないという状況です。
REST APIの作成方法は下記サイトを参考にしました。テストではデータの構成は少し変えています。
https://noumenon-th.net/programming/2020/02/12/laravel-api/
Swift側ではSwiftyJSONとAlamofireを使い、データを取得しました。下記がコードです。
API処理呼び出しメソッド(URLは隠しています)
Swift
1 func api() { 2 let urlString = "http://??????????/api/member" 3 let encodeUrlString:String = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! 4 userInfo.userDelegate = self 5 userInfo.SetData(resultCount: 2, encodeUrlString: encodeUrlString) 6 }
API処理クラス
import Foundation import SwiftyJSON import Alamofire protocol UserInfoProtocol { func catcheData() } class UserInfo { var idArray = [Int]() var nameArray = [String]() var emailArray = [String]() var passwordArray = [String]() var updkbnArray = [String]() var userDelegate:UserInfoProtocol? func SetData(resultCount:Int,encodeUrlString:String) { AF.request(encodeUrlString, method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON { (response) in // print(response.debugDescription) switch response.result { case .success: do { let json:JSON = try JSON(data: response.data!) for i in 0...resultCount - 1 { if json["data"][i]["name"].string == nil { print("ヒットしませんでした") return } self.idArray.append(json["data"][i]["id"].int!) self.nameArray.append(json["data"][i]["name"].string!) self.emailArray.append(json["data"][i]["email"].string!) self.passwordArray.append(json["data"][i]["password"].string!) self.updkbnArray.append(json["data"][i]["updkbn"].string!) } self.userDelegate?.catcheData() } catch { } break case .failure(_): break } } } }
同じようなコード書き方でStore,Update,Destroy,などの処理をする方法はありますでしょうか。
またはもっと効率の良い書き方があればご教示いただけますと幸いです。
二つ目の質問で恐縮なのですが、SwiftとMySQLでログイン機能を実装する場合、
1.Swiftより登録情報をLaravelへHTTP通信で登録。
2.ログインする場合、入力されたemail,passwordをLaravelへHTTP通信で送り、データチェックし、OKであれば
Swift側でUserdefaultsを使用し、ログインのセッション管理などをする
上記のようなイメージで合っておりますでしょうか。
色々長く書いてしまいましたが、上記について、知識をお持ちの方がいらっしゃいましたらご教示いただけますと幸いです。
また、情報不足など、至らない点がございましたらご指摘いただけますと幸いです。
開発環境
AWS Amazon Linux2
MySQL
PHP7
Laravel6
Swift5
Xcode12
あなたの回答
tips
プレビュー