1
0
mirror of https://github.com/enpaul/kodak.git synced 2024-11-14 10:36:55 +00:00

Refactor openapi spec to meet new requirements and scopes

This commit is contained in:
Ethan Paul 2021-05-06 01:36:43 -04:00
parent d92b53a60c
commit 2608be7c6f
No known key found for this signature in database
GPG Key ID: C5F5542B54A4D9C6

View File

@ -4,10 +4,10 @@ info:
version: 0.1.0 version: 0.1.0
title: ImageMuck title: ImageMuck
description: >- description: >-
ImageMuck is a simple HTTP server that allows users to upload A simple HTTP service for mucking about with images. This is a super basic HTTP
images and retrieve them at a later time. In addition, it service for autogenerating website ready banner and preview images from full-size
supports generating (and caching) scaled versions of the source images. The generated images are automatically cached with deterministic
uploaded images for use as thumbnails. URLs.
license: license:
name: MIT name: MIT
url: https://mit-license.org/ url: https://mit-license.org/
@ -37,14 +37,39 @@ paths:
application/json: application/json:
schema: schema:
type: object type: object
/image/: /image/{image_name}.{format}:
get:
summary: Retrieve the image resource with the specified ID
operationId: ImageGet
tags: ["image"]
parameters:
- $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
responses:
'200':
description: Image content for provided ID
headers: *headers-default
content:
image/jpeg: {}
image/png: {}
'404':
$ref: "#/components/responses/NotFoundError"
'410':
$ref: "#/components/responses/DeletedError"
'500':
$ref: "#/components/responses/InternalServerError"
post: post:
summary: Upload an image to the server summary: Upload an image to the server
operationId: ImageUpload operationId: ImageUpload
tags: ["image"] tags: ["image"]
parameters:
- $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
responses: responses:
'201': '201':
description: Image uploaded successfully description: Image uploaded successfully
'405':
$ref: "#/components/responses/MethodNotAllowedError"
'406': '406':
description: Image is not acceptable for upload description: Image is not acceptable for upload
headers: *headers-default headers: *headers-default
@ -52,6 +77,13 @@ paths:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/Error" $ref: "#/components/schemas/Error"
'409':
description: Image with provided ID already exists
headers: *headers-default
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
'413': '413':
description: Image is too large for upload description: Image is too large for upload
headers: *headers-default headers: *headers-default
@ -61,42 +93,21 @@ paths:
$ref: "#/components/schemas/Error" $ref: "#/components/schemas/Error"
'500': '500':
$ref: "#/components/responses/InternalServerError" $ref: "#/components/responses/InternalServerError"
options:
summary: Retrieve available HTTP verbs for the selected endpoint
operationId: ImageUploadOptions
tags: ["meta"]
responses: *responses-options
/image/{image_id}.jpeg:
get:
summary: Retrieve the image resource with the specified ID
operationId: ImageGet
tags: ["image"]
parameters:
- $ref: "#/components/parameters/ImageUUID"
responses:
'200':
description: Image content for provided ID
headers: *headers-default
content:
image/jpeg: {}
'404':
$ref: "#/components/responses/NotFoundError"
'410':
$ref: "#/components/responses/DeletedError"
'500':
$ref: "#/components/responses/InternalServerError"
delete: delete:
summary: Delete an image from the server summary: Delete an image from the server
operationId: ImageDelete operationId: ImageDelete
tags: ["image"] tags: ["image", "manipulate"]
parameters: parameters:
- $ref: "#/components/parameters/ImageUUID" - $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
responses: responses:
'204': '204':
description: Image with provided ID successfully deleted description: Image with provided ID successfully deleted
headers: *headers-default headers: *headers-default
'404': '404':
$ref: "#/components/responses/NotFoundError" $ref: "#/components/responses/NotFoundError"
'405':
$ref: "#/components/responses/MethodNotAllowedError"
'410': '410':
$ref: "#/components/responses/DeletedError" $ref: "#/components/responses/DeletedError"
'500': '500':
@ -106,67 +117,77 @@ paths:
operationId: ImageOptions operationId: ImageOptions
tags: ["meta"] tags: ["meta"]
parameters: parameters:
- $ref: "#/components/parameters/ImageUUID" - $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
responses: *responses-options responses: *responses-options
/thumb/{image_id}/scale/{scale_width}.jpeg: /image/{image_name}/{dimension}-{value}.{format}:
get: get:
summary: Fetch a scaled thumbnail image summary: Fetch a scaled image
operationId: ThumbnailScale operationId: ThumbnailScale
tags: ["thumbnail"] tags: ["manipulate"]
parameters: parameters:
- $ref: "#/components/parameters/ImageUUID" - $ref: "#/components/parameters/ImageName"
- name: scale_width - $ref: "#/components/parameters/ImageFormat"
in: path - $ref: "#/components/parameters/ImageScaleDimension"
description: Width in pixels to scale the image to - $ref: "#/components/parameters/ImageScaleValue"
required: true
schema:
type: number
format: integer
responses: responses:
'200': '200':
description: Scaled image thumbnail content description: Scaled image thumbnail content
headers: *headers-default headers: *headers-default
content: content:
image/jpeg: {} image/jpeg: {}
image/png: {}
'404': '404':
$ref: "#/components/responses/NotFoundError" $ref: "#/components/responses/NotFoundError"
'410': '410':
$ref: "#/components/responses/DeletedError" $ref: "#/components/responses/DeletedError"
'500': '500':
$ref: "#/components/responses/InternalServerError" $ref: "#/components/responses/InternalServerError"
/thumb/{image_id}/size/{width}x{height}.jpeg: options:
get: summary: Retrieve available HTTP verbs for the selected endpoint
summary: Fetch a thumbnail image with specific dimensions operationId: ImageScaleOptions
operationId: ThumbnailDimension tags: ["meta"]
tags: ["thumbnail"]
parameters: parameters:
- $ref: "#/components/parameters/ImageUUID" - $ref: "#/components/parameters/ImageName"
- name: width - $ref: "#/components/parameters/ImageFormat"
in: path - $ref: "#/components/parameters/ImageScaleDimension"
description: Width in pixels of the image thumbnail - $ref: "#/components/parameters/ImageScaleValue"
required: true responses: *responses-options
schema: /image/{image_name}/{anchor}-{width}x{height}.{format}:
type: number get:
format: integer summary: Fetch a cropped version of the image
- name: height operationId: ImageCrop
in: path tags: ["manipulate"]
description: Height in pixels of the image thumbnail parameters:
required: true - $ref: "#/components/parameters/ImageName"
schema: - $ref: "#/components/parameters/ImageFormat"
type: number - $ref: "#/components/parameters/ImageCropAnchor"
format: integer - $ref: "#/components/parameters/ImageCropWidth"
- $ref: "#/components/parameters/ImageCropHeight"
responses: responses:
'200': '200':
description: Scaled thumbnail image of specified dimentions description: Scaled thumbnail image of specified dimentions
headers: *headers-default headers: *headers-default
content: content:
image/jpeg: {} image/jpeg: {}
image/png: {}
'404': '404':
$ref: "#/components/responses/NotFoundError" $ref: "#/components/responses/NotFoundError"
'410': '410':
$ref: "#/components/responses/DeletedError" $ref: "#/components/responses/DeletedError"
'500': '500':
$ref: "#/components/responses/InternalServerError" $ref: "#/components/responses/InternalServerError"
options:
summary: Retrieve available HTTP verbs for the selected endpoint
operationId: ImageCropOptions
tags: ["meta"]
parameters:
- $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
- $ref: "#/components/parameters/ImageCropAnchor"
- $ref: "#/components/parameters/ImageCropWidth"
- $ref: "#/components/parameters/ImageCropHeight"
responses: *responses-options
components: components:
schemas: schemas:
Error: Error:
@ -193,14 +214,61 @@ components:
schema: schema:
type: string type: string
parameters: parameters:
ImageUUID: ImageName:
name: image_id name: image_name
in: path in: path
description: Image resource UUID description: Image resource name
required: true required: true
schema: schema:
type: string type: string
format: uuid ImageFormat:
name: format
in: path
description: Image format extension
required: true
schema:
type: string
enum: [jpg, jpeg, png]
ImageScaleDimension:
name: dimension
in: path
description: Which dimension to scale to the provided dimension
required: true
schema:
type: string
enum: ["w", "h"]
ImageScaleValue:
name: value
in: path
description: Dimension in pixels to scale the image to
required: true
schema:
type: number
format: integer
ImageCropAnchor:
name: anchor
in: path
description: Anchor point on the image for cropping
required: true
schema:
type: string
enum: ["tl", "tc", "tr", "cl", "cc", "cr", "bl", "bc", "br"]
ImageCropWidth:
name: width
in: path
description: Width in pixels of the image thumbnail
required: true
schema:
type: number
format: integer
ImageCropHeight:
name: height
in: path
description: Height in pixels of the image thumbnail
required: true
schema:
type: number
format: integer
responses: responses:
InternalServerError: InternalServerError:
description: Internal server error description: Internal server error
@ -216,6 +284,13 @@ components:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/Error" $ref: "#/components/schemas/Error"
MethodNotAllowedError:
description: The request's HTTP method is not allowed on this endpoint
headers: *headers-default
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
DeletedError: DeletedError:
description: Image with provided ID was deleted description: Image with provided ID was deleted
headers: *headers-default headers: *headers-default