🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

API

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

Q&A

解決済

3回答

4297閲覧

参照系APIでHTTPメソッドにPOSTを使うこと

tomoyuki123

総合スコア273

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

API

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

0グッド

1クリップ

投稿2020/09/29 02:11

編集2020/09/29 02:53

※ 複数のユーザーから「問題・課題が含まれていない質問」という意見がありましたとのことなので問題と課題を追記しました。

問題

参照系APIでGETメソッドを使いたいが、パラメータをリクエストボディに含めたいので、POSTメソッドを使っている。

課題

参照系APIとしてPOSTメソッドを使わざるを得ない場合にどのようにすべきか。

質問内容

参照系APIはリソースの取得のため大抵の場合、GETメソッドを使用するかと思います。

しかしGETメソッドだとクエリパラメータで渡すことになってしまい
以下のようにパラメータをリクエストボディに含めたい場合に、POSTメソッドを使わざるを得ない場面がたまに出てきます。

1, セキュリティリスクがあるパラメータがある場合 2, クエリパラメータが長すぎて特定環境だとリクエストができない場合

GETを使うべきところにPOSTを使うのは参照系APIとして不適切で使いづらいのではないかと思います。

POST /articles Host: api.example.com X-HTTP-Method-Override: GET

対策としてPOSTでリクエストしつつ、X-HTTP-Method-OverrideにGETを指定するのはどうかと思いました。
今までこうしたことはしたことがなかったのですが、こちらについてどう思われますか?
問題点などあれば教えていただけると助かります。

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

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

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

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

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

guest

回答3

0

ベストアンサー

GETメソッドで、リクエストボディにパラメータを入れる方法はどうでしょうか? 最近は時々見かけますし、RFC上も禁止されてはいません。

投稿2020/09/29 04:42

ockeghem

総合スコア11705

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

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

tomoyuki123

2020/09/29 06:58

ありがとうございます!リクエストボディにいれるって発想がなかったです。 禁止はされていないですが、なんとも微妙な書き方ですね。 sending a payload body on a GET request might cause some existing implementations to reject the request. https://tools.ietf.org/html/rfc7231#section-4.3.1
guest

0

1, セキュリティリスクがあるパラメータがある場合

どんなパラメーターか分かりませんが、HEADERに含めるという方法もあります

2, クエリパラメータが長すぎて特定環境だとリクエストができない場合

この条件がある時点でGETは無理なので、GETに適した仕様に変えるか他のメソッドを使うしかありません。
が、今となっては死んでいるようなIEですらこの程度の長さは送る事が出来るので、特定環境(余程古いIE?)は対応外とする方が適切だとは思います

投稿2020/09/29 03:52

hentaiman

総合スコア6426

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

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

tomoyuki123

2020/09/29 07:00

ありがとうございます!HEADERに入れるってこともできるんですね。 リクエストパラメータの内容によっては入れてもいいかなと思いました。
guest

0

技術者からの目線で申し訳ないけど正直POSTしてくれたほうが助かります。
(理由は質問者様自身が書かれている通りです)

APIKeyなどはURLパラメータで指定されると丸見えですから...
参照系APIのほうがよっぽどPOSTにしてくれ!とか思いますよ?
そうすれば細かい条件を付けたり機能の幅が広がりますから。

HTTPメソッドももともとは意味を分けていたのが
最近ではあまり関係ない事もあります。
(POSTのURLをGETで送信しても返事がふつうに帰ってきたりします。
これは通信を行うソフトの互換性を考えてかとも思えます。)

不適切で使いづらい

これも設計思想としか言えません。
セキュリティ意識が高ければ「GET」以外は弾いたりしますし...
どっちにしても送信後内容を受信してから処理しないといけないので
不便は感じた事ないですね...
(API自体ふつうのHPみたいに結果がきちんと表示される物でもないですから)

投稿2020/09/29 03:00

kuma_kuma_

総合スコア2506

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問