質問: ### 前提 iOSアプリからMySQLデータベースに対し、POST、GETを使ってPHPファイルを介して操作するプログラムについて学んでいます。 現在、こちらのYoutube動画を参考に以下内容のプログラムを書きました。 <データの挿入> 1. iOSアプリで入力されたデータをSwiftプログラムからPOST送信でPHPファイル(https://exsample.com/insert.php)に受け渡す 2. insert.phpで受け取ったデータをMySQLデータベースにINSERT(PDO接続) <データの取得> 1. iOSアプリでテーブルビューの表示または更新ボタンのプッシュがされるとPHPファイル(https://exsample.com/get.php)に接続する 2. PHPファイル(get.php)でMySQLデータベースからデータを取得し、json_encodeで吐き出す 3. PHPファイル(get.php)から吐き出されたデータをiOS上のテーブルビューに表示する ### 最終的に実現したいこと 1 .会員制サイトのように、ユーザーごとに異なるデータをSELECTし、表示させたい。 2 . Swift上から、多くのテーブルを操作する必要性が出てきた場合にそなえ、Swift側のコードはもちろんのこと、php側のコードもクラス化して管理していきたい。 ### 質問内容 WEB APIはFacebookログインやTwitterログインなどの使い方が記されているようなメジャーなものしか使ったことがありません。 そのため、ふわっとした感じでしか理解ができていないので、学習している上で、たくさん疑問に感じたことがあり、理解を深めるために質問するに至りました。 <疑問点> 1 .現状のinsert.phpやget.phpは自分のアプリのみならず、どこからでもPOSTやGETがされてしまうと思うのですが、自分のアプリからのリクエストのみに制限するにはどうしたらよいのでしょうか? 2 .SSL通信を使用することを前提として、INSERT、SELECTする対象のテーブル名の指定方法は、HTTP_POSTで受け渡すデータにテーブル名を含めて渡す形で良いのでしょうか? 3 . データをリクエストしたユーザーに対し、個々人に必要なデータを返すような場合、どのようにユーザーの識別をするのでしょうか? 4 .いくつかのサイトでOauth認証を使ってセキュリティを強化すべきだと書いてあったのですが、Oauth認証の仕組み(アクセストークンの発行)自体を自分で作成し、ユーザーにアクセストークンを発行し、保持させ、リクエストがあるたびにアクセストークンで確認することでセキュリティを高めるということなのでしょうか? ユーザー登録にLINE Login PlatformやFacebookログインを認証として使用する場合はLINEやFacebookのアクセストークンを利用すれば良いのでしょうか? 説明が下手で申し訳ありません。 説明でわかりづらい点がございましたら補足させて頂きます。 ご教授くださると幸いです。
回答: ユーザ管理、認証、サービス実態と複数の処理を行う必要があり、それを同時に全て行おうとすると、混乱してしまうので、一つずつ解決していくことをお勧めします。 もちろん、その過程で一からやり直しをしなければいけないこともあるかもしれませんが。 ・テーブル名を渡す 基本的に、APIは機能実現のために用意します。 つまり、ユーザ登録処理や、商品情報取得などです。その際に具体的なテーブル名を指定する必要はなく、サーバ側で、その要求を受けた時に、必要なテーブルを参照して、その処理実現のための実装を行えば良いです。 ・自アプリのみに利用を制限 これはアカウント管理などとの連携が必要になりますが、ログインなどを行った時に、セッション情報をサーバから取得し、そのセッション情報を元にやり取りすることで制限可能です。 では、セッション開始時はというと、色々とやり方があり、OAuthなどがその一例になるかと。 これは単にユーザー・パスワードで行うことで代用できるので、最初はこれで実装して、置くと良いのではないでしょうか。 様々なライブラリがあるので、それらを利用することで実装自体の敷居が下がると思います。それらを利用する前に、ある程度自分で実装することで、ライブラリの利用についてもよりよく理解が進むかと思います。