はじめに
今回はSpring BootでPOSTのRest APIを作成〜ローカル環境で起動〜Chromeのプラグイン(Talend API Tester)で動作確認。
までをまとめました。
jOOQ(個人的にイチオシのO/Rマッパー)を使ってDBと接続して記録する。
なども今回のサンプルでは行いました。
この記事の通りサンプルを動かすには、
以下の環境構築を事前に行う必要があるので、
興味のある方はこちら参考に事前にセットアップしてみてください。
IntelliJ IDEA、docker desktop(postgreSQL、keycloak)、Flyway、DBeaverを利用したバックエンド開発環境構築
Spring BootでRest APIのGETを作る際のポイント解説
今回作成したサンプルプログラムはgithubに公開していますので参考にしてみてください。
Spring Bootで作成したRest APIサンプルコードのお題
ポイント管理システムをイメージしており、POSTのAPIとしては支払情報を指定すると
その支払情報から付与ポイント数を計算してデータベースに記録するというものです。
ドメインモデル的にはこんな感じ
支払時の支払い方法によってポイント付与率が異なるところは、
ロジックがif文でカオスにならないようにEnumと多態を使って
サンプルプログラムでは整理していたりするので興味のある方はその観点でも見てもらえたらと。
DBのER図はこんな感じ
1回の支払に対して、
支払方法は複数(1つのものを買うときにクレジットと電子マネーで購入みたいな)
支払明細は複数(1回の支払いでは複数の商品を購入みたいな)
Spring Bootで作成したサンプルRest API POSTのポイント解説!!
Rest APIを作るにはプロジェクトの依存関係にSpring Webを追加します。
(サンプルではmavenを利用しているのでpomですがgradleでも同じ)
次に、
HttpのPostメソッドで呼ばれたらこの処理が動きます。
このエンドポイントで呼ばれたらこの処理が動きます。
という設定を入れる必要があります。
POSTの場合はbody部にリクエスト情報を設定されるのですが、
その基本的なチェックはアノテーションで行うことが行うことができます。
POSTメソッドで呼び出されるAPIを作るだけなら、
この辺りを押さえていれば作れます。
Spring Bootで作成したサンプルRest API POSTのおまけ解説
すこしおまけに、
jOOQでデータベースへデータを登録している箇所を紹介します。
支払、支払明細、支払方法明細の3テーブルにそれぞれデータを登録しています。
支払という情報を登録する際は、
基本的に、支払明細、支払方法明細はセットで登録されるものなので、
1つのリポジトリの中で一括で記録し、支払情報を取り出す際もセットで取り出す。
こういう思想で設計しています。
この辺りの設計思想に興味がある方はDDDのリポジトリについてまとめた記事があるので
そちらもみてください!!
コードで学ぶ集約とリポジトリの関係〜DDD実践のためのきほん〜
Spring Bootで作成したサンプルAPI POSTの動作を確認する
実際に動作確認する方は、
APIをローカル環境で立ち上げてください。
このあたりで手順は解説していますので必要であれば参照ください!
IntelliJ IDEAをインストールと日本語化〜プロジェクトインポート〜ビルドして動かすまで実施!!バックエンド開発環境を構築する
何を使ってもいいのですが、
自分はChromeのプラグインのTalend API Testerを使ったりします。
一応使い方解説記事のリンクを貼っておきます。
>>Chrome拡張のTalend API TesterでAPIテスト
これを使ってこんな感じでリクエストを投げるとレスポンスを確認できます。
{
"receiptId": "0000000010",
"paymentDate": "2022-03-26",
"usagePoint": 200,
"paymentPrice": 2000,
"grantTarget": true,
"paymentDetails": [
{
"itemName": "現場で役立つ本",
"unitPrice": 1000
},
{
"itemName": "現場で役立たない本",
"unitPrice": 1200
}
],
"paymentMethodDetails": [
{
"paymentMethodName": "cash",
"paymentAmount": 1000
},
{
"paymentMethodName": "creditCard",
"paymentAmount": 1000
}
],
"userId": "0000000001"
}
APIが正常に動けば支払系の3テーブルにデータが登録されます。
まとめ
Spring BootでPOSTのAPIを作成するのはそこまで難しくなかったかと思います。
ポイントは2つ
- プロジェクトの依存関係にSpring Web追加
- リクエストパラメータの基本的なチェックはアノテーション設定でできる
ただ、、、
POSTのAPIでは、
誰でもAPIを自由に使えないようにヘッダの認証トークンをチェックする。
POSTしようとしているユーザは利用機能の権限を持っているのかチェックする。
DB登録失敗時の例外ハンドリング(ロールバックなど)。
などなど必要になります。
一応その辺りをふわっとでも頭にいれておけると、
現場で本物のAPIを見たときになんだこれ・・・ってならずに済むかなと思います!!