以前の記事で複数コンテナを扱うdocker composeについてまとめました。
Docker Composeとは、一度に複数のコンテナを作成・実行できるソフトウェアのことです。Docker内に同梱され…
Docker Composeで利用するキーや階層構造の主な記述方法についてまとめていきます。Docker Compose…
今回の記事ではAPIを修正し、DBサーバーから取得したデータを元にレスポンスを作成するようにして、webAPIの完成まで持っていきます。
WebAPIの完成イメージ
今回のWebAPIはAPIサーバーにJavaのSpring Boot、DBサーバーにPostgresSQLを利用して外部からポート8080でAPIサーバーにアクセスし、DBのデータを取得後レスポンスを返すという簡単なものを作成していきます。
イメージとしては以下のようなものを作成していきます。
WebAPIを編集する
WebAPIを編集し、固定値”wang wang”と返していたものを、リクエストの動物に合わせてDBから鳴き声を取得しそれを返却するようにしていきましょう。
こちらの内容はDockerの内容というよりもspring bootの内容となるので詳細は割愛します。
必要なJavaファイルを作成する
では、WebAPIを実際に編集していきましょう。
以下のパスにファイルを作成してください。
webapi/api/src/main/java/com/example/api/AnimalRepository.java
作成後、ファイルを開き以下のように編集してください。
package com.example.api;
import com.example.api.entities.AnimalEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import jakarta.transaction.Transactional;
@Repository
@Transactional
public interface AnimalsRepository extends JpaRepository<AnimalEntity, String> {
AnimalEntity findFirstByAnimalName(String animalName);
}
次に、先ほどの記述の中に存在するAnimalEntity
はまだ作成していないのでそちらを作成していきます。
以下のパスにファイルを作成してください。
webapi/api/src/main/java/com/example/api/entities/AnimalEntity.java
作成後、ファイルを開き以下のように編集してください。
package com.example.api.entities;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "animals")
public class AnimalEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
public String animalName;
public String cry;
}
既存のファイルを編集する
では次に、すでに作成済みのAnimalController.java
を編集していきます。
ファイルの内容を以下のように変更してください。
package com.example.api;
import com.example.api.entities.AnimalEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@RestController
@RequestMapping("/api")
public class AnimalController {
@Autowired
private AnimalsRepository animalsRepository;
@RequestMapping("/animal")
public String cry(
@RequestParam String animalName
) {
AnimalEntity animalEntity = this.animalsRepository.findFirstByAnimalName(animalName);
return animalEntity.cry;
}
}
AnimalController.java
の編集が完了したら次に以下のファイルを編集していきます。
webapi/api/src/main/resources/application.properties
こちらのファイルはspring bootのプロジェクト作成時に自動で作成されていたものです。
こちらのファイルを以下のように編集してください。
spring.application.name=api
spring.datasource.url=jdbc:postgresql://db:5432/appdb
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=none
docker-compose.yamlに設定を追加する
WebAPIの編集の最後にdocker-compose.yaml
への設定の追加を行います。
以下の設定を追加してください。
〜〜〜〜〜〜〜〜
api:
build: ./api
ports:
- 8080:8080
depends_on: # 追加
- db # 追加
db:
image: postgres:15
〜〜〜〜〜〜〜〜
depends-on
という設定ではサービス間の依存関係を定義でき、コンテナの起動順の制御をすることができます。
コード内のdepends-on: db
という記述はapiコンテナがdbコンテナに依存していることを表しており、依存先のdbコンテナから起動するようになります。
docker compose upでWebAPIコンテナとDBコンテナを起動
ここまで編集できたら最後にdocker compose up
コマンドで2つのコンテナを起動していきましょう。docker-compose.yaml
があるフォルダで以下のコマンドを実行してください。
docker compose up --build
--build
オプションはイメージのビルドをし直すところから起動するためのオプションです。
これをつけないと以前のイメージのままビルドするためWebAPIコンテナに今回の編集が適応されていない状態になってしまうので忘れずに付けましょう。
実行後、以下のようにWebAPIコンテナが作成され、Springアプリケーションが起動していれば成功です。
APIを呼び出してみる
では、APIを呼び出してみましょう。
ブラウザを起動して、以下のURLを実行してみてください。
http://localhost:8080/api/animal?animalName=dog
実行して以下のようにレスポンスが返ってくれば成功です。
データベースに登録している他のanimalNameを指定してみましょう。
http://localhost:8080/api/animal?animalName=cat
指定したanimalNameに合わせてデータベースから取得した鳴き声が取得できてるのが確認できます。
これで、docker composeを利用したWebAPIの実装は完了です。
まとめ
ここまで3回の記事に分けてdocker composeの簡単な実例をお見せしながらWebAPIの開発を行ってきました。
複数のコンテナを同時にdocker-compose.yamlファイルで管理できることで開発しやすくなっていることが実感できたのではないかと思います。
複数のコンテナを扱うのは現在の開発ではスタンダードなので、docker composeの知識も必須となっています。
しっかりと覚えておきましょう。
ここまで読んでいただきありがとうございました。
それでは、また。