swagger: "2.0" info: version: 1.0.0 title: Simple API description: A simple API to learn how to write OpenAPI Specification schemes: - https host: simple.api basePath: /openapi101 paths: /persons: get: summary: Gets some persons description: Returns a list containing all persons. The list supports paging. parameters: - $ref: "#/parameters/pageSize" - $ref: "#/parameters/pageNumber" responses: 200: description: A list of Person schema: $ref: "#/definitions/Persons" 500: $ref: "#/responses/Standard500ErrorResponse" post: summary: Creates a person description: Adds a new person to the persons list. parameters: - name: person in: body description: The person to create. schema: $ref: "#/definitions/Person" responses: 204: description: Person succesfully created. 400: description: Person couldn't have been created. 500: $ref: "#/responses/Standard500ErrorResponse" /persons/{username}: parameters: - $ref: "#/parameters/username" get: summary: Gets a person description: Returns a single person for its username. responses: 200: description: A Person schema: $ref: "#/definitions/Person" 404: $ref: "#/responses/PersonDoesNotExistResponse" 500: $ref: "#/responses/Standard500ErrorResponse" delete: summary: Deletes a person description: Delete a single person identified via its username responses: 204: description: Person successfully deleted. 404: $ref: "#/responses/PersonDoesNotExistResponse" 500: $ref: "#/responses/Standard500ErrorResponse" /persons/{username}/friends: parameters: - $ref: "#/parameters/username" get: summary: Gets a person's friends description: Returns a list containing all persons. The list supports paging. parameters: - $ref: "#/parameters/pageSize" - $ref: "#/parameters/pageNumber" responses: 200: description: A person's friends list schema: $ref: "#/definitions/PagedPersons" 404: $ref: "#/responses/PersonDoesNotExistResponse" 500: $ref: "#/responses/Standard500ErrorResponse" /persons/{username}/collectingItems: parameters: - $ref: "#/parameters/username" get: summary: Gets a person's collecting items list description: Returns a list containing all items this person is looking for. The list supports paging. parameters: - $ref: "#/parameters/pageSize" - $ref: "#/parameters/pageNumber" responses: 200: description: A collected items list schema: $ref: "#/definitions/PagedCollectingItems" 404: $ref: "#/responses/PersonDoesNotExistResponse" 500: $ref: "#/responses/Standard500ErrorResponse" definitions: Person: required: - username properties: firstName: type: string lastName: type: string username: type: string pattern: "[a-z0-9]{8,64}" minLength: 8 maxLength: 64 dateOfBirth: type: string format: date lastTimeOnline: type: string format: date-time readOnly: true avatarBase64PNG: type: string format: byte spokenLanguages: $ref: "#/definitions/SpokenLanguages" SpokenLanguages: additionalProperties: type: string Persons: properties: items: type: array minItems: 10 maxItems: 100 uniqueItems: true items: $ref: "#/definitions/Person" ErrorMessage: properties: longMessage: type: string shortMessage: type: string MultilingualErrorMessage: additionalProperties: $ref: "#/definitions/ErrorMessage" properties: defaultLanguage: $ref: "#/definitions/ErrorMessage" Error: required: - code - message properties: code: type: string enum: - DBERR - NTERR - UNERR message: $ref: "#/definitions/MultilingualErrorMessage" CollectingItem: discriminator: itemType required: - itemType properties: itemType: type: string enum: - Vinyl - VHS imageId: type: string maxPrice: type: number format: double minimum: 0 maximum: 10000 exclusiveMinimum: true exclusiveMaximum: false Vinyl: allOf: - $ref: "#/definitions/CollectingItem" - required: - albumName - artist properties: albumName: type: string artist: type: string VHS: allOf: - $ref: "#/definitions/CollectingItem" - required: - movieTitle properties: movieTitle: type: string director: type: string PagedPersonsV1: properties: items: type: array items: $ref: "#/definitions/Person" totalItems: type: integer totalPages: type: integer pageSize: type: integer currentPage: type: integer PagedPersonsV2: properties: items: type: array items: $ref: "#/definitions/Person" paging: $ref: "#/definitions/Paging" Paging: properties: totalItems: type: integer totalPages: type: integer pageSize: type: integer currentPage: type: integer PagedPersons: allOf: - $ref: "#/definitions/Persons" - $ref: "#/definitions/Paging" PagedCollectingItems: allOf: - properties: items: type: array minItems: 10 maxItems: 100 uniqueItems: true items: $ref: "#/definitions/CollectingItem" - $ref: "#/definitions/Paging" responses: Standard500ErrorResponse: description: An unexpected error occured. schema: $ref: "#/definitions/Error" PersonDoesNotExistResponse: description: Person does not exist. parameters: username: name: username in: path required: true description: The person's username type: string pageSize: name: pageSize in: query description: Number of persons returned type: integer format: int32 minimum: 0 exclusiveMinimum: true maximum: 100 exclusiveMaximum: false multipleOf: 10 pageNumber: name: pageNumber in: query description: Page number type: integer