openapi: 3.0.0 info: title: User CRUD API version: 1.0.0 servers: - url: https://api.example.com/v1 paths: /users: get: summary: Get all users responses: '200': description: A list of users content: application/json: schema: type: array items: $ref: '#/components/schemas/User' post: summary: Create a new user requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserCreate' responses: '201': description: User created content: application/json: schema: $ref: '#/components/schemas/User' /users/{userId}: get: summary: Get a user by ID parameters: - name: userId in: path required: true schema: type: string responses: '200': description: User details content: application/json: schema: $ref: '#/components/schemas/User' '404': description: User not found put: summary: Update a user by ID parameters: - name: userId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserUpdate' responses: '200': description: User updated content: application/json: schema: $ref: '#/components/schemas/User' '404': description: User not found delete: summary: Delete a user by ID parameters: - name: userId in: path required: true schema: type: string responses: '204': description: User deleted successfully '404': description: User not found components: schemas: User: type: object properties: id: type: string example: "123" username: type: string example: "johndoe" email: type: string format: email example: "johndoe@example.com" required: - id - username - email UserCreate: type: object properties: username: type: string example: "johndoe" email: type: string format: email example: "johndoe@example.com" password: type: string format: password required: - username - email - password UserUpdate: type: object properties: username: type: string example: "john_doe_updated" email: type: string format: email example: "johnupdated@example.com" required: - username - email