POST形式の使い方 | Unity Forum | Tech Stadium Forum

POST形式の使い方
 
通知
すべてクリア

POST形式の使い方  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1324
18/03/2021 10:29 am  
質問箇所:WWWFormとWebRecest.Postについて
 
WWWFormのUnityスクリプトリファレンスを調べました。
https://docs.unity3d.com/ja/current/ScriptReference/WWWForm.html
 
「SQL データベースのテーブルに保存されたハイスコアを取得するための サンプルスクリプト」
のスクリプトでおそらく課題でやらなきゃいけないのはこういうことだろうなと思い読んでみたのですが、何をしたいのかさえよくわかりませんでした。
string playName = "Player 1";
int score = -1;
//---------省略-------------------
form.AddField( "game", "MyGameName" );
form.AddField( "playerName", playName );
form.AddField( "score", score );
var download = UnityWebRequest.Post(highscore_url, form);
具体的に上記は何をしているのでしょうか?
form.AddField( "playerName", playName );
playerNameというフィールドにplayeName= "Player 1"
という値を設定しているんだと思いますが、
これにより、downloadに取得できるデータが
データベース内の"Player 1"関連のレコードだけに限定できるという意味?ですか?
 
Request.Postを調べると、HTTPにデータを送信するための機能らしいですが、
講義スライドにあるような「指定したカテゴリのデータのみ選択的に取得する」方法を見つけることができませんでした。
 
HTTPメソッドとかWebRequestクラスとか一通り調べてみたのですけど、
どれもこれも言葉が難しすぎてちんぷんかんぷんなので、
form.AddField( "game", "MyGameName" );
form.AddField( "playerName", playName );
form.AddField( "score", score );
で、作成されたフォームというものが
var download = UnityWebRequest.Post(highscore_url, form);
こちらで具体的にどのような役割をしているのか
ご教授いただきたいです。
 

引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
18/03/2021 10:29 am  
質問内容がよくわからないのですがつまり
form.AddField( "game", "MyGameName" );
form.AddField( "playerName", playName );
form.AddField( "score", score );var download = UnityWebRequest.Post(highscore_url, form);
は何を行っているかを知りたいということですか?
 
これはWWWForm型で作られたクラスにAddFieldでフィールドを追加していき、それをPOST形式でデータをサーバーに送信するように設定されたUnityWebRequestを作成しています(POST形式とはHTTPで使われているメソッドのことで、主にデータを送信する時に使います)。
 
あとはSendWebRequestメソッドでリクエストを送り、メソッドの返り値によってエラーか否かを判断しています。
(クライアントからサーバへの要求することをリクエストといいます)簡単に言うと、「送信するデータをWWWForm型で準備し、それをPOST形式で扱えるようにUnityWebRequestデータを作成。
そのUnityWebRequestデータをサーバにリクエストし、返ってきた値を確認する」といった形でしょうか

返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1324
18/03/2021 10:31 am  
ご回答ありがとうございます!
質問文がぐちゃぐちゃとなってしまいお手数おかけしております。
 
「POST形式はデータを送信する時に使う」こちらについて、
理解いたしました!ただ、わからない部分は以下の部分です。
ーーー
講義「APIについて④」のカリキュラム「T07_day10_Api-Basic.pdf」39pの課題のページで、
WebRequest.POST通信を行う事で、指定したデータのみ取得する処理の作成等が行えるようになります。
例:
・POSTパラメータでレコード番号をサーバーへ送り、特定のレコードのみ取得する。
・テーブルのリストを全て取得するのではなく、指定したカテゴリの情報のみ取得する等。
とあり、こちらの「指定したデータのみ取得」
というのは例えば「メッセージボード」のデータベースで
名前、性別、メッセージ
というカラム(フィールド)があったとして、
「WebRequest.POST通信を行うことで、性別が男の人のレコードだけを取得できる」
というようなことを言っているのだと思いますが
このようなことをどのようにPOST通信を利用して行えるのかわかりません。
ーーーーー
例えば
form.AddField( "name", "aiko" );
form.AddField( "gender", "female" );
form.AddField( "message", "good morning!" );
var download = UnityWebRequest.Post(messageboard_url, form);
のようにPOST通信を行ったとしても、
データベースに
{"name":"aiko","gender":"female","message":"good morning!"}
のようなデータを追加する処理を行えるだけだからです。
ーーー
このPOST通信の機能がここからどのように「性別が男の人のレコードだけを取得する」のような処理を行えるのかまったく理解できませんでした。
WebRequest.POST通信を行う事で、指定したデータのみ取得する処理の作成等が行う
こちらはどのように行うのでしょうか?
再度お手数おかけしますが、ご回答のほど何卒よろしくお願いいたします。

返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
18/03/2021 10:32 am  
form.AddField()で受け取った値を取得するようにphp側を記述すればいいと思います。
//ソートするデータタイプとソートタイプの指定
$dataType = $this->request->getData("DataType");
$sortType = 'DESC';
//取得する数を指定
$limitNum = 10;//DBのBakeしたテーブルから指定してdataTypeクエリを取得
$query = $this->Database->find('all')->order([$dataType => $sortType])->limit($limitNum)->toArray();

返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1324
18/03/2021 10:32 am  

ご回答ありがとうございます!
スライドの書き方からUnityWebRequwest.Post自体に、queryのような機能があるのかと思っておりました。
やはりphp側でqueryを利用するのですね!
やっと納得しました。ありがとうございます!


返信引用
共有:
タイトルとURLをコピーしました