diff --git a/src/main/resources/openapi/api.yaml b/src/main/resources/openapi/api.yaml new file mode 100644 index 00000000..5ff2768a --- /dev/null +++ b/src/main/resources/openapi/api.yaml @@ -0,0 +1,335 @@ +openapi: 3.0.3 +info: + title: Hideout API + description: Hideout API + version: 1.0.0 +servers: + - url: 'https://test-hideout.usbharu.dev/api/internal/v1' +paths: + /posts: + get: + summary: 権限に応じて投稿一覧を返す + security: + - { } + - BearerAuth: [ ] + responses: + 200: + description: 成功 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Post" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 429: + $ref: "#/components/responses/TooManyRequests" + post: + summary: 投稿する + security: + - BearerAuth: [ ] + requestBody: + description: 投稿する内容 + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Post" + responses: + 200: + description: 成功 + headers: + Location: + description: 作成した投稿のURL + schema: + type: string + format: uri + 401: + $ref: "#/components/responses/Unauthorized" + 429: + $ref: "#/components/responses/TooManyRequests" + /posts/{postId}: + get: + summary: 権限に応じてIDの投稿を返す + security: + - { } + - BearerAuth: [ ] + parameters: + - $ref: "#/components/parameters/postId" + responses: + 200: + description: 成功 + content: + application/json: + schema: + $ref: "#/components/schemas/Post" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 404: + $ref: "#/components/responses/NotFoundOrForbidden" + 429: + $ref: "#/components/responses/TooManyRequests" + /users/{userName}/posts: + get: + summary: 権限に応じてユーザーの投稿一覧を返す + security: + - { } + - BearerAuth: [ ] + parameters: + - $ref: "#/components/parameters/userName" + responses: + 200: + description: 成功 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Post" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 429: + $ref: "#/components/responses/TooManyRequests" + + /users/{userName}/posts/{postId}: + get: + summary: 権限に応じてIDの投稿を返す + description: userNameが間違っていても取得できます。 + security: + - { } + - BearerAuth: [ ] + parameters: + - $ref: "#/components/parameters/userName" + - $ref: "#/components/parameters/postId" + responses: + 200: + description: 成功 + content: + application/json: + schema: + $ref: "#/components/schemas/Post" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 404: + $ref: "#/components/responses/NotFoundOrForbidden" + 429: + $ref: "#/components/responses/TooManyRequests" + + /users: + get: + summary: ユーザー一覧を返す + security: + - { } + responses: + 200: + description: 成功 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + + post: + summary: ユーザーを作成する + security: + - { } + requestBody: + description: 作成するユーザーの詳細 + required: true + content: + application/json: + schema: + type: object + properties: + username: + type: string + password: + type: string + responses: + 201: + description: ユーザーが作成された + headers: + Location: + description: 作成されたユーザーのURL + schema: + type: string + format: url + 400: + description: ユーザー名が既に仕様されている。またはリクエストが異常 + + /users/{userName}: + get: + summary: ユーザーの詳細を返す + security: + - { } + - BearerAuth: [ ] + parameters: + - $ref: "#/components/parameters/userName" + responses: + 200: + description: 成功 + content: + application/json: + schema: + $ref: "#/components/schemas/User" + 404: + $ref: "#/components/responses/NotFound" + + /users/{userName}/followers: + get: + summary: ユーザーのフォロワー一覧を返す + parameters: + - $ref: "#/components/parameters/userName" + responses: + 200: + description: 成功 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + post: + summary: ユーザーをフォローする + security: + - BearerAuth: [ ] + parameters: + - $ref: "#/components/parameters/userName" + responses: + 200: + description: 成功 + 202: + description: 受け付けられたが完了していない + 401: + $ref: "#/components/responses/Unauthorized" + 404: + $ref: "#/components/responses/NotFound" + + /users/{userName}/following: + get: + summary: ユーザーのフォロイー一覧を返す + parameters: + - $ref: "#/components/parameters/userName" + responses: + 200: + description: 成功 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + +components: + responses: + Unauthorized: + description: トークンが無効 + Forbidden: + description: 権限がない + NotFoundOrForbidden: + description: 存在しないか権限がない + NotFound: + description: 存在しない + TooManyRequests: + description: レートリミット + + parameters: + postId: + name: postId + in: path + description: 投稿ID + required: true + schema: + type: integer + format: int64 + userName: + name: userName + in: path + description: ユーザーIDまたはAcctなど @name@domain name@domain name + required: true + schema: + type: string + + schemas: + User: + type: object + properties: + id: + type: number + format: int64 + readOnly: true + name: + type: string + domain: + type: string + readOnly: true + screenName: + type: string + description: + type: string + url: + type: string + readOnly: true + createdAt: + type: number + readOnly: true + Post: + type: object + properties: + id: + type: integer + format: int64 + readOnly: true + userId: + type: integer + format: int64 + readOnly: true + overview: + type: string + text: + type: string + createdAt: + type: integer + format: int64 + readOnly: true + visibility: + type: string + enum: + - public + - unlisted + - followers + - direct + url: + type: string + format: uri + readOnly: true + repostId: + type: integer + format: int64 + readOnly: true + replyId: + type: integer + format: int64 + readOnly: true + sensitive: + type: boolean + apId: + type: string + format: url + readOnly: true + + + securitySchemes: + BearerAuth: + type: http + scheme: bearer