#はじめに
Swiftを勉強し始めてからSwiftでの仕事をしたいとこだわり続けてきたんですけど、API作るためにPHPの勉強したらPHPちょっと楽しいかもと思っています。
今回は簡単なPOSTできるAPIを作ろう思います。
サーバーサイドはPHP、クライアントサイドはSwiftを使います。
#PHPのコード
説明を挟みながら少しずつコードを加えていく書き方でいきます。
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 処理
}
こちらはリクエストがPOST
かどうかの判定です。
GET
などの他のリクエストの処理をしたい場合は
'POST'
の部分を変えてください。
$response = array();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['post_message']) === false) {
$response['error'] = true;
$response['message'] = "エラーのメッセージ";
} else {
// nullじゃないとき
}
}
isset()
は値がnullかどうかを調べてくれる関数です。
nullならfalse,そうでないならtrueを返してくれます。
今回の場合ポストで送信されてきたpost_message
というキーの連想配列の値がnullの時にレスポンスでエラーを出すようにしています。
以下のコードはnullじゃないときというコメントの下に書いています。
$post_message = $_POST['post_message'];
//データベースに接続して保存したり...
$response['error'] = false;
$response['message'] = "成功のメッセージ";
//スコープの一番外に
print json_encode($response);
$_POST["キー"]
でpostで送信した値を取り出せます。
php側はこんな感じです。
実際は正規表現などを用いてバリデーションチェック等を挟むことになると思います。
#Swiftのコード
class PostViewController: UIViewController {
viewdidLoad() {
super.viewdidLoad()
let url = URL(string: "apiのURL")!
let request = NSMutableURLRequest(url: url)
//httpMethodの設定
//ここをPOSTにしておくとpostできる(当たり前)
request.httpMethod = "POST"
//渡したい値をセットする
//文字列だけど=の左の文字列がPHPの連想配列のキーになる。
//渡したい値が複数ある場合は&で繋げます。(web開発している人なら当たり前にわかる)
let postParams = "post_message=swiftからのpost"
request.httpBody = postParams.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
if error != nil {
print("error is \(error!)")
return
}
do {
let myJSON = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
if let parseJSON = myJSON {
var msg: String!
msg = parseJSON["message"] as? String
print(msg!)
}
} catch {
print(error)
}
}
task.resume()
}
}
今回はpostのAPIについての記事なのでswiftの説明はコメントのみとさせていただきます。
これでビルドしてみるとログに$response['message']
で設定した文字列が表示されていると思います。
実際にちゃんと値が渡せているか確認するなら
$response['error'] = false;
$response['message'] = "post_message is ".$post_message ;
で確認できると思います。
#まとめ
swiftを使う仕事をしたいと思いスキルを上げるために勉強を始めたphpですが割と楽しくなってきてswiftにこだわる気持ちが薄れてきました。
あと、全く関係ない話ですが最近スペースキーの反応が悪いので掃除したんですが直らなくてモヤモヤしてます。
今回は以上です。