Java Webアプリ作成課題:ServletからAPIへの変更から学ぶ技術の違い

目次
はじめに
本記事はIT会社勤務の100名程の研修生を見てきた元Java研修講師が、Webアプリの作成課題で用いた2つの技術、「Servlet」「API」についてそれぞれの特徴や違いについてお話ししていきます。
Webアプリ
Webアプリとはブラウザ上で使用するアプリ。アプリをインストールすることなく、インターネットに繋がっているだけで使うことができるアプリケーションです。具体例として、youtubeやオンラインショッピングサイトが挙げられます。アプリをインストールして使えるものもありますが、Web版でも使用できるアプリもあり、それがWebアプリです。
インターネット
みなさんがよく目にしたり口にしたりする、「インターネット(ネット)」の言葉ですがどういうものかきちんと分かって使っている人は少ないと思います。
まず、インターネットとは「世界中のコンピュータなどが繋がるための大きなネットワーク」です。
ネットワーク
ここでまたカタカナが出てきました。ネットワークとは、昔はコンピュータ同士でデータのやり取りはできませんでした。それだと不便ということから自社内のコンピュータ同士くらいはやり取りできるようにしようと、生まれたのがネットワーク(プライベートネットワーク)です。そこから自社内だけでなく色んな会社同士や、個人間同士でやり取りするために徐々に大きなネットワーク(パブリックネットワーク)になっていきました。世界中で繋ぐことができる1番大きなネットワークが「インターネット」です!!
Servlet(Java Servlet)
概要
ServletとはJavaでWebアプリケーションを作るためのサーバー側プログラムです。Webブラウザ(ChromeやSafari)からリクエスト(入力値の受付やログインなど)を受け取り、処理をしてレスポンス(処理した結果のデータ)を画面を作るフロント言語(主流はJSP)にデータを送り画面表示する。
特徴
Webリクエストを受け取る
ブラウザから送られてきた「URL」「入力の内容」などを受け取る。
Javaの「HttpServlet」クラスを使って「doPost()」「doGet()」メソッドで受け取る。
リクエストに応じた処理
「doPost()」「doGet()」メソッドで入力されたデータを受け取り、データベースとやり取りして、「登録・検索・更新・削除」の処理をする。条件によって分岐(成功や失敗)などもここで行う。
処理結果をJSPに渡す
Servlet自身は画面を作らずに、処理の結果を渡してJSPが画面を作る。作業(処理)はServletで見た目(画面)はJSPの担当になる。リクエストに対するレスポンスは「作られた画面」になる。
GETやPOSTなど動作に応じて処理を分けられる
リクエストは基本的にHTTPメソッドが使われる。HTTPメソッドとは情報を「POST(登録)」するか「GET(取得)」するか「PUT(更新)」するか「DELETE(削除)」するかを決める役割を持つ。なので、情報を取得したいときは「doGet()」を使います。その他の登録・更新・削除については「doPost()」を使います。
ここで1つ注意点で「doPost()」の使い方ですが、「doPut()」や「doDelete()」も存在する中、なぜ「doPost()」のみ使用するのかです。これには明確な理由があり、「doPut()」や「doDelete()」を使うこともできるのですが、入力値を受け取る際画面側では、フォームタグ「<form>」を使ってフォーム送信してきます。そのとき受け取るのは「Post」が基本だからです。
さらに、セキュリティ面などの問題からも初心者向けの教材では、GETの処理もdoPostに書くと記述されていることもあります。
API
概要
APIとは、プログラムやアプリが別のサービスやシステムと「約束された方法」でやり取りするための仕組みです。
少し分かりやすくするために自動販売機で例えます。自動販売機を使う「人間」と「自動販売機」この2つの間で情報(飲み物)のやり取りを行う際のルールが「API」になります。
人間は、自動販売機の中身の仕組みを知らなくても、ボタンを押せば飲み物が出てきますよね。自動販売機は、ボタンを押してる人間の顔なんて認識しないですよね。「このボタン」が押されたら「この飲み物」を出すこと(処理)だけを行いますよね。
「このボタン」が押されたら「この飲み物」を出す。このルールを決めているのが「API」になります。少しはイメージがつきましたかね。
特徴
決まった使い方でやり取りする(標準化)
APIは、利用する側も提供する側も「どんな形でやり取りするか」を決めています。自動販売機も同様に「お金を入れてボタンを押す」という使い方が決まっていて、これを守らないと飲み物は出てきません。このようなルールにより、どんなプログラムでも同じ使い方ができて混乱しません。
中身の処理は隠されている(抽象化)
APIを利用する側は「どうやってその機能が実現されているか」を知らないし、知る必要はありません。自動販売機も中身がどうなっているか知らなくても使えますよね?それと同じです。これにより、利用する側は安心して必要な機能だけを使うことができます。
必要なものだけ選べる(柔軟性)
APIは多くの機能(登録・検索・更新・削除)やデータ(1件〜ほぼ無限)を扱いますが、必要なものだけ使えます。自動販売機でも同様に、全部の飲み物を出してから好きなものを選ぶのではなく、好きな飲み物を1つ選ぶだけでいいですよね。これで、無駄なく効率的に利用できるようになっています。
安全性が確保されている(権限管理)
誰が使えるか管理し不正アクセスを防いでいます。自動販売機がお金を入れないと使えないように、APIも認証された利用者だけが使えるようになっています。これによりサービス全体の安全性が保たれます。
誰でも同じ方法で使える(互換性)
APIは世界中で共通のルールで使えるので、多くの人が同じ操作で利用できます。自動販売機がどこにあっても同じように使えるのと同じで、APIも場所や環境を問わずに使えます。
まとめ
今回紹介した「Servlet」と「API」は、どちらもWebアプリを作るときに使われる大切な技術です。ただ、使い方や考え方には違いがあります。
Servletは、Webアプリの動きの「基礎」をしっかり学ぶことができる技術で、リクエストを受けて処理をして画面を作るという一連の流れを理解するのにとても役立ちます。
一方で、APIは「処理するだけ」に専念することで、より効率的にプログラミングを作れるようになった考え方です。画面の部分とは分けて考えることで、開発の自由度が上がったり、他のサービスと連携しやすくなったりします。
最初はServletのほうが「実感(画面ができる)」があって分かりやすいですが、慣れてきたらAPIを使って処理と画面を分ける考え方にも触れてみることで、今後の開発の幅がぐっと広がっていくはずです。
今回の記事を通して、「どう作るか」だけじゃなく「なぜこう作るか」を考えるきっかになれば良いかなと思います!