はじめに
こんにちは ◤●ㅅ●◥ノ
今回はネットワークアクセスについて学びました!
第8章 ネットワークアクセス
1.ネットワークAPIの全体像
Javaではネットワーク通信を簡単に実現するためのクラス群
→ java.netパッケージ
低水準API
細かい制御が可能だが、複雑で手間がかかる。本格的に利用
高水準API
簡単に使えるが細かいことができない。手軽に利用。
普段見ているWebページ
→ HTML という専用の言葉で記述されたテキスト情報
java.net.URLクラスを使う
→Javaプログラムを介してインターネット上にあるHTMLや画像ファイルを簡単に取得できる
java.net.URLクラスの利用
アクセスしたい情報のURLを元に、java.net.URLクラスを用いて、
インターネット上のWebサイトのデータを取得できる
2.Socketを用いた低水準アクセス
低水準APIの理解のためにはネトワークの基礎知識が必要
コンピュータの通信には定められた通信手順を踏む必要がある
あらかじめ定められた通信手順のルールのことを プロトコル と呼ぶ
インターネットで使われるプロトコルは TCP/IP と呼ばれるもの
TCP/IPを使うには以下の2つの情報が必要
1.IPアドレス
ネットワークにつながってるコンピュータに割り振られる番号
2.ポート番号
通信相手のサーバーにはそれぞれ異なるサービスを提供している。
サービスを区別するためにサーバ上のプログラムにポート番号が割り振られている
TCP/IPを使って接続を行うには、java.netパッケージのSocketクラスを使う
手順
1.IPアドレスまたはホスト名とポート番号を指定してSocketクラスをインスタンス化(new)する
Socket sock = new Socket("dokojava.jp",80);
2.Socketから入力ストリームと出力ストリームを取得する
InputStream is = sock.getInputStream();
OutputStream os = sock.getOutputStream();
3.2つのストリームを読み書きする
int i = is.read();
os.write("HELLO");
4.ソケットを閉じる
sock.close();
3.サーバ側ソフトウェアの開発
上記のところではサーバ上で「接続を行う側」のプログラム開発におけるクラスについて
以降は「接続を待ち受ける側」について
例:ショッピングサイトやインターネットバイキング
顧客のブラウザから届くHTTPリクエストを受け付ける
→計算や保存を行いその結果を HTMLとして返すプログラム
→Webアプリケーションと総称されるもの
通信を待ち受けるにはjava.netパッケージのServerSocketクラスを利用する
4.HTTPとWebAPI
HTTPの通信は、原則としてクライアントから始まるリクエストと
それに対するサーバからのレスポンスという文字情報の1往復で完結する特徴がある
このとき、Webサーバ上の何を要求するかを示すにはURLが用いられる
HTTPレスポンスの構造
1.ステータスコード
レスポンスの1行目に含まれる3桁の数字が処理結果の概要を表すステータスコード
例:404 NotFound
アクセス先のリソースが存在しないことを表す
2.レスポンスヘッダ
レスポンスの2行目以降に返される補助的な情報
サーバが処理を行った時刻などのほか、
次に続くレスポンスボディのデータ形式を表すContent-Typeヘッダも含む
3.レスポンスボディ
レスポンスヘッダの後に空の1行を挟んで送り返される、レスポンスの本体情報
Webサイトにアクセスした場合、HTMLの内容がレスポンスボディとして返される
HTTPリクエストのの構造
1.リソースパス
リクエストの先頭行は、リクエストラインと呼ぶ
この行はスペースで3つに区切られその中で中央部分の「/index.html」がリクエストの宛先を示す
リソースパスになる
2.リクエストメソッド
リクエストラインの冒頭に書かれる「GET」などの英単語
リソースに対してどのような依頼をするのかを指定するものであり、Javaのメソッドとは関係がない
HTTPが仕様で定めるメソッドは10種類ありその中で代表的な4種類が以下のもの
・GET リソース内容の取得 安全性⭕️ 冪等性❌
・POST リソースの追加 安全性❌ 冪等性❌
・PUT リソースの内容を上書きする 安全性❌ 冪等性⭕️
・DElETE リソースを削除する 安全性❌ 冪等性⭕️
安全性とは
その操作がサーバの状態を変化させる性質があることを意味する概念のこと
冪等性(べきとうせい)とは
同じ要求を複数回行ったとしても副作用が起きない性質のこと
POSTメソッドが2回送られると二重に登録されてしまう
3.クエリパラメータ
表示に関する補助的な情報としてクエリパラメータを追加できる
URLの松尾に「?」をつけ、その右側に指定したものがリクエスト1行目のリソースパスにも記述される
パラメータは「キー=値」の形式で複数指定する場合はそれぞれ「&」で区切るというルールになる
4.リクエストヘッダ
リクエスト通信自体に関する補足的な情報を記述する
Content-Typeヘッダ、Aceptヘッダなどが代表的なもの
5.リクエストボディ
主にPOSTやPUTメソッドで利用され、サーバに追加・上書きする内容を記述する
GETやDELETEの場合は送る情報がないため、通常は空で送信される
WebAPI
HTTP経由で依頼された高度な処理を行って結果を返すしくみをWebAPIと呼ぶ
これを活用したサービスやシステム間連携が増加している
公開される WebAPI
1.どのようなURLに(エンドポイントURL)
2.どのようなメソッドで
3.どのようなパラメータを付けて送ると
4.どのような動きをして
5.どのようなレスポンスが返るか
優れたWebAPIの基本構造や設計ノウハウが幅広くあり中でも有名なのはRESTという以下の設計哲学
RESTによるWebAPIの設計哲学
・システムが扱う現実世界の概念をURLとして表現する
・URLに対して、HTTPが定めるGET、POST、PUT、DELETEのメソッド
を本来の意味に基づいて用い、リソースを操作する
・レスポンスには通常、JSON形式を使う
JavaからのWebAPIアクセス
URLクラスはURやGETリクエストを送る際には便利
PUTやPOSTなどの利用にはjava.net.http.HttpClientクラスが便利
HttpClientクラスを利用する手順
1.HttpClientインスタンスを生成する
2.HttpRequestインスタンスを生成する
3.リクエストの実行とHttpRespeonseの取得
まとめ
URLクラスを用いることで手軽にWebページを取得できる
Socketクラスを使うことでTCP/IP接続を行うことができる
インターネット上のWebサーバにアクセスしてページを取得し、
リンクで他のページを辿れる仕組みをWebという
WebではHTTPというプロトコルが利用され、1往復のリクエストとレスポンスで完結する
別のシステムからHTTPで接続を受け付け、連携して動作するWebAPIが普及している
HttpClientクラスを用いるとメソッド・パラメータ・本文などを細かく指定してHTTP通信を行える
代表的なWebAPIの設計哲学として、RESTがある
今回もありがとうございました!
ではまた〜 ◤●ㅅ●◥ノ"