Node.js雑記
以下にNode.js、HTTP、req(リクエスト)、res(レスポンス)について簡潔に説明します。
Node.js
-
Node.jsとは: Node.jsは、ChromeのV8 JavaScriptエンジンを使用してサーバーサイドのJavaScriptを実行するためのオープンソースのランタイム環境です。これにより、JavaScriptを使用してサーバーアプリケーションを開発できるようになります。
-
特徴:
- 非同期I/O: Node.jsは非同期でイベント駆動型のアーキテクチャを採用しており、高いパフォーマンスとスケーラビリティを提供します。これにより、同時に多くの接続を処理することが可能です。
- モジュールベース: npm(Node Package Manager)を通じて、さまざまなライブラリやモジュールを簡単に追加して利用できます。
- サーバーサイドの開発: Webアプリケーション、API、リアルタイムアプリケーション(例: チャットアプリ)など、さまざまな用途に利用されています。
HTTP
-
HTTPとは: HTTP(Hypertext Transfer Protocol)は、Web上でクライアントとサーバー間でデータを通信するためのプロトコルです。ブラウザ(クライアント)とWebサーバーが相互に通信する際のルールを定義しています。
-
特徴:
- リクエスト/レスポンスモデル: HTTPはクライアントがサーバーにリクエストを送り、サーバーがそれに対してレスポンスを返すというモデルで動作します。
- ステートレス: HTTPはステートレスプロトコルであり、各リクエストは独立しており、サーバーはリクエスト間の状態を保持しません。
req(リクエスト)とres(レスポンス)
-
req(リクエスト): リクエストオブジェクトは、クライアントからサーバーへのHTTPリクエストに関する情報を含んでいます。主な内容は以下の通りです。
- HTTPメソッド: GET、POST、PUT、DELETEなど、リクエストの種類を示します。
- URL: リクエストの対象となるリソースのURL。
- ヘッダー: クライアントから送信されるメタデータ(例: コンテンツタイプ、認証情報など)。
- ボディ: POSTやPUTリクエストの場合、送信されるデータが含まれます。
-
res(レスポンス): レスポンスオブジェクトは、サーバーからクライアントへのHTTPレスポンスに関する情報を含んでいます。主な内容は以下の通りです。
- ステータスコード: リクエストの処理結果を示すコード(例: 200 OK、404 Not Found、500 Internal Server Errorなど)。
- ヘッダー: サーバーからクライアントへのメタデータ(例: コンテンツタイプ、キャッシュ制御など)。
- ボディ: レスポンスの内容(例: HTML、JSON、画像など)。
まとめ
- Node.js: サーバーサイドでJavaScriptを実行するためのランタイム環境。
- HTTP: クライアントとサーバー間のデータ通信を行うプロトコル。
- req(リクエスト): クライアントからサーバーへのリクエスト情報を含むオブジェクト。
- res(レスポンス): サーバーからクライアントへのレスポンス情報を含むオブジェクト。
これらの概念は、Web開発やAPI設計において非常に重要な役割を果たします。理解を深めることで、より効果的なアプリケーションを構築することができるでしょう。
ステートレスとは
そもそもstateは状態
stateがlessなので状態がないという意味
ステートレスなやり取りにおいてサーバーはクライアントのセッション情報を保持せず、逆にステートフルなやり取りにおいてはセッション情報が保持される。
(ステートフルの例):
客: こんにちは
店員: いらっしゃいませ。○○バーガーへようこそ
客: ハンバーガーセットをお願いします
店員: サイドメニューは何になさいますか?
客: ポテトで
店員: ドリンクは何になさいますか?
客: ジンジャーエールで
店員: +50円でドリンクをLサイズにできますがいかがですか?
客: Mでいいです
店員: 以上でよろしいですか?
客: はい
店員: かしこまりました
(ステートレスの例):
客: こんにちは
店員: いらっしゃいませ。○○バーガーへようこそ
客: ハンバーガーセットをお願いします
店員: サイドメニューは何になさいますか?
客: ハンバーガーセットをポテトでお願いします
店員: ドリンクは何になさいますか?
客: ハンバーガーセットをポテトとジンジャーエールでお願いします
店員: +50円でドリンクをLサイズにできますがいかがですか?
客: ハンバーガーセットをポテトとジンジャーエール(M)でお願いします
店員: 以上でよろしいですか?
客: ハンバーガーセットをポテトとジンジャーエール(M)でお願いします。以上
店員: かしこまりました
サーバ資源をすぐに開放できるという利点があり、利用者や負荷において性能や機能を向上させられる
店員をサーバーととらえて考えると、
店員が一人の客にずっと対応していると、その間は他の客に対応することができない。店が混んできたら(アクセスが増加したら)、店員を増員して(WEBサーバを増設して)対応する。
普通の店舗では一つのレジで一人の店員がずっと同じ客を受け付けるのだが、WEBの場合は複数のWEBサーバで複数のクライアントを同時にうけつけるため、ステートレスサーバであれば、上記の様に各インタラクションで別々の店員が客の注文をに応答することが可能になる。
なるほど
すぐに容量を解放して、次の行動ができる
その代わりに毎回毎回、全部の値を投げる必要がある
だからデータ量が多くなり負荷はかかりやすい
リクエストには、処理に必要な情報を含む
通信エラーへの対応が大変
レスポンスがうまく受け取れなかった場合にリクエストを2重に受け付けてしまう
ステートフルであれば、既にリクエストを受け付けたことを覚えている。
ステートフルとは異なり、自己完結型である
サーバ資源をすぐに開放できるという利点があり、利用者や負荷におういて性能や機能を向上させられる
アプリケーションの状態を覚える必要がないため、サーバ側のシステムは単純になる
RESTとは?
REpresentational State Transferの略で、分散型システムにおける複数のソフトウェアを連携させるのに適した設計原則の集合、考え方のこと。
URLとURIって何が違うっけ
URL(Uniform Resource Locator):
場所を示す書き方のルール。
ページや画像などを取得したりするための主要な場所とアクセス方法を指定。
URI(Uniform Resource Identifier):
名前または場所を識別する書き方のルールの総称(親玉)。
URLやURNは、URIで定められたルールに従って書かれたり使われたりする。
URIという書き方があり、実際にURIを使って特定のリソースの場所を示すのがURL
要素 | 説明 | 例 |
---|---|---|
スキーム | 使用されるプロトコル |
http , https , ftp
|
ホスト名 | サーバーのドメイン名またはIPアドレス | example.com |
ポート | 特定のポート番号(通常は省略される) | :80 |
パス | リソースの具体的な位置 | /path/to/resource |
クエリ | 追加のパラメータ | ?key=value |
フラグメント | ドキュメント内の特定の部分を示す | #section1 |
RESTの原則
主に以下の4つの原則から成る。
アドレス可能性(Addressability)
提供する情報がURIを通して表現できること。全ての情報はURIで表現される一意なアドレスを持っていること。
ステートレス性(Stateless)
HTTPをベースにしたステートレスなクライアント/サーバプロトコルであること。セッション等の状態管理はせず、やり取りされる情報はそれ自体で完結して解釈できること。
接続性(Connectability)
情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができること。
統一インターフェース(Uniform Interface)
情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること。
RESTful APIを使うメリット
URIに規律が生まれることで、APIを利用するサービス開発者が楽になる
URIに規律が生まれることで、API開発者もURIからソースのどの部分なのかが容易にわかる
ブラウザのアドレスバーにURIを入力すればリソースが参照できる
サーバ、クライアント間で何も共有しないことにより、負荷に応じたスケーラビリティが向上する。ステートレス性に値するもので、一番のメリットされている。
GET、POST、PUT、DELETE等のHTTP標準のメソッドを使うことで、シンプルで一貫性のあるリクエスト標準化が円滑に行える。統一インターフェースに値する。
variableとparameterの違いってなんだっけ
言うなれば、variablesは一般的に変数を意味する言葉、parameterは特定の処理を実行するときに与えられる変数という意味合いが強い言葉
ロールプレイングゲームなどのキャラクター設定時に、決められた数値を各能力に割り振る作業がある。これらの数値もparameterの一種と考えられる
mustで必要になる値的なイメージかも