#5 [SpringBoot/KotlinでBFF]Repository層で呼び出す外部APIのMockを簡易的にSpringBootで作る

#4で作ったFrontend向けのモデルを2つの外部APIから取得する想定で、簡易外部APIを2つ用意する。
JSON ServerといったMockツールで簡単に作ることもできるけど、何かとローカル環境でテストしたい時に融通が効くかなと思うのでSpringBootで作ってしまう。

Task情報を返す外部API

#1から#4で作った手順でプロジェクトを作成して、以下のようなタスク情報を返すGET APIを用意。

  • id:String タスクの一意なID
  • title : String タスクのタイトル
  • description: String タスクの詳細説明
  • created: Date データが作成された時間(ここではひとまずAPIが呼ばれた時間を返すだけにする)
@RestController
@RequestMapping("/tasks")
class TasksController {

    @GetMapping("/{taskId}")
    @ResponseBody
    @ResponseStatus(HttpStatus.OK)
    fun getTask(@PathVariable("taskId") taskId: Int): Task {
        return Task(
                taskId = taskId,
                title = "タスクのタイトル",
                description = "タスクの詳細説明",
                created = Date())
    }
}

data class Task (
        val taskId: Int,
        val title: String,
        val description: String,
        val created: Date
)

ポート番号

ローカル環境でメインのアプリとは別で同時に起動させる必要があるのでSpringBootの機能を使ってWebアプリのポート番号をデフォルト8080から変更する。
SpringBootのプロジェクトを作ると自動的に設定ファイルapplication.propertiesが用意されている。最近はyaml形式がよく使われるように思うので、ここではapplication.ymlにリネームして以下のように設定、ここではポート番号50000とする(well-knownポートと1024-49512の登録ポートは他のアプリで使われる可能性があるので避けておく)。

resource/application.yml

server:
  port: 50000

起動結果

http://localhost:50000/tasks/12345

{"taskId":12345,"title":"タスクのタイトル","description":"タスクの詳細説明","created":"2020-09-16T11:26:36.328+00:00"}

User情報を返すAPI

同じ手順でタスク担当者のユーザー情報を返す想定のAPIも作ってみる。冗長かもしれないけどプロジェクトから別途作る。

  • userId: Int ユーザーID
  • serName: String タスクの担当者
  • created: Date データが作成された時間(ここではひとまずAPIが呼ばれた時間を返すだけにする)
class UsersController {

    @GetMapping("/{userId}")
    @ResponseBody
    @ResponseStatus(HttpStatus.OK)
    fun getUser(@PathVariable("userId") userId: Int): User {
        return User(
                userId = userId,
                userName = "タスクの管理者A",
                created = Date()
        )
    }
}

data class User (
        val userId: Int,
        val userName: String,
        val created: Date
)
server:
  port: 50001

http://localhost:50001/users/1

{"userId":1,"userName":"タスクの管理者A","created":"2020-09-16T12:39:44.251+00:00"}

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
little
15年以上プログラマーをしているエンジニアです。Kotlin, Java, Python, C++を使用したServerSideの開発に携わってきました。とりあえずやってみるスタイルで記事を更新していきます。