kodak/openapi.yaml

292 lines
9.0 KiB
YAML

---
openapi: "3.0.2"
info:
version: 0.1.1
title: Kodak
description: >-
A simple HTTP service for mucking about with images. This is a super basic HTTP
service for autogenerating website-ready banner and preview images from full-size
source images. The generated images are automatically cached with deterministic
URLs.
license:
name: MIT
url: https://mit-license.org/
x-anchors:
DefaultHeaders: &headers-default
Server:
$ref: "#/components/headers/Version"
OptionsResponses: &responses-options
'204':
description: "Available HTTP verbs in header, per RFC 7231"
headers:
Allowed:
$ref: "#/components/headers/Allowed"
'500':
$ref: "#/components/responses/InternalServerError"
ImageHeaders: &headers-image
<<: *headers-default
Content-Digest:
description: SHA256 hash of the provided image content
schema:
type: string
format: sha256
example: sha-256=f2bf647325d5a6ad2d7ca138293f9cb224dd863fde0e3fa46bc5c15b43fece5c
Content-Type:
description: Content type of the image being returned
schema:
type: string
enum: [image/jpeg, image/png]
Cache-Control:
description: Cache settings for the image to prevent unnecessary reloads
schema:
type: string
example: public, max-age=604800, immutable
paths:
/openapi.json:
get:
summary: Retrieve the OpenAPI specification file
operationId: OpenAPI
tags: ["meta"]
responses:
'200':
description: Contents of the OpenAPI spec file
headers: *headers-default
content:
application/json:
schema:
type: object
/heartbeat:
head:
summary: Check whether the service is online
operationId: Heartbeat
tags: ["meta"]
responses:
'200':
description: Server is operational
headers: *headers-default
'500':
description: Server is not operating correctly
headers: *headers-default
/image/{image_name}/original:
head:
summary: Returns metadata about the image request
operationId: ImageHead
tags: ["meta"]
parameters:
- $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
responses:
'200':
$ref: "#/components/responses/ImageMeta"
'401':
$ref: "#/components/responses/UnauthenticatedError"
'404':
$ref: "#/components/responses/NotFoundError"
'405':
$ref: "#/components/responses/MethodNotAllowedError"
'410':
$ref: "#/components/responses/DeletedError"
'422':
$ref: "#/components/responses/UnacceptableError"
'500':
$ref: "#/components/responses/InternalServerError"
'501':
$ref: "#/components/responses/NotImplementedError"
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':
$ref: "#/components/responses/Image"
'401':
$ref: "#/components/responses/UnauthenticatedError"
'404':
$ref: "#/components/responses/NotFoundError"
'405':
$ref: "#/components/responses/MethodNotAllowedError"
'410':
$ref: "#/components/responses/DeletedError"
'422':
$ref: "#/components/responses/UnacceptableError"
'500':
$ref: "#/components/responses/InternalServerError"
'501':
$ref: "#/components/responses/NotImplementedError"
options:
summary: Retrieve available HTTP verbs for the selected endpoint
operationId: ImageOptions
tags: ["meta"]
parameters:
- $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
responses: *responses-options
/image/{image_name}/{manip}:
head:
summary: Returns metadata about the image request
operationId: ImageManipHead
tags: ["meta"]
parameters:
- $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
- $ref: "#/components/parameters/ImageManip"
responses:
'200':
$ref: "#/components/responses/Image"
'401':
$ref: "#/components/responses/UnauthenticatedError"
'404':
$ref: "#/components/responses/NotFoundError"
'405':
$ref: "#/components/responses/MethodNotAllowedError"
'410':
$ref: "#/components/responses/DeletedError"
'422':
$ref: "#/components/responses/UnacceptableError"
'500':
$ref: "#/components/responses/InternalServerError"
get:
summary: Fetch a pre configured version of the image
operationId: ImageManipGet
tags: ["image"]
parameters:
- $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
- $ref: "#/components/parameters/ImageManip"
responses:
'200':
$ref: "#/components/responses/Image"
'401':
$ref: "#/components/responses/UnauthenticatedError"
'404':
$ref: "#/components/responses/NotFoundError"
'405':
$ref: "#/components/responses/MethodNotAllowedError"
'410':
$ref: "#/components/responses/DeletedError"
'422':
$ref: "#/components/responses/UnacceptableError"
'500':
$ref: "#/components/responses/InternalServerError"
options:
summary: Retrieve available HTTP verbs for the selected endpoint
operationId: ImageManipOptions
tags: ["meta"]
parameters:
- $ref: "#/components/parameters/ImageName"
- $ref: "#/components/parameters/ImageFormat"
- $ref: "#/components/parameters/ImageManip"
responses: *responses-options
components:
schemas:
Error:
type: object
properties:
event_id:
type: string
format: uuid
message:
type: string
data:
type: object
example:
event_id: 0de388ae-8277-49ba-b225-3ef7f5b9d084
message: Website go brrr
data: {}
headers:
Version:
description: Application name and version
schema:
type: string
example: kodak-1.0.0
Allowed:
description: Comma delimited list of valid HTTP verbs
schema:
type: string
parameters:
ImageName:
name: image_name
in: path
description: Image resource name
required: true
schema:
type: string
ImageFormat:
name: Accept
in: header
description: Content type indicating what format the image should be returned in
required: false
schema:
type: string
default: image/jpeg
enum: [image/jpeg, image/png]
ImageManip:
name: manip
in: path
description: Name of the image config manip to use
required: true
schema:
type: string
responses:
Image:
description: Image content for the specified ID
headers: *headers-image
content:
image/jpeg: {}
image/png: {}
ImageMeta:
description: Image content for the specified ID
headers: *headers-image
InternalServerError:
description: Internal server error
headers: *headers-default
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
NotFoundError:
description: Image with provided ID does not exist
headers: *headers-default
content:
application/json:
schema:
$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:
description: Image with provided ID was deleted
headers: *headers-default
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
UnacceptableError:
description: Requested image format is not supported by the server
headers: *headers-default
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
UnauthenticatedError:
description: Resource requires authentication that was not successfully provided
headers: *headers-default
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
NotImplementedError:
description: The server does not support retriving the full resolution image
headers: *headers-default
content:
application/json:
schema:
$ref: "#/components/schemas/Error"