0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPでpostできるAPIを作ろう!

Posted at

#はじめに
Swiftを勉強し始めてからSwiftでの仕事をしたいとこだわり続けてきたんですけど、API作るためにPHPの勉強したらPHPちょっと楽しいかもと思っています。

今回は簡単なPOSTできるAPIを作ろう思います。
サーバーサイドはPHP、クライアントサイドはSwiftを使います。

#PHPのコード
説明を挟みながら少しずつコードを加えていく書き方でいきます。

api.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 処理
}

こちらはリクエストがPOSTかどうかの判定です。
GETなどの他のリクエストの処理をしたい場合は
'POST'の部分を変えてください。

api.php
$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じゃないときというコメントの下に書いています。

api.php
$post_message = $_POST['post_message'];
//データベースに接続して保存したり...
$response['error'] = false;
$response['message'] = "成功のメッセージ";

//スコープの一番外に
print json_encode($response);

$_POST["キー"]でpostで送信した値を取り出せます。
php側はこんな感じです。
実際は正規表現などを用いてバリデーションチェック等を挟むことになると思います。

#Swiftのコード

PostViewController.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にこだわる気持ちが薄れてきました。
あと、全く関係ない話ですが最近スペースキーの反応が悪いので掃除したんですが直らなくてモヤモヤしてます。

今回は以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?