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を満たす