POST /resources
Summary: 資源を登録する
管理者が会議室または備品を有効な状態で登録します。
Headers
なし
Path Parameters
なし
Query Parameters
なし
Data
| 項目 | 型 | 必須 | 説明 | 制約 |
|---|---|---|---|---|
name |
string |
yes | 利用者に表示する資源名です。空白除去後1〜100文字です。 | minLength=1, maxLength=100 |
description |
string |
no | 資源の設備や用途を説明する文章です。0〜1,000文字です。 | maxLength=1000 |
kind |
string(room, equipment) |
no | 予約対象の資源種別を表す列挙値です。 | room=会議室です。 equipment=持ち運びできる備品です。 |
Responses
| Status | 説明 | Media type | Body |
|---|---|---|---|
201 |
Successful Response | application/json |
6 field(s) |
401 |
認証情報が未指定、期限切れ、または検証できない場合。 | application/json |
12 field(s) |
403 |
呼び出し元が資源を管理できる管理者でない場合。 | application/json |
12 field(s) |
422 |
bodyがOpenAPIスキーマの型や制約に一致しない場合。 | application/json |
12 field(s) |
429 |
呼び出し頻度が許可された上限を超えた場合。 | application/json |
12 field(s) |
500 |
SlotKeeper内部で想定外のエラーが発生した場合。 | application/json |
12 field(s) |
503 |
DBの競合や接続障害が再試行上限を超えた場合。 | application/json |
12 field(s) |
201 Successful Response
Media type: application/json
| 項目 | 型 | 必須 | 説明 | 制約 |
|---|---|---|---|---|
resourceId |
string |
yes | 予約対象の資源を一意に識別するIDです。 | minLength=1, maxLength=36 |
name |
string |
yes | 利用者に表示する資源名です。 | minLength=1, maxLength=100 |
description |
string |
yes | 資源の設備や用途を説明する文章です。 | maxLength=1000 |
kind |
string(room, equipment) |
yes | 予約対象の資源種別を表す列挙値です。 | room=会議室です。 equipment=持ち運びできる備品です。 |
active |
boolean |
yes | 新規予約を受け付けるかどうかです。 | - |
version |
integer |
yes | 資源編集の楽観ロックに使う公開版です。 | minimum=1.0 |
401 認証情報が未指定、期限切れ、または検証できない場合。
Media type: application/json
| 項目 | 型 | 必須 | 説明 | 制約 |
|---|---|---|---|---|
error |
ErrorBody |
yes | エラーコード、メッセージ、追跡IDを含む共通エラー本文です。 | - |
error.code |
string |
yes | エラー種別を機械的に判定するためのコードです。 | minLength=1, maxLength=100 |
error.message |
string |
yes | 利用者が次に確認・修正・再試行・問い合わせすべき内容を示すメッセージです。 | maxLength=1000 |
error.details |
array<ErrorDetail> |
no | リトライ可否、問い合わせ時に伝える追跡ID、確認対象リソースなどの詳細一覧です。 | - |
error.details[].field |
string | null |
no | 入力検証エラーが発生したリクエスト項目です。 | minLength=1, maxLength=256 |
error.details[].reason |
string | null |
no | 入力検証エラー、再試行判断、または問い合わせ時に確認する具体的な理由です。 | minLength=1 |
error.details[].statusCode |
integer | null |
no | 返却されたHTTPステータスコードです。 | minimum=400.0, maximum=599.0 |
error.details[].retryable |
boolean | null |
no | 同じリクエストを再実行して解消する可能性があるかどうかです。 | - |
error.details[].reference |
string | null |
no | 問い合わせ時に伝える追跡IDまたは相関IDです。 | minLength=1, maxLength=128 |
error.details[].resource |
ErrorResource | null |
no | 再送、状態確認、問い合わせ時に確認する対象リソースです。 | - |
error.details[].resource.name |
string | null |
no | 登録しようとした資源名です。 | minLength=1, maxLength=100 |
error.traceId |
string |
yes | 障害調査でログとレスポンスを対応付ける追跡IDです。 | minLength=1, maxLength=128 |
403 呼び出し元が資源を管理できる管理者でない場合。
Media type: application/json
| 項目 | 型 | 必須 | 説明 | 制約 |
|---|---|---|---|---|
error |
ErrorBody |
yes | エラーコード、メッセージ、追跡IDを含む共通エラー本文です。 | - |
error.code |
string |
yes | エラー種別を機械的に判定するためのコードです。 | minLength=1, maxLength=100 |
error.message |
string |
yes | 利用者が次に確認・修正・再試行・問い合わせすべき内容を示すメッセージです。 | maxLength=1000 |
error.details |
array<ErrorDetail> |
no | リトライ可否、問い合わせ時に伝える追跡ID、確認対象リソースなどの詳細一覧です。 | - |
error.details[].field |
string | null |
no | 入力検証エラーが発生したリクエスト項目です。 | minLength=1, maxLength=256 |
error.details[].reason |
string | null |
no | 入力検証エラー、再試行判断、または問い合わせ時に確認する具体的な理由です。 | minLength=1 |
error.details[].statusCode |
integer | null |
no | 返却されたHTTPステータスコードです。 | minimum=400.0, maximum=599.0 |
error.details[].retryable |
boolean | null |
no | 同じリクエストを再実行して解消する可能性があるかどうかです。 | - |
error.details[].reference |
string | null |
no | 問い合わせ時に伝える追跡IDまたは相関IDです。 | minLength=1, maxLength=128 |
error.details[].resource |
ErrorResource | null |
no | 再送、状態確認、問い合わせ時に確認する対象リソースです。 | - |
error.details[].resource.name |
string | null |
no | 登録しようとした資源名です。 | minLength=1, maxLength=100 |
error.traceId |
string |
yes | 障害調査でログとレスポンスを対応付ける追跡IDです。 | minLength=1, maxLength=128 |
422 bodyがOpenAPIスキーマの型や制約に一致しない場合。
Media type: application/json
| 項目 | 型 | 必須 | 説明 | 制約 |
|---|---|---|---|---|
error |
ErrorBody |
yes | エラーコード、メッセージ、追跡IDを含む共通エラー本文です。 | - |
error.code |
string |
yes | エラー種別を機械的に判定するためのコードです。 | minLength=1, maxLength=100 |
error.message |
string |
yes | 利用者が次に確認・修正・再試行・問い合わせすべき内容を示すメッセージです。 | maxLength=1000 |
error.details |
array<ErrorDetail> |
no | リトライ可否、問い合わせ時に伝える追跡ID、確認対象リソースなどの詳細一覧です。 | - |
error.details[].field |
string | null |
no | 入力検証エラーが発生したリクエスト項目です。 | minLength=1, maxLength=256 |
error.details[].reason |
string | null |
no | 入力検証エラー、再試行判断、または問い合わせ時に確認する具体的な理由です。 | minLength=1 |
error.details[].statusCode |
integer | null |
no | 返却されたHTTPステータスコードです。 | minimum=400.0, maximum=599.0 |
error.details[].retryable |
boolean | null |
no | 同じリクエストを再実行して解消する可能性があるかどうかです。 | - |
error.details[].reference |
string | null |
no | 問い合わせ時に伝える追跡IDまたは相関IDです。 | minLength=1, maxLength=128 |
error.details[].resource |
ErrorResource | null |
no | 再送、状態確認、問い合わせ時に確認する対象リソースです。 | - |
error.details[].resource.name |
string | null |
no | 登録しようとした資源名です。 | minLength=1, maxLength=100 |
error.traceId |
string |
yes | 障害調査でログとレスポンスを対応付ける追跡IDです。 | minLength=1, maxLength=128 |
429 呼び出し頻度が許可された上限を超えた場合。
Media type: application/json
| 項目 | 型 | 必須 | 説明 | 制約 |
|---|---|---|---|---|
error |
ErrorBody |
yes | エラーコード、メッセージ、追跡IDを含む共通エラー本文です。 | - |
error.code |
string |
yes | エラー種別を機械的に判定するためのコードです。 | minLength=1, maxLength=100 |
error.message |
string |
yes | 利用者が次に確認・修正・再試行・問い合わせすべき内容を示すメッセージです。 | maxLength=1000 |
error.details |
array<ErrorDetail> |
no | リトライ可否、問い合わせ時に伝える追跡ID、確認対象リソースなどの詳細一覧です。 | - |
error.details[].field |
string | null |
no | 入力検証エラーが発生したリクエスト項目です。 | minLength=1, maxLength=256 |
error.details[].reason |
string | null |
no | 入力検証エラー、再試行判断、または問い合わせ時に確認する具体的な理由です。 | minLength=1 |
error.details[].statusCode |
integer | null |
no | 返却されたHTTPステータスコードです。 | minimum=400.0, maximum=599.0 |
error.details[].retryable |
boolean | null |
no | 同じリクエストを再実行して解消する可能性があるかどうかです。 | - |
error.details[].reference |
string | null |
no | 問い合わせ時に伝える追跡IDまたは相関IDです。 | minLength=1, maxLength=128 |
error.details[].resource |
ErrorResource | null |
no | 再送、状態確認、問い合わせ時に確認する対象リソースです。 | - |
error.details[].resource.name |
string | null |
no | 登録しようとした資源名です。 | minLength=1, maxLength=100 |
error.traceId |
string |
yes | 障害調査でログとレスポンスを対応付ける追跡IDです。 | minLength=1, maxLength=128 |
500 SlotKeeper内部で想定外のエラーが発生した場合。
Media type: application/json
| 項目 | 型 | 必須 | 説明 | 制約 |
|---|---|---|---|---|
error |
ErrorBody |
yes | エラーコード、メッセージ、追跡IDを含む共通エラー本文です。 | - |
error.code |
string |
yes | エラー種別を機械的に判定するためのコードです。 | minLength=1, maxLength=100 |
error.message |
string |
yes | 利用者が次に確認・修正・再試行・問い合わせすべき内容を示すメッセージです。 | maxLength=1000 |
error.details |
array<ErrorDetail> |
no | リトライ可否、問い合わせ時に伝える追跡ID、確認対象リソースなどの詳細一覧です。 | - |
error.details[].field |
string | null |
no | 入力検証エラーが発生したリクエスト項目です。 | minLength=1, maxLength=256 |
error.details[].reason |
string | null |
no | 入力検証エラー、再試行判断、または問い合わせ時に確認する具体的な理由です。 | minLength=1 |
error.details[].statusCode |
integer | null |
no | 返却されたHTTPステータスコードです。 | minimum=400.0, maximum=599.0 |
error.details[].retryable |
boolean | null |
no | 同じリクエストを再実行して解消する可能性があるかどうかです。 | - |
error.details[].reference |
string | null |
no | 問い合わせ時に伝える追跡IDまたは相関IDです。 | minLength=1, maxLength=128 |
error.details[].resource |
ErrorResource | null |
no | 再送、状態確認、問い合わせ時に確認する対象リソースです。 | - |
error.details[].resource.name |
string | null |
no | 登録しようとした資源名です。 | minLength=1, maxLength=100 |
error.traceId |
string |
yes | 障害調査でログとレスポンスを対応付ける追跡IDです。 | minLength=1, maxLength=128 |
503 DBの競合や接続障害が再試行上限を超えた場合。
Media type: application/json
| 項目 | 型 | 必須 | 説明 | 制約 |
|---|---|---|---|---|
error |
ErrorBody |
yes | エラーコード、メッセージ、追跡IDを含む共通エラー本文です。 | - |
error.code |
string |
yes | エラー種別を機械的に判定するためのコードです。 | minLength=1, maxLength=100 |
error.message |
string |
yes | 利用者が次に確認・修正・再試行・問い合わせすべき内容を示すメッセージです。 | maxLength=1000 |
error.details |
array<ErrorDetail> |
no | リトライ可否、問い合わせ時に伝える追跡ID、確認対象リソースなどの詳細一覧です。 | - |
error.details[].field |
string | null |
no | 入力検証エラーが発生したリクエスト項目です。 | minLength=1, maxLength=256 |
error.details[].reason |
string | null |
no | 入力検証エラー、再試行判断、または問い合わせ時に確認する具体的な理由です。 | minLength=1 |
error.details[].statusCode |
integer | null |
no | 返却されたHTTPステータスコードです。 | minimum=400.0, maximum=599.0 |
error.details[].retryable |
boolean | null |
no | 同じリクエストを再実行して解消する可能性があるかどうかです。 | - |
error.details[].reference |
string | null |
no | 問い合わせ時に伝える追跡IDまたは相関IDです。 | minLength=1, maxLength=128 |
error.details[].resource |
ErrorResource | null |
no | 再送、状態確認、問い合わせ時に確認する対象リソースです。 | - |
error.details[].resource.name |
string | null |
no | 登録しようとした資源名です。 | minLength=1, maxLength=100 |
error.traceId |
string |
yes | 障害調査でログとレスポンスを対応付ける追跡IDです。 | minLength=1, maxLength=128 |
Samples
HTTP 201
Request
{
"headers": {
"Authorization": "Bearer <access-token>"
},
"body": {
"name": "会議室 青葉",
"description": "4名 · モニター · ホワイトボード",
"kind": "room"
}
}
Response
{
"resourceId": "00000000-0000-0000-0000-000000000001",
"name": "会議室 青葉",
"description": "4名 · モニター · ホワイトボード",
"kind": "room",
"active": true,
"version": 1
}
HTTP 401
Request
{
"headers": {
"Authorization": "Bearer <access-token>"
},
"body": {
"name": "会議室 青葉",
"description": "4名 · モニター · ホワイトボード",
"kind": "room"
}
}
Response
{
"error": {
"code": "UNAUTHORIZED",
"message": "認証情報を確認し、有効な認証情報で再送してください。",
"details": [
{
"reason": "認証情報が未指定、期限切れ、または検証できない場合。",
"statusCode": 401,
"retryable": false,
"reference": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
],
"traceId": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
}
HTTP 403
Request
{
"headers": {
"Authorization": "Bearer <access-token>"
},
"body": {
"name": "会議室 青葉",
"description": "4名 · モニター · ホワイトボード",
"kind": "room"
}
}
Response
{
"error": {
"code": "FORBIDDEN",
"message": "操作権限を確認し、必要な権限を持つ利用者で再送してください。",
"details": [
{
"reason": "呼び出し元が資源を管理できる管理者でない場合。",
"statusCode": 403,
"retryable": false,
"reference": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
],
"traceId": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
}
HTTP 422
Request
{
"headers": {
"Authorization": "Bearer <access-token>"
},
"body": {
"name": "会議室 青葉",
"description": "4名 · モニター · ホワイトボード",
"kind": "room"
}
}
Response
{
"error": {
"code": "VALIDATION_ERROR",
"message": "リクエストの型、必須項目、制約をOpenAPI仕様に合わせて修正してください。",
"details": [
{
"reason": "bodyがOpenAPIスキーマの型や制約に一致しない場合。",
"statusCode": 422,
"retryable": false,
"reference": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
],
"traceId": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
}
HTTP 429
Request
{
"headers": {
"Authorization": "Bearer <access-token>"
},
"body": {
"name": "会議室 青葉",
"description": "4名 · モニター · ホワイトボード",
"kind": "room"
}
}
Response
{
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "呼び出し頻度を下げ、時間をおいてから再送してください。",
"details": [
{
"reason": "呼び出し頻度が許可された上限を超えた場合。",
"statusCode": 429,
"retryable": true,
"reference": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
],
"traceId": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
}
HTTP 500
Request
{
"headers": {
"Authorization": "Bearer <access-token>"
},
"body": {
"name": "会議室 青葉",
"description": "4名 · モニター · ホワイトボード",
"kind": "room"
}
}
Response
{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "想定外のエラーが発生しました。追跡IDを添えて問い合わせてください。",
"details": [
{
"reason": "SlotKeeper内部で想定外のエラーが発生した場合。",
"statusCode": 500,
"retryable": false,
"reference": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
],
"traceId": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
}
HTTP 503
Request
{
"headers": {
"Authorization": "Bearer <access-token>"
},
"body": {
"name": "会議室 青葉",
"description": "4名 · モニター · ホワイトボード",
"kind": "room"
}
}
Response
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "一時的に処理できません。時間をおいて同じリクエストを再送してください。",
"details": [
{
"reason": "DBの競合や接続障害が再試行上限を超えた場合。",
"statusCode": 503,
"retryable": true,
"reference": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
],
"traceId": "trc_01HZY6WJ7X4W9A0V7P9N2Q3R4S"
}
}