質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

15743閲覧

POSTメソッドでURLのみのwebAPIは作れますか?

keisuke_wada

総合スコア15

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

2クリップ

投稿2016/10/18 12:27

編集2016/10/18 18:04

こんにちは、新米の和田です。
現在依頼されている業務でわからないことがあり、質問させていただきます。

###前提・実現したいこと
phpでX(仮)というサービスのDBにデータを格納するwebAPIを作りたい。
APIの内容は、必要な情報をパラメータに付与して格納するものです。

例えば、usersというテーブルにuser_idとuser_nameを格納するAPIを作る場合、GETメソッドなら下記のようになります。(なるはずです!)

https://x.hoge/api/reg?user_id=1234&user_name=shinmai_no_wada


user_id="1234" user_name="shinmai_no_wada"
上記の""で囲まれた部分は、ユーザーが実際に書き込む部分です。

しかし、セキュリティ上の問題もあるのでPOSTメソッドで開発しなければいけません。

###GETメソッドと同様の方法(URLのみでパラメータを渡す)がPOSTメソッドで可能ですか?もし可能であれば、その方法を知りたいです。

僕が勉強してきた限りだと、POSTメソッドではリクエストの本文であるメッセージボディからデータを送信するので、urlのみでパラメータを付与することはできないと思っています。
したがって、formを用意して、入力した値をパラメータに付与する必要があると思います。

###確認したいこと
URLのみでデータを送信するAPIを実装する場合、POSTメソッドで送信することは可能でしょうか。
もし可能であれば、どのような方法で可能でしょうか。

また、できないとしたら、上記の理由で正しいですか?

###補足情報
新米ということもあり、知識不足でやや間違っているかもしれません。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

「セキュリティ上の問題」というのが具体的に不明ですが、「だからPOSTで開発」というのと、「URLのみでパラメータを渡す」は矛盾します。「POSTのみで開発」と決めた人に「URLのみでパラメータを渡す」というは許可取れてるんですか?許可されないのでは?

投稿2016/10/18 12:45

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keisuke_wada

2016/10/18 13:03

「セキュリティ上の問題」というのは、おそらくアクセスログにパラメータが残ってしまうからだと思います。 「だからPOSTで開発」というのと、「URLのみでパラメータを渡す」は矛盾する。 →POSTメソッドでURLのみでパラメータを渡すことができたとしても、同様の問題が発生する(アクセスログにパラメータが残ってしまう)からダメですね。自分で書いてて気がつきました。ありがとうございます。
otn

2016/10/18 14:11

一応、質問にストレートに答えると、可能です。
guest

0

POSTメソッドではリクエストの本文であるメッセージボディからデータを送信するので、urlのみでパラメータを付与することはできないと思っています。

ちなみにこれは誤りでPOSTメソッドを使用する場合もQUERY_STRINGを介してGETメソッドと同じようにパラメータをクライアントから送信する事ができます。

投稿2016/10/18 13:58

hana-da

総合スコア1728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keisuke_wada

2016/10/18 16:30

ありがとうございます。 なるほど、つまりGETと同じやり方で送信可能ということですね。 ちょっとその情報を探したのですが、なかなか見当たりません。 どのように検索かければ出てきますか?
guest

0

正しいかわかりませんが、一応自分で検証してみた結果を備忘録。
用意したもの
index.php-フォーム画面
reg.php-登録完了画面
DB-test_posts
table-posts

<?php //index.php $user = "root"; $pass = "root"; try { $dbh = new PDO('mysql:host=localhost;dbname=test_post', $user, $pass); foreach($dbh->query('SELECT * from posts') as $row) { print_r($row); echo "<br>"; } $dbh = null; } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "<br/>"; die(); } ?> <!doctype html> <html> <head> </head> <body> <form action="http://localhost:8888/post_test/reg.php" method="post"> <p>Name:<input type="text" name="user_name" value="keisuke"/></p> <p>Comment:<input type="text" name="comment" value="hello"/></p> <p><input type="submit" name="submit" value="送信" /></p> </form> </body> </html>
<?php //reg.php $user = "root"; $pass = "root"; try { $dbh = new PDO('mysql:host=localhost;dbname=test_post', $user, $pass); $user_name = $_REQUEST['user_name']; $comment = $_REQUEST['comment']; $stmt = $dbh->prepare("INSERT INTO posts (user_name, comment) VALUES (:user_name, :comment)"); $stmt->bindParam(':user_name', $user_name); $stmt->bindParam(':comment', $comment); $stmt->execute(); $dbh = null; echo "登録完了"; echo "<a href='http://localhost:8888/post_test/index.php'>戻る</a>"; } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "<br/>"; die(); }

さて、これを上のwebapiに当てはめると、urlを叩いただけで、登録(test_post.postsに挿入)できればいいはず。
formのメソッドをgetでもpostでも

http://localhost:8888/post_test/reg.php?user_name=keisuke&comment=hello&submit=%E9%80%81%E4%BF%A1

こんな感じで、urlを叩けば登録ができた。

結論
urlのパラメータ付与はgetでもpostでもできる。
でもこれだとpostにする意味ないじゃん。
以上

なんか認識が間違っていたら、ご指摘お願いします。

投稿2016/10/18 17:51

keisuke_wada

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hana-da

2016/10/18 20:55

うーん。POSTメソッドでQUERY_STRINGの送信ができるかの検証コードにはなっていない気がします。 ちなみにteratailさんは一問一答を望まれているようですし、一旦質問は解決しているようなので追加の質問があるのであれば回答欄に書くのではなく新たに質問を立てられるとよいかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問