MENU

[HttpGet] と [HttpPost] ってなんだろう

目次

調査結果

今回調べた結果は以下の通りです。

[HttpGet] , [HttpPost] とは、

  • C#の属性で、今回の例ではメソッドに対して属性を付与している。
  • HTTP request methodsの一種である。
    • HTTP GETは、特定のデータの表示を要求する。
    • HTTP POSTは、新たにリソースを作成し、サーバーへと提出する。

「当たり前じゃん」という方は以降を読む必要はあまりないと思います。

「そうなんだ、もうちょっと詳しく教えてくれ」という方は、
この後も楽しんで読めると思います。

[HttpGet] 及び [HttpPost] とは

Microsoftの公式ドキュメントによると、

HTTP GET
Identifies an action that supports the HTTP GET method.

HTTP POST
Identifies an action that supports the HTTP POST method.

Microsoft公式ドキュメント HttpGetAttribute Class
Microsoft公式ドキュメント HttpPostAttribute Class

それぞれ、HTTP GET (POST)メソッドをサポートしているアクションであることを明確にしている。

みたいですが、なんとなくすっきりしません。

なにがスッキリしないかというと、HTTP GET, HTTP POST、[]がよくわかっていない。
ということでその辺りを勉強して、まとめてみました。

C# 属性

HttpGetを囲んでいた [ ] はC#の属性を示します。

Microsoftの公式ドキュメントによるとC#の属性は以下のように定義されています。

Attributes provide a powerful method of associating metadata, or declarative information, with code (assemblies, types, methods, properties, and so forth).

Microsoft 公式ドキュメント “Attribute”

つまり、属性とは、
コードに対し、メタデータ を付与する手段
ということになります。

また、ここでいうコードやメタデータは、
コード : クラスやメソッド等
メタデータ : コードに関する情報
になります。

そのため、[HttpGet], [HttpPost]は
HTTPのGET (POST) メソッド属性をコードに付与している
ことになります。

HTTP

C#の属性がわかったところで( … 本当にあんな説明でいいのだろうか)、
HTTPのGET (POST) メソッドってなんでしょうか。

まず、HTTPは以下のように説明されています。

HTTP is a protocol for fetching resources such as HTML documents. It is the foundation of any data exchange on the Web and it is a client-server protocol, which means requests are initiated by the recipient, usually the Web browser.

Mozilla “An overview of HTTP”

意訳になりますが、つまり、

HTTP (Hyper Text Transfer Protocol) はインターネットを介して
リソース (HTML文書や画像、動画など)を取得するための規約です。
そのため、HTTPはWeb上でのデータのやり取りにおける基盤とも言えます。

ということになります。

では、HTTP GET (POST) ってなんでしょうか。

HTTP request methods

HTTP GET (POST) はHTTP request methods のうちの一つです。
ちなみに、request methodsはverbs (動詞) と表記されることもあります。

HTTP request methodsは与えられたリソースに対して、
実行したいアクションを示すために定義されています。

ここでいうアクションとは、

  • 任意のリソースの取得
    例) データベースに保存されている100件のデータのうち、ある1件のみを取得する
  • 任意のリソースの削除
    例) データベースに保存されている100件のデータのうち、ある1件のみを削除する

といったものが挙げられます。(もちろん他にもあります)
ちなみに、与えられたリソースは上記の例で言うところの
データベースに保存されている100件のデータ、になります。

そして、GET, POSTメソッドは以下のように説明されています。

  • GET
    The GET method requests a representation of the specified resource.
    Requests using GET should only retrieve data.
  • POST
    The POST method submits an entity to the specified resource,
    often causing a change in state or side effects on the server.
mozilla公式ドキュメント “HTTP request methods”

意訳しますと、以下のようになります。

  • GET
    特定のresourceの表示を要求する。
    そのため、データを検索する際にのみ、使用する。
  • POST
    entity (HTTP requestの大部分) を特定のresourceに提出する。
    多くの場合、サーバー上で、状態の変化や副作用を引き起こす。

entityの説明については、stack overflowの質問 を参考にしました。
entityは、HTTPの他に、.netのentityFramework でも使われる用語で、
その時によって、意味が異なります。

個人的には、2次元の表で管理されているデータをイメージして、
それぞれの行をイメージしています。
あくまで、個人的に … 。

さらに、他のサイトで調べてみると、
もっとシンプルに表現している場合があります。

引用元 : SoftUniGlobal “Everything You Need To Know About HTTP Protocol”

こちらのサイトでは、

  • GETは、WebページやCSSファイル、script、ドキュメントといったリソースをWebサイトからダウンロードする際に用いられる。
  • POSTは、新しいリソースを作成し、サーバーの状態を変更する。
SoftUniGlobal “Everything You Need To Know About HTTP Protocol” の一部を抜粋し、拙訳

とされており、幾分すっきりした印象を受けます。

まとめ

今回のまとめです。

[HttpGet] , [HttpPost] とは、

  • C#の属性で、今回の例ではメソッドに対して属性を付与している。
  • HTTP request methodsの一種である。
    • HTTP GETは、特定のデータの表示を要求する。
    • HTTP POSTは、新たにリソースを作成し、サーバーへと提出する。

今後、GETとPOST以外のmethodについても追記できればと思っています。(2023/8/20)

おまけ : その他のHTTP methods

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次