openapi: 3.1.0
info:
title: AiDrive API Contract
version: 1.0.0
description: |
前后端统一接口契约。所有接口返回统一结构。
servers:
- url: /api
tags:
- name: Auth
- name: User
security:
- bearerAuth: []
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
parameters:
Page:
name: page
in: query
schema: { type: integer, minimum: 1, default: 1 }
PageSize:
name: pageSize
in: query
schema: { type: integer, minimum: 1, maximum: 100, default: 20 }
Sort:
name: sort
in: query
description: "如: createdAt desc"
schema: { type: string }
schemas:
ApiResponse:
type: object
required: [code, message, data, traceId]
properties:
code: { type: integer, description: "0=成功,非0=失败" }
message: { type: string }
data: {}
traceId: { type: string }
ErrorResponse:
allOf:
- $ref: '#/components/schemas/ApiResponse'
- type: object
properties:
data:
type: object
properties:
fieldErrors:
type: array
items:
type: object
properties:
field: { type: string }
message: { type: string }
PageResult:
type: object
required: [list, page, pageSize, total]
properties:
list:
type: array
items: {}
page: { type: integer }
pageSize: { type: integer }
total: { type: integer }
User:
type: object
required: [id, username, name, role, createdAt]
properties:
id: { type: integer }
username: { type: string }
name: { type: string }
role: { type: string, example: "ADMIN" }
status: { type: string, example: "ACTIVE" }
createdAt: { type: string, format: date-time }
LoginRequest:
type: object
required: [username, password]
properties:
username: { type: string }
password: { type: string }
LoginResponse:
type: object
required: [token, expiresIn]
properties:
token: { type: string }
expiresIn: { type: integer, description: "秒" }
CreateUserRequest:
type: object
required: [username, name, role]
properties:
username: { type: string }
name: { type: string }
role: { type: string }
responses:
Unauthorized:
description: 未登录/Token失效
content:
application/json:
schema: { $ref: '#/components/schemas/ErrorResponse' }
Forbidden:
description: 无权限
content:
application/json:
schema: { $ref: '#/components/schemas/ErrorResponse' }
NotFound:
description: 资源不存在
content:
application/json:
schema: { $ref: '#/components/schemas/ErrorResponse' }
ValidationError:
description: 参数校验失败
content:
application/json:
schema: { $ref: '#/components/schemas/ErrorResponse' }
paths:
/auth/login:
post:
tags: [Auth]
summary: 用户登录
security: []
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/LoginRequest' }
responses:
'200':
description: 登录成功
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ApiResponse'
- type: object
properties:
data: { $ref: '#/components/schemas/LoginResponse' }
'422': { $ref: '#/components/responses/ValidationError' }
/users:
get:
tags: [User]
summary: 用户分页列表
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
- $ref: '#/components/parameters/Sort'
responses:
'200':
description: 成功
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ApiResponse'
- type: object
properties:
data:
allOf:
- $ref: '#/components/schemas/PageResult'
- type: object
properties:
list:
type: array
items: { $ref: '#/components/schemas/User' }
'401': { $ref: '#/components/responses/Unauthorized' }
'403': { $ref: '#/components/responses/Forbidden' }
post:
tags: [User]
summary: 创建用户
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/CreateUserRequest' }
responses:
'200':
description: 创建成功
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ApiResponse'
- type: object
properties:
data: { $ref: '#/components/schemas/User' }
'422': { $ref: '#/components/responses/ValidationError' }
/users/{id}:
get:
tags: [User]
summary: 用户详情
parameters:
- name: id
in: path
required: true
schema: { type: integer }
responses:
'200':
description: 成功
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ApiResponse'
- type: object
properties:
data: { $ref: '#/components/schemas/User' }
'404': { $ref: '#/components/responses/NotFound' }