書籍管理システムです。 書籍と著者の情報をRDBに登録・変更・検索ができるAPIです
以下の技術が利用されている。
- Spring boot 3 (Kotlin)
- Junit 5 (Kotlin)
- JDK17
- Jooq 3.18.4
本APIがDockerのMysql 8.0を利用しています。
DBのコンテーナーを実行には ./dockerディレクトリで以下のコマンドを実行する。
docker-compose up --build -d
コンテーナーの削除仕方
docker-compose down
DBにすでにデータが存在する。
そのデータは ./docker/schemas/books.sql ファイルで確認できる
gradlew generateJooq
Gradleビルドしたら、Gradleのタスクの一覧にjooq/generateJooqタスクが追加される。
generateJooqを実行してください。
全ての書籍の情報を返却する
-
URL: /v1/books
-
Method:
GET
-
成功レスポンス:
-
Code: 200 OK
-
Body:
[ { "bookId": 1, "author": "Tolkien", "title": "Hobbit" }, { "bookId": 2, "author": "Tolkien", "title": "Lord of the Rings" }, { "bookId": 3, "author": "Homer", "title": "Iliad" } ]
-
指定した書籍の情報を返却する
-
URL: /v1/book/{bookId}
-
Method:
GET
-
成功レスポンス:
-
Code: 200 OK
-
Body:
{ "bookId": 1, "author": "Tolkien", "title": "Hobbit" }
-
-
エラーレスポンス:
- Code: 400 Bad Request
- 原因: {bookId}に数字以外を設定する
- Body:
{ "message": "bookIdパラメータにIntegerを設定してください", "details": "uri=/v1/book/n" }
- Code: 400 Bad Request
指定した著者の情報を返却する
-
URL: /v1/author/{authorId}
-
Method:
GET
-
成功レスポンス:
-
Code: 200 OK
-
Body:
{ "authorId": 1, "authorName": "Tolkien", "authorCountry": "UK", "works": [ { "bookId": 1, "title": "Hobbit" }, { "bookId": 2, "title": "Lord of the Rings" } ]
}
-
-
エラーレスポンス:
- Code: 400 Bad Request
- 原因: {authorId}に数字以外を設定する
- Body:
{ "message": "authorIdパラメータにIntegerを設定してください", "details": "uri=/v1/author/n" }
- Code: 400 Bad Request
著者をDBに追加する
-
URL: /v1/create/author
-
Method:
PUT
-
リクエストJSON:
{
"name": "山本太郎",
"country": "Japan"
}
- 成功レスポンス:
-
Code: 200 OK
-
Body:
{ "message": "登録に成功しました。", "success": true }
-
- エラーレスポンス:
- Code: 400 Bad Request
- 原因: {"name"}が空
- Body:
{ "message": "nameを設定してください。", "details": "uri=/v1/create/author" }
- Code: 400 Bad Request
- 原因: {"country"}が空
- Body:
{ "message": "countryを設定してください。", "details": "uri=/v1/create/author" }
- Code: 400 Bad Request
- 原因: {"country"}が32文字より長い
- Body:
{ "message": "countryは32文字以内に入力してください。", "details": "uri=/v1/create/author"}
- Code: 400 Bad Request
- 原因: {"name"}が64文字より長い
- Body:
{ "message": "nameは64文字以内に入力してください。", "details": "uri=/v1/create/author"}
- Code: 400 Bad Request
- 原因: どれかのJsonキーがない時
- Body:
{ "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/create/author"}
- Code: 400 Bad Request
書籍をDBに追加する
-
URL: /v1/create/book
-
Method:
PUT
-
リクエストJSON:
{
"title": "本タイトル",
"authorId": 2
}
-
成功レスポンス:
-
Code: 200 OK
-
Body:
{ "message": "登録に成功しました。", "success": true }
-
エラーレスポンス:
-
Code: 400 Bad Request
-
原因: {"title"}が空
-
Body:
{ "message": "titleを設定してください。", "details": "uri=/v1/create/book" }
-
Code: 400 Bad Request
-
原因: {"title"}が128文字より長い
-
Body:
{ "message": "titleは128文字以内に入力してください。", "details": "uri=/v1/create/book" }
-
Code: 400 Bad Request
-
原因: {"authorId"}が文字 (数字に変換できない)
-
Body:
{ "message": "Objectパラメターのフィルドのデータ型に誤りがあります。", "details": "uri=/v1/create/book" }
-
Code: 400 Bad Request
-
原因: {"authorId"}が負数
-
Body:
{ "message": "authorIDの値には、1以上の数字を入力してください。", "details": "uri=/v1/create/book"}
-
Code: 400 Bad Request
-
原因: どれかのJsonキーがない時
-
Body:
{ "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/create/book"}
-
著者を更新する リクエストJSONの設定されているキーのみDBを更新する。 設定されていないキーがDBのデータを上書きしない。
-
URL: /v1/update/author
-
Method:
POST
-
リクエストJSON:
{
"authorId": 2,
"name": "山本太郎",
"country": "USA"
}
- 成功レスポンス:
-
Code: 200 OK
-
Body:
{ "message": "更新に成功しました。", "success": true }
著者id (authorId)がDBに存在しない場合、以下のレスポンスになる
{ "message": "更新に失敗しました。", "success": false }
-
- エラーレスポンス:
-
Code: 400 Bad Request
-
原因: {"country"}が32文字より長い
-
Body:
{ "message": "countryは32文字以内に入力してください。", "details": "uri=/v1/update/author"}
-
Code: 400 Bad Request
-
原因: {"name"}が64文字より長い
-
Body:
{ "message": "nameは64文字以内に入力してください。", "details": "uri=/v1/update/author"}
-
Code: 400 Bad Request
-
原因: どれかのJsonキーがない時
-
Body:
{ "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/update/author"}
-
Code: 400 Bad Request
-
原因: {"authorId"}が文字 (数字に変換できない)
-
Body:
{ "message": "Objectパラメターのフィルドのデータ型に誤りがあります。", "details": "uri=/v1/update/author"}
-
Code: 400 Bad Request
-
原因: どれかのJsonキーがない時
-
Body:
{ "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/update/author"}
-
書籍を更新する リクエストJSONの設定されているキーのみDBを更新する。 設定されていないキーがDBのデータを上書きしない。
-
URL: /v1/update/book
-
Method:
POST
-
リクエストJSON:
{
"bookId": 1,
"title": "タイトル",
"authorId": 3
}
-
成功レスポンス:
-
Code: 200 OK
-
Body:
{ "message": "更新に成功しました。", "success": true }
書籍id (bookId)がDBに存在しない場合、以下のレスポンスになる
{ "message": "更新に失敗しました。", "success": false }
設定した著者id (authorId)がDBに存在しない場合、以下のレスポンスになる
{ "message": "DBに存在しない著者で書籍の情報を更新することができません、先に著者を登録してください。", "success": false }
-
エラーレスポンス:
-
Code: 400 Bad Request
-
原因: {"title"}が128文字より長い
-
Body:
{ "message": "titleは128文字以内に入力してください。", "details": "uri=/v1/update/book" }
-
Code: 400 Bad Request
-
原因: {"authorId"}が文字 (数字に変換できない)
-
Body:
{ "message": "Objectパラメターのフィルドのデータ型に誤りがあります。", "details": "uri=/v1/update/book" }
-
Code: 400 Bad Request
-
原因: {"authorId"}が負数
-
Body:
{ "message": "authorIdの値には、1以上の数字を入力してください。", "details": "uri=/v1/update/book"}
-
Code: 400 Bad Request
-
原因: {"bookId"}が文字 (数字に変換できない)
-
Body:
{ "message": "Objectパラメターのフィルドのデータ型に誤りがあります。", "details": "uri=/v1/update/book"}
-
Code: 400 Bad Request
-
原因: {"bookId"}が負数
-
Body:
{ "message": "bookIdの値には、1以上の数字を入力してください。", "details": "uri=/v1/update/book"}
-
Code: 400 Bad Request
-
原因: どれかのJsonキーがない時
-
Body:
{ "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/update/book"}
-