HTTPメソッド
September 03, 2020
概要
今回は,HTTPメソッドを学んでいきます.
HTTPメソッドとは
HTTPメソッドは,クライアントが行いたい処理をサーバに伝えるという役割を持っています.HTTP1.1で定義されたメソッドは8つしかありません(詳しくはRFC 7231, セクション4: Request methodsを参照してください!)メソッドの数としては,プログラミング言語の中でも群を抜いて少なく,非常に限定されています.これは反面,非常に洗練されているということができます.少ないメソッドですが豊富な表現力を持っているのです.
HTTPメソッド一覧
8つ挙げていますが,主に用いるのは5つほどです.下に行くほど重要度は低いので,そんなのがあるんだふーん程度にみて貰えば結構です.
メソッド | 意味 |
---|---|
GET | リソースの取得 |
POST | リソースの作成,他 |
PUT | リソースの更新,リソースの作成 |
DELETE | リソースの削除 |
HEAD | リソースのヘッダ取得 |
OPTIONS | リソースがサポートするメソッドの取得 |
TRACE | プロキシ動作の確認 |
CONNECT | プロキシ動作のトンネル接続への変更 |
CRUD
この中でも上の四つ(GET, POST, PUT, DELETE)は非常によく用いられます.これら4つによって,CRUDという性質を満たすからです.CRUDは,Create, Read, Update, Deleteの略です.これはデータ操作の中でも基本的な処理になります.FlaskやDjango,Ruby on RailsはこのCRUD操作が非常に簡単に使用できるようになっています.それよりも複雑な操作をしたい場合は,Golangなどを用いるのが良いでしょう.
各々のメソッドとCRUDの対応は次のようになります.
CRUD | 意味 | メソッド |
---|---|---|
Create | 作成 | POST/PUT |
Read | 読込 | GET |
Update | 更新 | PUT |
Delete | 削除 | DELETE |
各々のHTTPメソッドの詳しい説明
GET
GETはリソースを取得するときに利用するHTTPメソッドです.最も使用頻度が高いです.
使用例:
- Webページを取得する
- API経由でJSONなどのデータを取得する
- CSSファイルを取得する
POST
POSTはリソースの新規作成に利用するHTTPメソッドです.GETの次に使用頻度が高いです.実は新規作成以外にも用途があるのですが,ここではその詳細を述べることは控えさせていただきます.POSTは新規作成に使用するのだな,程度に覚えておいてください.
使用例:
- Web上のフォームからサーバ側にデータを送信する
- 新しくユーザーを作成する
- Twitterに新しくツイートをするとき
PUT
PUTは二つの用途を持っています.一つはリソースの更新で,もう一つはリソースの作成です.リソースの更新とは,既に作られたリソースの内容を書き換えることです.リソースの作成はリソースの新規作成を意味します.
PUTは後者の機能において,POSTと競合しているように思われます.厳密にいうと,この二つは異なります.基本的には,リソースの新規作成にはPOSTを使用するようにしてください.
使用例:
- アカウントのプロフィール情報を書き換える
- LINEのひとごとを変更する
DELETE
DELETEはリソースの削除を行います.
使用例:
- 彼女と別れたので,Twitterの共同アカウントを削除する
- LINEのアカウントを削除する
- LINEで送信取り消しをする
- Twitterで炎上したので,ツイートを削除する
HEAD
HEADはリソースのヘッダを取得します.ヘッダとは,様々な付随的な情報が記述されたメタデータのことです.HEADを使用することにより,GETとは異なりボディを取得しなくて済むので,ネットワークの帯域の節約につながります.
OPTIONS
OPTIONSはそのリソースがサポートしているメソッドの一覧を取得します.例えば,そのリソースがGETとPOST,HEADを許容していた場合,OPTIONSを発行すると,GET, HEAD, POSTというレスポンスが返ってきます.
cURL(カール,シーユーアールエル)
ここからは発展的な内容かつ今後にあまり関係ない内容になりますので,読み飛ばしてもらっても構いません.
curlは,サーバからもしくはサーバへデータ転送を可能にします.コマンドラインツール上で,curlコマンドを打ち込むことによって,簡単にHTTPリクエストを発行することができます.ちなみに,curlはHTTPだけではなく,様々なプロトコルに対応しています.
curlのインストール確認
Unix系のOS(例えばMac)などにはcurlが初期状態から入っていますが,Windowsには搭載されていません.所定の方法を用いて,ダウンロード・インストールするようにしてください.インストールが完了した後は,コマンドプロンプト・ターミナルに次のコマンドを打ち込んでみてください.
curl --version
これで,バージョンが表示されればインストールが適切に行われています.
curlで遊んでみよう
今回は,JSONPlaceholderという架空のJSONを返すAPIを叩いてみることにします.JSONは,JavaScript Object Notationの略で,JavaScriptのデータ構造(例えば辞書やリスト)でデータを保持するために使用されます.今日では,バックエンドとフロントエンドの分離が加速し,その間のデータのやり取りのためにJSONが非常に頻繁に用いられ流ようになりました.
JSONPlaceholderのサイトにアクセスしてみましょう.少し下にスクロールして,Routesの部分をみてください.いくつかのエンドポイントが存在し,全てのHTTPメソッドが試せることがわかります.ただ,ここではGETリクエストのみ試してみます.
GET
オプションを何もつけなければ,ただのGETメソッドになります.今回は/posts/1
というエンドポイントを叩いてみています.
curl 'https://jsonplaceholder.typicode.com/posts/1'
すると,JSONが返ってくることでしょう.
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}%
確かに,リソースの取得ができたことがわかります.
GET: ヘッダーのみ
-I
オプションをつけることにより,ヘッダーを取得することができます.
curl -I 'https://jsonplaceholder.typicode.com/posts/1'
レスポンス:
HTTP/2 200
date: Thu, 03 Sep 2020 05:23:04 GMT
content-type: application/json; charset=utf-8
...中略...
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 5ccd09640ad80b9b-NRT
まとめ
- HTTPメソッドはクライアントが行いたい処理をサーバに伝えるという役割を持っている
- HTTPメソッドには8つの種類がある
- そのうちの4つ,GET, POST, PUT, DELETEは非常によく用いられ,CRUDを満たす