GETメソッドでデータを取得するAPIの作り方をやさしく解説!初心者向けSpring入門
新人
「先輩、Springの勉強をしていると、GETメソッドってよく出てくるんですが、これって何なんですか?」
先輩
「GETメソッドは、HTTP通信でサーバーからデータを取得するときに使う基本の方法だよ。REST APIでもよく使われるね。」
新人
「なんとなく聞いたことはあるけど、実際にどう使うのかがピンとこなくて…」
先輩
「それじゃあ今回は、Springを使ってGETメソッドでデータを取得する方法を順番に解説していこう!」
1. GETメソッドとは?(HTTPの基礎)
GETメソッドとは、HTTP(HyperText Transfer Protocol)において、クライアント(たとえばブラウザ)がサーバーに対して「情報をください」とリクエストするための方法です。インターネットでWebページを表示するとき、ほとんどがこのGETメソッドで通信されています。
たとえば、ブラウザでhttps://example.com/productsにアクセスすると、ブラウザはサーバーに対して「/productsの情報をください」というGETリクエストを送ります。サーバーはそのリクエストを受け取って、対応する情報をHTMLやJSONなどで返します。
このようにGETメソッドは、HTTP通信の中でも最も基本的な動作であり、SpringでREST APIを作るときにもよく使用されます。
以下はGETリクエストのシンプルなイメージです。
GET /products HTTP/1.1
Host: example.com
このようなリクエストがサーバーに届くと、Springのコントローラでその内容を処理してレスポンスを返す仕組みになります。
2. ブラウザとサーバーのやり取りにおけるGETの役割
Webアプリケーションでは、ユーザーがブラウザから情報を取得するとき、GETメソッドが使われます。たとえば「商品一覧を表示する」「ユーザーのプロフィールを見る」といった操作です。
このとき、ブラウザはGETリクエストをサーバーに送信し、サーバーはそのリクエストを受けてデータを取得し、ブラウザにレスポンスとして返します。
Springでは、こうした処理を簡単に実現できます。以下は、Springの@Controllerと@ResponseBodyを使った簡単なGETメソッドのサンプルです。
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/hello")
public String hello() {
return "こんにちは、SpringのGETメソッド!";
}
}
この例では、/helloというURLにブラウザからアクセスすると、サーバーが「こんにちは、SpringのGETメソッド!」という文字列を返します。
このときのブラウザとサーバーのやり取りは、以下のようになります。
ブラウザ → サーバー:GET /hello
サーバー → ブラウザ:こんにちは、SpringのGETメソッド!
このように、GETメソッドは「サーバーから情報を取得するためのリクエスト」であり、ブラウザとサーバー間の通信の中でとても重要な役割を担っています。
REST APIでも、リソース(たとえば商品やユーザーなど)を取得するときにGETメソッドが使われます。たとえば/productsで商品一覧を取得したり、/users/1で特定ユーザーの情報を取得したりするのが一般的です。
今後のセクションでは、実際にSpringでGETメソッドを使ってREST APIを作る方法を詳しく見ていきます。
3. SpringでGETメソッドを使った基本的なAPIの作成
それでは、Springを使って実際にGETメソッドでデータを取得するREST APIを作成してみましょう。まず、非常にシンプルなAPIから紹介します。
今回の開発環境は、pleiadesにGradle構成でSpringプロジェクトを作成しています。IDE上でコントローラクラスを作成し、以下のようにコードを記述します。
@Controller
public class MessageController {
@ResponseBody
@GetMapping("/message")
public String getMessage() {
return "これはGETメソッドで取得したメッセージです";
}
}
このコードでは、HTTPのGETメソッドで/messageというURLにアクセスされたとき、固定の文字列をブラウザにレスポンスとして返すようになっています。
サーバーが起動している状態で、ブラウザにhttp://localhost:8080/messageと入力すると、以下のようなレスポンスが表示されます。
これはGETメソッドで取得したメッセージです
このように、Springでは@GetMappingを使ってGETリクエストを処理することができます。REST APIの基本として、このようなパターンが多く使われています。
4. @Controller + @ResponseBodyでJSONを返す方法
実際のWebアプリケーション開発では、文字列だけでなくJSON形式でデータを返すケースがほとんどです。REST APIでは、サーバーがJSONデータを返すことで、フロントエンドがそのデータを扱いやすくなります。
Springでは、@ResponseBodyを使えば、オブジェクトやMapの内容を自動的にJSONに変換してレスポンスとして返してくれます。
以下は、JavaのMapを使ってJSONレスポンスを返す例です。
@Controller
public class InfoController {
@ResponseBody
@GetMapping("/info")
public Map<String, Object> getInfo() {
Map<String, Object> info = new HashMap<>();
info.put("title", "Spring入門");
info.put("level", "初心者向け");
info.put("available", true);
return info;
}
}
このエンドポイントにGETリクエストを送ると、サーバーは次のようなJSON形式でレスポンスを返します。
{"title":"Spring入門","level":"初心者向け","available":true}
このように、@Controllerと@ResponseBodyの組み合わせにより、外部ライブラリを使わなくても、Springの標準機能だけでJSONレスポンスを実現できます。
JSON形式のレスポンスは、ブラウザで表示するだけでなく、JavaScriptや他のアプリケーションとの連携にも便利です。SpringのREST APIでは、こうした形式でサーバーとブラウザのやり取りが行われます。
5. URLにパラメータをつけてデータを取得する方法(@RequestParam)
次に、URLの末尾にパラメータをつけて、サーバーにデータを渡しながらGETリクエストを送る方法を紹介します。たとえば、特定のユーザー名を指定して、その情報を取得したい場合などです。
Springでは、@RequestParamを使うことで、クエリパラメータを簡単に受け取ることができます。
@Controller
public class UserController {
@ResponseBody
@GetMapping("/user")
public String getUser(@RequestParam String name) {
return name + "さんの情報を取得しました";
}
}
この例では、ブラウザから次のようにアクセスします。
http://localhost:8080/user?name=山田
サーバーは、URLに含まれるname=山田というパラメータを読み取り、「山田さんの情報を取得しました」というレスポンスを返します。
山田さんの情報を取得しました
このように、GETメソッドではURLのクエリパラメータを使って、サーバーに条件を指定しながらデータを取得することができます。Springでは@RequestParamでこの機能を簡単に使えるのが特徴です。
複数のパラメータを指定したい場合も、同じように受け取ることができます。
@GetMapping("/search")
@ResponseBody
public String search(@RequestParam String keyword, @RequestParam int page) {
return "キーワード:" + keyword + "、ページ:" + page;
}
このように、SpringのGETメソッドと@RequestParamを活用することで、HTTPリクエストに応じた柔軟なレスポンス処理が実現できます。
6. @PathVariableを使ってURLの一部からデータを取得する方法
GETメソッドを使ったREST APIでは、URLの一部に変数のような値を含めて、それをもとにデータを取得する場面がよくあります。このときに使うのが@PathVariableです。
たとえば、ユーザーIDを指定してその人の情報を取得したい場合、「/user/1」や「/user/5」といったURLでアクセスできるようにします。
@Controller
public class MemberController {
@ResponseBody
@GetMapping("/member/{id}")
public String getMember(@PathVariable int id) {
return id + "番の会員情報を取得しました";
}
}
このコードでは、/member/1のようなURLでアクセスされた場合に、{id}の部分が自動的に読み取られ、@PathVariableで取得できます。
ブラウザで以下のようにアクセスすると、サーバーからレスポンスが返ってきます。
http://localhost:8080/member/3
3番の会員情報を取得しました
このように、URLの一部を変数として扱えることで、より直感的なREST APIの設計が可能になります。Springではこの機能が標準で用意されているので、非常に便利です。
7. 実際のブラウザでのアクセス例とJSONレスポンスの確認
Springで作成したGETメソッドのAPIは、実際にブラウザからアクセスして動作を確認することができます。以下に、いくつかの例を紹介します。
たとえば、以下のコントローラを用意しておきます。
@Controller
public class BookController {
@ResponseBody
@GetMapping("/book/{isbn}")
public Map<String, Object> getBook(@PathVariable String isbn) {
Map<String, Object> book = new HashMap<>();
book.put("isbn", isbn);
book.put("title", "サンプル書籍");
book.put("author", "田中太郎");
return book;
}
}
この状態で、以下のようにブラウザにURLを入力します。
http://localhost:8080/book/9781234567890
ブラウザ上には以下のようなJSONレスポンスが表示されます。
{"isbn":"9781234567890","title":"サンプル書籍","author":"田中太郎"}
このように、ブラウザからGETメソッドでアクセスするだけで、SpringのサーバーがJSON形式でデータを返してくれます。
また、最近のブラウザ(たとえばChromeなど)では、JSONレスポンスが自動的に整形されて表示されるので、確認作業も簡単です。フロントエンドと連携するREST APIとしては、とても使いやすい仕組みです。
8. よくある初心者のつまずき(404エラー、パラメータの受け取り失敗など)
SpringでGETメソッドを使ったAPIを作るとき、初心者がよくつまずくポイントがいくつかあります。ここでは、代表的な例とその対処方法を紹介します。
もっとも多いのが、URLのスペルやパスが間違っていることで404 Not Foundエラーになるケースです。
たとえば、コントローラで@GetMapping("/user")と書いているのに、ブラウザで/usersとアクセスしてしまうと、サーバーはそのルートを見つけられず、404エラーを返します。
URLのスペルは、Javaのコードとまったく同じでないといけないので、打ち間違いに注意しましょう。
次によくあるのが、@RequestParamでパラメータを受け取る場合に、URLにその値が含まれていないとエラーになるケースです。
@GetMapping("/search")
@ResponseBody
public String search(@RequestParam String keyword) {
return "検索キーワード:" + keyword;
}
この場合、http://localhost:8080/searchだけでアクセスするとエラーになります。必ず以下のようにパラメータを付ける必要があります。
http://localhost:8080/search?keyword=本
なお、オプションとして値を指定しない可能性がある場合は、required = falseを使うことでエラーを防げます。
@GetMapping("/search")
@ResponseBody
public String search(@RequestParam(required = false) String keyword) {
return "キーワード:" + (keyword != null ? keyword : "未指定");
}
@PathVariableや@RequestParamで数値を受け取るとき、値が文字列だとエラーになります。
http://localhost:8080/user?id=abc
このようなURLでアクセスすると、idが整数型で宣言されている場合、変換エラーになります。事前にチェックするか、正しい形式で値を渡すようにしましょう。
このように、GETメソッドを使ったREST APIでは、細かいミスが原因でうまく動かないことがありますが、エラーの内容を丁寧に読むことで、解決のヒントが得られます。特にブラウザのURLやパラメータ指定の確認はとても大切です。