#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"}







コメントを残す