You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
paopao-ce/docs/openapi/openapi.json

334 lines
11 KiB

{
"openapi": "3.0.0",
"info": {
"title": "paopao-ce API",
"description": "# The paopao-ce API documentation\n\nWelcome to the paopao-ce API documentation!\n\n",
"version": "0.1.0"
},
"servers": [
{
"url": "https://api.paopao.info"
}
],
"tags": [],
"paths": {
"/{bucket}": {
"post": {
"summary": "Upload Image",
"description": "Upload an image to the given bucket.\nThe `content-type` header must be provided as well\nas the `content-length` header otherwise the request will be rejected.\n\nThe uploaded file must also not exceed the given `content-length`.",
"parameters": [
{
"name": "bucket",
"schema": {
"type": "string"
},
"in": "path",
"description": "The bucket that the image should be uploaded.",
"required": true,
"deprecated": false
},
{
"name": "content-length",
"schema": {
"type": "integer",
"format": "uint64"
},
"in": "header",
"description": "The total size of the image in bytes.",
"required": true,
"deprecated": false
},
{
"name": "format",
"schema": {
"$ref": "#/components/schemas/ImageKind"
},
"in": "query",
"description": "The format that the uploaded image is encoded in.\n\nIf not provided, lust will guess the encoding.",
"required": false,
"deprecated": false
}
],
"requestBody": {
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UploadInfo"
}
}
}
},
"404": {
"description": "Bucket not found"
},
"400": {
"description": "The image format was incorrect or the system was\nunable to guess the format of the image."
},
"413": {
"description": "The upload exceeds the configured maximum file size."
},
"401": {
"description": "You are not authorized to complete this action.\n\nThis normally means the `Authorization` bearer has been left out\nof the request or is invalid."
}
}
}
},
"/{bucket}/{image_id}": {
"get": {
"summary": "Fetch Image",
"description": "Fetch the image from the storage backend and apply and additional affects\nif required.",
"parameters": [
{
"name": "bucket",
"schema": {
"type": "string"
},
"in": "path",
"description": "The bucket to try fetch the image from.",
"required": true,
"deprecated": false
},
{
"name": "image_id",
"schema": {
"type": "string",
"format": "uuid"
},
"in": "path",
"description": "The id of the image.",
"required": true,
"deprecated": false
},
{
"name": "format",
"schema": {
"$ref": "#/components/schemas/ImageKind"
},
"in": "query",
"description": "The encoding format that the image should be returned as.",
"required": false,
"deprecated": false
},
{
"name": "size",
"schema": {
"type": "string"
},
"in": "query",
"description": "The size preset that should be used when returning the image.",
"required": false,
"deprecated": false
},
{
"name": "width",
"schema": {
"type": "integer",
"format": "uint32"
},
"in": "query",
"description": "A custom width to resize the returned image to.",
"required": false,
"deprecated": false
},
{
"name": "height",
"schema": {
"type": "integer",
"format": "uint32"
},
"in": "query",
"description": "A custom height to resize the returned image to.",
"required": false,
"deprecated": false
},
{
"name": "accept",
"schema": {
"type": "string"
},
"in": "header",
"description": "A set of `,` seperated content-types that could be sent as a response.\nE.g. `image/png,image/webp,image/gif`",
"required": false,
"deprecated": false
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
},
"headers": {
"CONTENT-TYPE": {
"required": true,
"deprecated": false,
"schema": {
"type": "string"
}
}
}
},
"400": {
"description": "The request is invalid with the current configuration.\n\nSee the detail section for more info.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Detail"
}
}
}
},
"404": {
"description": "Bucket does not exist or image does not exist.\n\nSee the detail section for more info.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Detail"
}
}
}
}
}
},
"delete": {
"summary": "Delete Image",
"description": "Delete the given image.\nThis will purge all variants of the image including sizing presets and formats.\n\nImages that do not exist already will be ignored and will not return a 404.",
"parameters": [
{
"name": "bucket",
"schema": {
"type": "string"
},
"in": "path",
"description": "The bucket to try delete the image from.",
"required": true,
"deprecated": false
},
{
"name": "image_id",
"schema": {
"type": "string",
"format": "uuid"
},
"in": "path",
"description": "The image to delete try delete.",
"required": true,
"deprecated": false
}
],
"responses": {
"200": {
"description": ""
},
"401": {
"description": "You are not authorized to complete this action.\n\nThis normally means the `Authorization` bearer has been left out\nof the request or is invalid."
},
"404": {
"description": "Bucket does not exist."
}
}
}
}
},
"components": {
"schemas": {
"Detail": {
"type": "object",
"required": [
"detail"
],
"properties": {
"detail": {
"type": "string",
"description": "Additional information regarding the response."
}
}
},
"ImageKind": {
"type": "string",
"enum": [
"png",
"jpeg",
"webp",
"gif"
]
},
"ImageUploadInfo": {
"type": "object",
"required": [
"sizing_id"
],
"properties": {
"sizing_id": {
"type": "integer",
"format": "uint32",
"description": "The computed image sizing id.\n\nThis is useful for tracking files outside of lust as this is\ngenerally used for filtering within the storage systems."
}
}
},
"UploadInfo": {
"type": "object",
"required": [
"image_id",
"processing_time",
"io_time",
"checksum",
"images",
"bucket_id"
],
"properties": {
"image_id": {
"type": "string",
"format": "uuid",
"description": "The generated ID for the file.\n\nThis can be used to access the file for the given bucket."
},
"processing_time": {
"type": "number",
"format": "float",
"description": "The time spent processing the image in seconds."
},
"io_time": {
"type": "number",
"format": "float",
"description": "The time spent uploading the image to the persistent store."
},
"checksum": {
"type": "integer",
"format": "uint32",
"description": "The crc32 checksum of the uploaded image."
},
"images": {
"type": "array",
"description": "The information that is specific to the image.",
"items": {
"$ref": "#/components/schemas/ImageUploadInfo"
}
},
"bucket_id": {
"type": "integer",
"format": "uint32",
"description": "The id of the bucket the image was stored in.\n\nThis is useful for tracking files outside of lust as this is\ngenerally used for filtering within the storage systems."
}
}
}
}
}
}