LoginSignup
1
2

スッキリわかるJava入門 実践編 第3版 まとめ - part8 -ネットワークアクセス

Last updated at Posted at 2023-10-06

はじめに

こんにちは ◤●ㅅ●◥ノ

今回はネットワークアクセスについて学びました!

第8章 ネットワークアクセス

1.ネットワークAPIの全体像

Javaではネットワーク通信を簡単に実現するためのクラス群
java.netパッケージ

低水準API
細かい制御が可能だが、複雑で手間がかかる。本格的に利用
高水準API
簡単に使えるが細かいことができない。手軽に利用。

普段見ているWebページ
HTML という専用の言葉で記述されたテキスト情報

java.net.URLクラスを使う
→Javaプログラムを介してインターネット上にあるHTMLや画像ファイルを簡単に取得できる

:star: 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と呼ぶ
これを活用したサービスやシステム間連携が増加している

:star: 公開される WebAPI
1.どのようなURLに(エンドポイントURL)
2.どのようなメソッドで
3.どのようなパラメータを付けて送ると
4.どのような動きをして
5.どのようなレスポンスが返るか

優れたWebAPIの基本構造や設計ノウハウが幅広くあり中でも有名なのはRESTという以下の設計哲学
:star: 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がある

今回もありがとうございました!
ではまた〜 ◤●ㅅ●◥ノ"

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2