最近、いろいろ思うところあって、一から勉強し直し中。
その一環として、インターネットを支える技術について、お猿なりにまとめていく。
498 views
本項では、HTTPのリクエストメッセージを特徴づけるメソッドについて解説する。
NO | メソッド名 | 意味 |
---|---|---|
1 | GET | リソースの取得 |
2 | POST | 子リソースの作成/データ追加/その他処理 |
3 | PUT | リソースの更新/リソースの作成 |
4 | DELETE | リソースの削除 |
5 | HEAD | リソースのヘッダ(メタデータ)取得 |
6 | OPTIONS | リソースがサポートしているメソッドの取得 |
7 | TRACE | 自分宛てにリクエストメッセージを返す。ループバック試験 |
8 | CONNECT | プロキシの動作のトンネル接続への変更 |
※REACEとCONNECTはほとんど使用されないので除く。
GETは、指定したURIの情報を取得する。
使用頻度は一番多いかもしれない。
- GET /list HTTP/1.1
- Host:example.jp
<h5>レスポンス</h5>
- HTTP/1.1 200 OK
- Content-Type:application/json
- [
- {"uri":"http://example.jp/list/item/1"},
- {"uri":"http://example.jp/list/item/2"},
- {"uri":"http://example.jp/list/item/3"},
- {"uri":"http://example.jp/list/item/4"},
- {"uri":"http://example.jp/list/item/5"}
- ]
POSTには、3つの役割がある。
代表的なものは、リソースに対する子リソースの作成。
例えば、ブログの記事の投稿等で行われる。
- POST /blog HTTP/1.1
- Host:example.jp
- Content-Type:text/plain;charset=utf-8
- こんにちは
このリクエストでは、http://example.jp/blog に子リソースを作成する指示を出す。
<h5>レスポンス</h5>- HTTP/1.1 201 Created
- Content-Type:text/plain;charset=utf-8
- Locaton:http://example.jp/blog/item6
- こんにちは
レスポンスでは、「201 Created」というステータスが返ってくる。
このステータスコードは、作成したことを示す。
~/blogの下に~/blog/item6 のリソースを作成したことになる。
既存リソースへのデータ追加。例として、ログリソースに追加する場合を考える。
<h5>リクエスト</h5>- POST /log HTTP/1.1
- Host:example.jp
- 2021-04-20-18:00:30 GET /log, 200
<h5>レスポンス</h5>
- HTTP/1.1 200 OK
例えば、検索結果を表現するとき、URIは下のようになる。
(例)http://example.jp/search?q={検索ワード}
普通に考えれば、GETで対応可能。
ただし、「検索ワード」があまりにも多い場合(全体で上限2000文字を超える)場合、GETは使用不可。
POSTを使用する。
- POST /search HTTP/1.1
- Content-Type:text/plain;charset=utf-8
- q = aaaaaaaaaa+bbbbbbbbb+dfaaaaa+ggg+.....
PUTでは、下の二つの機能を持つ。
前項で登録したリソース「こんにちは」を更新する場合を例とする。
<h5>リクエスト</h5>- PUT /blog/item5 HTTP/1.1
- Host:example.jp
- Content-Type:text/plain;charset=utf-8
- こんばんは
<h5>レスポンス</h5>
- HTTP/1.1 200 OK
- Content-Type:text/plain;charset=utf-8
- こんばんは
この時、レスポンスがボディを持たなくてもよい。
その場合は、ボディを持たないことを示す「204 NoContent」を返す。
この場合のPUTは、存在しないURIへのリクエストのため、サーバは新しくリソースを作成すると解釈する。
<h5>リクエスト</h5>- PUT /blog/item5 HTTP/1.1
- Host:example.jp
- Content-Type:text/plain;charset=utf-8
- 新しいリソース/newitemの内容
<h5>レスポンス</h5>
- HTTP/1.1 201 Created
- Content-Type:text/plain;charset=utf-8
- 新しいリソース/newitemの内容
Twitterのように、つぶやきサービスのURIをサーバーで自動決定する場合は、POST。
Wikiのように、クライアントが決めたタイトルがURIになるばあは、PUT。
※ 特別な理由がない場合は、POSTを使用する設計が望ましい。
リソースの削除ができる。
<h5>リクエスト</h5>- DELETE /blog/item2 HTTP/1.1
- Host:example.jp
<h5>レスポンス</h5>
- HTTP/1.1 200 OK
この時、レスポンスがボディを持たなくてもよい。
その場合は、ボディを持たないことを示す「204 NoContent」を返す。
リソースのヘッダを取得できる。
イメージは、GETに近い(メタデータの取得)。
- HEAD /blog/item1 HTTP/1.1
- Host:example.jp
<h5>レスポンス</h5>
- HTTP/1.1 200 OK
- Content-Type:text/plain;charset=utf-8
HEADへのレスポンスには、ボディを含まない。
この性質を利用すると、ネットワークの帯域を節約しながら、リソースの大きさを調べたりできる。
リソースが許可しているメソッドを取得できる。
<h5>リクエスト</h5>- OPTIONS /blog HTTP/1.1
- Host:example.jp
<h5>レスポンス</h5>
- HTTP/1.1 200 OK
- Allow:GET,HEAD,POST
NO | CRUD | 意味 | 対応するメソッド |
---|---|---|---|
1 | Create | 作成 | POST/PUT |
2 | Read(Retrieve) | 読み込み/検索 | GET |
3 | Update | 更新 | PUT |
4 | Delete | 削除 | DELETE |
①_methodパラメータ
- <form method="POST" action="/blog">
- <input type="hidden" id="_method" name="_method" value="PUT">
- </form>
フォームでは、methodをPOST,GETで選択できる。
隠しパラメータ"_method"の中に、行うべき操作を持っておくとわかりやすい。
②X-Http-Method-Override
XML以外の場合は、使用する機会が多い。
- POST /blog/item2 HTTP/1.1
- Host:example.jp
- Content-Type:text/plain;charset=utf-8
- X-HTTP-Method-override:PUT
- <body></body>
Page 7 of 18.
owl
駆け出しエンジニア
だいたいweb系をかじってる
最近ちょとブロックチェーンに興味出てきた