はじめに
Spring BootでGETのRest API作成〜ローカル環境で起動〜Chromeのプラグイン(Talend API Tester)で動作確認。
までのサンプルコードを作ってまとめました。
Hello Worldまでの記事はネットでよく見かけるので、
jOOQ(個人的にイチオシのO/Rマッパー)を使ってDBと接続してその結果を返却する。
なども今回のサンプルでは行いました。
この記事の通りサンプルを動かすには、
以下の環境構築を事前に行う必要があるので、
興味のある方はこちら参考に事前にセットアップしてみてください。
IntelliJ IDEA、docker desktop(postgreSQL、keycloak)、Flyway、DBeaverを利用したバックエンド開発環境構築
Spring BootでRest APIのGETを作る際のポイント解説
今回作成したサンプルプログラムはgithubに公開していますので参考にしてみてください。
Spring Bootで作成したRest APIサンプルコードのお題
ポイント管理システムをイメージしており、GETのAPIとしてはユーザを指定すると
そのユーザの残ポイントとユーザに今まで付与されたポイントの一覧情報を返却する。
というものです。
ユーザのユーザ名、ポイント残高
支払の支払日、利用ポイント、支払金額のリストを返却するようなイメージです。
データを記録しているテーブルのER図はこんな感じ(1ユーザに対して複数支払)
Spring Bootで作成したサンプルRest API GETのポイント解説!!
Rest APIを作るにはプロジェクトの依存関係にSpring Webを追加します。
(サンプルではmavenを利用しているのでpomですがgradleでも同じ)
次に、
HttpのGetメソッドで呼ばれたらこの処理が動きます。
このエンドポイントで呼ばれたらこの処理が動きます。
という設定を入れる必要があります。
また、
今回はURLのパスパラメータにユーザIDを指定してそれを返却にするようにしているので、
パスパラメータを指定できるように設定をいれています。
ここまでがSpring BootでGETのAPIを作成する際のポイントです!!
Spring Bootで作成したサンプルRest API GETのおまけ解説
すこしおまけに、
jOOQでデータベースからデータを取得している箇所を紹介します。
2本のクエリを投げています。
1本目は
ユーザテーブルに対してパスパラメータに指定した1人の該当ユーザを取得。
2本目は
支払テーブルに対してパスパラメータに指定した該当ユーザの今までの支払情報を取得。
jOOQだと、かなりSQLに近い書き方でクエリを発行できます。
他にもいろいろお気に入りポイントありますが・・・
こちらの記事にまとめているので興味のある方はこちらの記事もみてください!!
spring bootとjOOQでpostgreSQLと連携|jOOQの導入〜自動生成〜簡単な使い方解説
Spring Bootで作成したサンプルAPI GETの動作を確認する
実際に動作確認する方は、
APIをローカル環境で立ち上げてください。
このあたりで手順は解説していますので必要であれば参照ください!
IntelliJ IDEAをインストールと日本語化〜プロジェクトインポート〜ビルドして動かすまで実施!!バックエンド開発環境を構築する
GETなのでブラウザ上で(localhost:8081/user/0000000001)で
アクセスしてもらえれば動作は確認できると思います。
一応、
POSTなどでbody部にリクエストパラメータを入れたり、
Httpヘッダにセキュリティ情報を入れたりする場合は
Rest APIをテストする専用のツールを利用することになります。
何を使ってもいいのですが、
自分はChromeのプラグインのTalend API Testerを使ったりします。
一応使い方解説記事のリンクを貼っておきます。
>>Chrome拡張のTalend API TesterでAPIテスト
これ使ったらこんな感じでレスポンス情報を確認できます。
まとめ
Spring BootでGETのAPIを作成するのはそこまで難しくなかったかと思います。
ポイントは2つ
- プロジェクトの依存関係にSpring Web追加
- アクセスする際のパスとHttpメソッドの設定
ただ、、、
GETのAPIでは、DBに記録している情報を取得して加工する。
指定されたパラメータのチェックをする。
誰でもAPIを自由に使えないようにヘッダの認証トークンをチェックする。
などなど必要になります。
一応その辺りをふわっとでも頭にいれておけると、
現場で本物のAPIを見たときになんだこれ・・・ってならずに済むかなと思います!!
詰まった箇所を共有させていただきます。
①
src/main/java/com/example/domain/Item.java
@GeneratedValue(strategy = GenerationType.IDENTITY)
じゃないとINSERTした際に、null でエラーになりました。
②
pom.xml
org.lazyluke
log4jdbc-remix
0.2.7
を追加しないと実行できませんでした。
参考にさせてもらいました。ありがとうございました。
上の方のコメント通り①と②を追加しました。
あと「1.アプリの雛形プロジェクト作成」の画像2枚目のパッケージはcom.exampleにしないとプロジェクト構成がずれて実行できませんでした。
ご指摘ありがとうございます。
間違った手順を記載しており申し訳ありません、、、