forked from TrueCloudLab/frostfs-rest-gw
e5b9fd5f5a
Signed-off-by: Denis Kirillov <denis@nspcc.ru>
1145 lines
30 KiB
YAML
1145 lines
30 KiB
YAML
swagger: "2.0"
|
|
info:
|
|
title: REST API FrostFS
|
|
description: REST API for native integration with FrostFS.
|
|
version: v1
|
|
|
|
host: localhost:8090
|
|
basePath: /v1
|
|
schemes:
|
|
- http
|
|
|
|
securityDefinitions:
|
|
BearerAuth:
|
|
type: apiKey
|
|
in: header
|
|
name: Authorization
|
|
description: Bearer token body to provide with FrostFS request. Must have 'Bearer ' prefix.
|
|
|
|
security:
|
|
- BearerAuth: [ ]
|
|
|
|
parameters:
|
|
signatureParam:
|
|
in: header
|
|
name: X-Bearer-Signature
|
|
description: Base64 encoded signature for bearer token.
|
|
type: string
|
|
required: false
|
|
signatureKeyParam:
|
|
in: header
|
|
name: X-Bearer-Signature-Key
|
|
description: Hex encoded the public part of the key that signed the bearer token.
|
|
type: string
|
|
required: false
|
|
signatureScheme:
|
|
in: query
|
|
name: walletConnect
|
|
description: Use wallet connect signature scheme or native FrostFS signature.
|
|
type: boolean
|
|
default: false
|
|
fullBearerToken:
|
|
in: query
|
|
name: fullBearer
|
|
description: Provided bearer token is final or gate should assemble it using signature.
|
|
type: boolean
|
|
default: false
|
|
containerId:
|
|
in: path
|
|
name: containerId
|
|
type: string
|
|
required: true
|
|
description: Base58 encoded container id.
|
|
objectId:
|
|
in: path
|
|
name: objectId
|
|
type: string
|
|
required: true
|
|
description: Base58 encoded object id.
|
|
|
|
paths:
|
|
/auth:
|
|
options:
|
|
operationId: optionsAuth
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
description: CORS
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
Access-Control-Allow-Headers:
|
|
type: string
|
|
post:
|
|
operationId: auth
|
|
summary: Form bearer token to further requests
|
|
security: [ ]
|
|
parameters:
|
|
- in: header
|
|
name: X-Bearer-Owner-Id
|
|
description: Owner Id (wallet address) that will sign the token.
|
|
type: string
|
|
required: true
|
|
- in: header
|
|
description: Token lifetime in epoch.
|
|
name: X-Bearer-Lifetime
|
|
type: integer
|
|
default: 100
|
|
- in: header
|
|
description: Form token for all users or only for this gate.
|
|
name: X-Bearer-For-All-Users
|
|
type: boolean
|
|
default: false
|
|
- in: body
|
|
name: tokens
|
|
required: true
|
|
description: Bearer tokens to form.
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Bearer'
|
|
consumes:
|
|
- application/json
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
200:
|
|
description: Base64 encoded stable binary marshaled bearer token bodies.
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/TokenResponse'
|
|
400:
|
|
description: Bad request
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
/auth/bearer:
|
|
options:
|
|
operationId: optionsAuthBearer
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
description: CORS
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
Access-Control-Allow-Headers:
|
|
type: string
|
|
get:
|
|
operationId: formBinaryBearer
|
|
summary: Form binary bearer token
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
200:
|
|
description: Base64 encoded stable binary marshaled bearer token.
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
schema:
|
|
$ref: '#/definitions/BinaryBearer'
|
|
400:
|
|
description: Bad request
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
/accounting/balance/{address}:
|
|
get:
|
|
operationId: getBalance
|
|
summary: Get balance in FrostFS
|
|
description: Getting balance of provided wallet address in FrostFS.
|
|
security: [ ]
|
|
parameters:
|
|
- in: path
|
|
name: address
|
|
type: string
|
|
required: true
|
|
description: Base58 encoded wallet address.
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
200:
|
|
description: Balance of address in FrostFS
|
|
schema:
|
|
$ref: '#/definitions/Balance'
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
400:
|
|
description: Bad request
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
/objects:
|
|
options:
|
|
operationId: optionsObjectsPut
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
description: CORS
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
Access-Control-Allow-Headers:
|
|
type: string
|
|
Access-Control-Allow-Methods:
|
|
type: string
|
|
put:
|
|
operationId: putObject
|
|
summary: Upload object to FrostFS
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
- $ref: '#/parameters/fullBearerToken'
|
|
- in: body
|
|
required: true
|
|
name: object
|
|
description: Object info to upload
|
|
schema:
|
|
$ref: '#/definitions/ObjectUpload'
|
|
consumes:
|
|
- application/json
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Address of uploaded objects
|
|
schema:
|
|
$ref: '#/definitions/Address'
|
|
400:
|
|
description: Bad request
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
/objects/{containerId}/search:
|
|
parameters:
|
|
- $ref: '#/parameters/containerId'
|
|
options:
|
|
operationId: optionsObjectsSearch
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
description: Base64 encoded stable binary marshaled bearer token.
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
Access-Control-Allow-Headers:
|
|
type: string
|
|
post:
|
|
operationId: searchObjects
|
|
summary: Search objects by filters
|
|
security:
|
|
- {}
|
|
- BearerAuth: [ ]
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
- $ref: '#/parameters/fullBearerToken'
|
|
- in: query
|
|
name: offset
|
|
type: integer
|
|
default: 0
|
|
minimum: 0
|
|
description: The number of containers to skip before starting to collect the result set.
|
|
- in: query
|
|
name: limit
|
|
type: integer
|
|
default: 100
|
|
minimum: 1
|
|
maximum: 10000
|
|
description: The numbers of containers to return.
|
|
- in: body
|
|
required: true
|
|
name: searchFilters
|
|
description: Filters to search objects.
|
|
schema:
|
|
$ref: '#/definitions/SearchFilters'
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: List of objects
|
|
schema:
|
|
$ref: '#/definitions/ObjectList'
|
|
400:
|
|
description: Bad request
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
/objects/{containerId}/{objectId}:
|
|
parameters:
|
|
- $ref: '#/parameters/containerId'
|
|
- $ref: '#/parameters/objectId'
|
|
options:
|
|
operationId: optionsObjectsGetDelete
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
description: CORS
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
Access-Control-Allow-Headers:
|
|
type: string
|
|
Access-Control-Allow-Methods:
|
|
type: string
|
|
get:
|
|
operationId: getObjectInfo
|
|
summary: Get object info by address
|
|
security:
|
|
- {}
|
|
- BearerAuth: [ ]
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
- $ref: '#/parameters/fullBearerToken'
|
|
- in: query
|
|
name: range-offset
|
|
type: integer
|
|
minimum: 0
|
|
description: Range offset to start reading data.
|
|
- in: query
|
|
name: range-length
|
|
type: integer
|
|
minimum: 1
|
|
description: Length of data range.
|
|
- in: query
|
|
name: max-payload-size
|
|
type: integer
|
|
default: 4194304
|
|
minimum: 0
|
|
maximum: 524288000
|
|
description: |
|
|
Max payload size (in bytes) that can be included in the response.
|
|
If the actual size is greater than this params the payload won't be included in the response.
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Object info
|
|
schema:
|
|
$ref: '#/definitions/ObjectInfo'
|
|
400:
|
|
description: Bad request
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
delete:
|
|
operationId: deleteObject
|
|
summary: Remove object from FrostFS
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
- $ref: '#/parameters/fullBearerToken'
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Successful deletion.
|
|
schema:
|
|
$ref: '#/definitions/SuccessResponse'
|
|
400:
|
|
description: Bad request.
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
/containers:
|
|
options:
|
|
operationId: optionsContainersPutList
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
description: CORS
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
Access-Control-Allow-Headers:
|
|
type: string
|
|
Access-Control-Allow-Methods:
|
|
type: string
|
|
put:
|
|
operationId: putContainer
|
|
summary: Create new container in FrostFS
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
- in: query
|
|
name: name-scope-global
|
|
description: Provide this parameter to register container name in NNS service.
|
|
type: boolean
|
|
default: false
|
|
- in: body
|
|
name: container
|
|
required: true
|
|
description: Container info
|
|
schema:
|
|
$ref: '#/definitions/ContainerPutInfo'
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Identifier of the created container.
|
|
schema:
|
|
type: object
|
|
properties:
|
|
containerId:
|
|
type: string
|
|
required:
|
|
- containerId
|
|
example:
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
400:
|
|
description: Bad request.
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
get:
|
|
operationId: listContainers
|
|
summary: Get list of containers
|
|
security: [ ]
|
|
parameters:
|
|
- in: query
|
|
name: ownerId
|
|
required: true
|
|
type: string
|
|
description: Base58 encoded owner id.
|
|
- in: query
|
|
name: offset
|
|
type: integer
|
|
default: 0
|
|
minimum: 0
|
|
description: The number of containers to skip before starting to collect the result set.
|
|
- in: query
|
|
name: limit
|
|
type: integer
|
|
default: 100
|
|
minimum: 1
|
|
maximum: 10000
|
|
description: The numbers of containers to return.
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Containers info.
|
|
schema:
|
|
$ref: '#/definitions/ContainerList'
|
|
400:
|
|
description: Bad request.
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
/containers/{containerId}:
|
|
parameters:
|
|
- $ref: '#/parameters/containerId'
|
|
options:
|
|
operationId: optionsContainersGetDelete
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
description: CORS
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
Access-Control-Allow-Headers:
|
|
type: string
|
|
Access-Control-Allow-Methods:
|
|
type: string
|
|
get:
|
|
operationId: getContainer
|
|
summary: Get container by id
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Container info.
|
|
schema:
|
|
$ref: '#/definitions/ContainerInfo'
|
|
400:
|
|
description: Bad request.
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
delete:
|
|
operationId: deleteContainer
|
|
summary: Delete container by id
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Successful deletion.
|
|
schema:
|
|
$ref: '#/definitions/SuccessResponse'
|
|
400:
|
|
description: Bad request.
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
/containers/{containerId}/eacl:
|
|
parameters:
|
|
- $ref: '#/parameters/containerId'
|
|
options:
|
|
operationId: optionsContainersEACL
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
description: CORS
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
Access-Control-Allow-Headers:
|
|
type: string
|
|
Access-Control-Allow-Methods:
|
|
type: string
|
|
put:
|
|
operationId: putContainerEACL
|
|
summary: Set container EACL by id
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
- in: body
|
|
name: eacl
|
|
required: true
|
|
description: EACL for container.
|
|
schema:
|
|
$ref: '#/definitions/Eacl'
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Successful EACL updating.
|
|
schema:
|
|
$ref: '#/definitions/SuccessResponse'
|
|
400:
|
|
description: Bad request.
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
get:
|
|
operationId: getContainerEACL
|
|
summary: Get container EACL by id
|
|
security: [ ]
|
|
responses:
|
|
200:
|
|
headers:
|
|
Access-Control-Allow-Origin:
|
|
type: string
|
|
description: Container EACL information.
|
|
schema:
|
|
$ref: '#/definitions/Eacl'
|
|
400:
|
|
description: Bad request.
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
/containers/{containerId}/storagegroups:
|
|
parameters:
|
|
- $ref: '#/parameters/containerId'
|
|
put:
|
|
operationId: putStorageGroup
|
|
summary: Create a new storage group in container.
|
|
parameters:
|
|
- $ref: '#/parameters/signatureParam'
|
|
- $ref: '#/parameters/signatureKeyParam'
|
|
- $ref: '#/parameters/signatureScheme'
|
|
- in: body
|
|
name: storageGroup
|
|
required: true
|
|
description: Storage group co create.
|
|
schema:
|
|
$ref: '#/definitions/StorageGroup'
|
|
responses:
|
|
200:
|
|
description: Address of uploaded storage group.
|
|
schema:
|
|
$ref: '#/definitions/Address'
|
|
400:
|
|
description: Bad request.
|
|
schema:
|
|
$ref: '#/definitions/ErrorResponse'
|
|
|
|
definitions:
|
|
BinaryBearer:
|
|
description: Bearer token for object operations that is represented in binary form.
|
|
type: object
|
|
properties:
|
|
token:
|
|
description: Base64 encoded bearer token.
|
|
type: string
|
|
required:
|
|
- token
|
|
example:
|
|
token: ChIKDAoAGggIARABIgIIAxoCCGQSZgohA+J5jFWFMiOpyvMZBu9wwPTKsWsG0q206kVe63iuWP/wEkEE4SIV0QngnKppDf54QezUKmar7UQby6HzufT5yVIOvj7QEqZnOavrKW0chCeCwP0khda/j9k00ct6NMEDxQFW+g==
|
|
Bearer:
|
|
description: Bearer token that is expected to be formed.
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
object:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Record'
|
|
container:
|
|
$ref: '#/definitions/Rule'
|
|
example:
|
|
- name: my-bearer-token
|
|
object:
|
|
- operation: GET
|
|
action: ALLOW
|
|
filters: [ ]
|
|
targets:
|
|
- role: OTHERS
|
|
keys: [ ]
|
|
- name: "my token to create container"
|
|
container:
|
|
verb: PUT
|
|
Record:
|
|
description: A single FrostFS EACL rule.
|
|
type: object
|
|
properties:
|
|
action:
|
|
$ref: '#/definitions/Action'
|
|
operation:
|
|
$ref: '#/definitions/Operation'
|
|
filters:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Filter'
|
|
targets:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Target'
|
|
required:
|
|
- action
|
|
- operation
|
|
- filters
|
|
- targets
|
|
example:
|
|
operation: GET
|
|
action: ALLOW
|
|
filters: [ ]
|
|
targets:
|
|
- role: OTHERS
|
|
keys: [ ]
|
|
Action:
|
|
description: Rule execution result action in FrostFS EACL. Either allows or denies access if the rule's filters match.
|
|
type: string
|
|
enum:
|
|
- ALLOW
|
|
- DENY
|
|
Operation:
|
|
description: Request's operation type to match in FrostFS EACL if the rule is applicable to a particular request.
|
|
type: string
|
|
enum:
|
|
- GET
|
|
- HEAD
|
|
- PUT
|
|
- DELETE
|
|
- SEARCH
|
|
- RANGE
|
|
- RANGEHASH
|
|
Filter:
|
|
description: Filter in FrostFS EACL to check particular properties of the request or the object.
|
|
type: object
|
|
properties:
|
|
headerType:
|
|
$ref: '#/definitions/HeaderType'
|
|
matchType:
|
|
$ref: '#/definitions/MatchType'
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
required:
|
|
- headerType
|
|
- matchType
|
|
- key
|
|
- value
|
|
example:
|
|
headerType: OBJECT
|
|
matchType: STRING_NOT_EQUAL
|
|
key: FileName
|
|
value: myfile
|
|
HeaderType:
|
|
description: Enumeration of possible sources of Headers to apply filters in FrostFS EACL.
|
|
type: string
|
|
enum:
|
|
- REQUEST
|
|
- OBJECT
|
|
- SERVICE
|
|
MatchType:
|
|
description: Match type in FrostFS EACL filter.
|
|
type: string
|
|
enum:
|
|
- STRING_EQUAL
|
|
- STRING_NOT_EQUAL
|
|
Target:
|
|
description: Target to apply the ACL rule. Can be a subject's role class or a list of public keys to match (KEYS role).
|
|
type: object
|
|
properties:
|
|
role:
|
|
$ref: '#/definitions/Role'
|
|
keys:
|
|
type: array
|
|
items:
|
|
type: string
|
|
required:
|
|
- role
|
|
- keys
|
|
example:
|
|
role: KEYS
|
|
keys:
|
|
- 021dc56fc6d81d581ae7605a8e00e0e0bab6cbad566a924a527339475a97a8e38e
|
|
Role:
|
|
description: Role for target in EACL.
|
|
type: string
|
|
enum:
|
|
- USER
|
|
- SYSTEM
|
|
- OTHERS
|
|
- KEYS
|
|
Rule:
|
|
description: Container session token rule.
|
|
type: object
|
|
properties:
|
|
verb:
|
|
$ref: '#/definitions/Verb'
|
|
containerId:
|
|
type: string
|
|
required:
|
|
- verb
|
|
example:
|
|
verb: DELETE
|
|
containerId: 6jvKJCQr6e47Yx8SsbSN3fNgzroUJVkY66Q9wqxYcAjc
|
|
Verb:
|
|
description: Verb that describes the allowed container operation for token.
|
|
type: string
|
|
enum:
|
|
- PUT
|
|
- DELETE
|
|
- SETEACL
|
|
TokenResponse:
|
|
description: Base64 encoded marshaled token (for container or for object operations).
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
type:
|
|
$ref: '#/definitions/TokenType'
|
|
token:
|
|
type: string
|
|
required:
|
|
- type
|
|
- token
|
|
example:
|
|
- type: object
|
|
token: ClYKBAgCEA0aCAgDEAEiAggDGggIARACIgIIAxoICAIQAiICCAMaCAgDEAIiAggDGggIBBACIgIIAxoICAUQAiICCAMaCAgGEAIiAggDGggIBxACIgIIAxIbChk182WEDFuAqq3nssrGOaH0NK0ZhzF8bu+YGgQIaBgE
|
|
- type: container
|
|
token: ChCpanIBJCpJuJz42KOmGMSnEhsKGTWquaX2Lq6GhhO4faOYkLD0f9WkXuYJlq4aBAhnGAMiIQJgFcIEghQB5lq3AJZOVswInwc1IGhlQ7NCUh4DFO3UATIECAEQAQ==
|
|
TokenType:
|
|
description: Type of token.
|
|
type: string
|
|
enum:
|
|
- object
|
|
- container
|
|
ContainerPutInfo:
|
|
description: Request body to create container. To specify container name use appropriate property (name provided in attributes will be ignored).
|
|
type: object
|
|
properties:
|
|
containerName:
|
|
type: string
|
|
placementPolicy:
|
|
type: string
|
|
basicAcl:
|
|
type: string
|
|
attributes:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Attribute'
|
|
example:
|
|
containerName: container
|
|
placementPolicy: "REP 3"
|
|
basicAcl: public-read-write
|
|
attributes:
|
|
- key: Custom-Attribute
|
|
value: value
|
|
ContainerInfo:
|
|
description: Information about container.
|
|
type: object
|
|
properties:
|
|
containerId:
|
|
type: string
|
|
containerName:
|
|
type: string
|
|
version:
|
|
type: string
|
|
ownerId:
|
|
type: string
|
|
basicAcl:
|
|
type: string
|
|
cannedAcl:
|
|
description: The friendly name for the basicAcl field.
|
|
type: string
|
|
placementPolicy:
|
|
type: string
|
|
attributes:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Attribute'
|
|
required:
|
|
- containerId
|
|
- containerName
|
|
- version
|
|
- ownerId
|
|
- basicAcl
|
|
- placementPolicy
|
|
- attributes
|
|
example:
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
containerName: container
|
|
version: "2.11"
|
|
ownerId: NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM
|
|
basicAcl: "0x1fbf9fff"
|
|
placementPolicy: "REP 2"
|
|
attribute:
|
|
- key: Timestamp
|
|
value: "1648810072"
|
|
- key: Name
|
|
value: container
|
|
ContainerList:
|
|
description: List of containers info
|
|
type: object
|
|
properties:
|
|
size:
|
|
type: integer
|
|
containers:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/ContainerInfo'
|
|
required:
|
|
- size
|
|
- containers
|
|
example:
|
|
size: 2
|
|
containers:
|
|
- containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
containerName: container
|
|
version: "2.11"
|
|
ownerId: NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM
|
|
basicAcl: "0x1fbf9fff"
|
|
placementPolicy: "REP 2"
|
|
attribute:
|
|
- key: Timestamp
|
|
value: "1648810072"
|
|
- key: Name
|
|
value: container
|
|
- containerId: FsE7HLQBBYc2WFJzuTXMcpspDEmwUxsD5YmNb2r25uUu
|
|
containerName: container2
|
|
version: "2.11"
|
|
ownerId: NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM
|
|
basicAcl: "0x1fbf9fff"
|
|
placementPolicy: "REP 1"
|
|
attribute:
|
|
- key: Name
|
|
value: container2
|
|
SearchFilters:
|
|
description: List of SearchFilter elements.
|
|
type: object
|
|
properties:
|
|
filters:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/SearchFilter'
|
|
required:
|
|
- filters
|
|
example:
|
|
filters:
|
|
- key: FileName
|
|
value: some/prefix
|
|
match: MatchCommonPrefix
|
|
- key: CustomAttribute
|
|
value: tag-value
|
|
match: MatchStringEqual
|
|
SearchFilter:
|
|
description: Search filter to find objects.
|
|
type: object
|
|
properties:
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
match:
|
|
$ref: '#/definitions/SearchMatch'
|
|
required:
|
|
- key
|
|
- value
|
|
- match
|
|
example:
|
|
key: FileName
|
|
value: object-name
|
|
match: MatchStringEqual
|
|
SearchMatch:
|
|
description: Search match type.
|
|
type: string
|
|
enum:
|
|
- MatchStringEqual
|
|
- MatchStringNotEqual
|
|
- MatchNotPresent
|
|
- MatchCommonPrefix
|
|
ObjectList:
|
|
description: List of objects.
|
|
type: object
|
|
properties:
|
|
size:
|
|
type: integer
|
|
objects:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/ObjectBaseInfo'
|
|
required:
|
|
- size
|
|
- objects
|
|
example:
|
|
size: 2
|
|
objects:
|
|
- name: "/my/object/name"
|
|
address:
|
|
objectId: 8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
- name: "/my/object/some/other/name"
|
|
address:
|
|
objectId: 3GbmMWusaWgMHokWui2zDunxMTzButuQMVLbtL3cDn8s
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
ObjectBaseInfo:
|
|
description: Basic object information.
|
|
type: object
|
|
properties:
|
|
address:
|
|
$ref: '#/definitions/Address'
|
|
name:
|
|
type: string
|
|
filePath:
|
|
type: string
|
|
required:
|
|
- address
|
|
example:
|
|
name: "name.txt"
|
|
filePath: "/my/object/name.txt"
|
|
address:
|
|
objectId: 8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
ObjectUpload:
|
|
description: Request body to create object.
|
|
type: object
|
|
properties:
|
|
containerId:
|
|
type: string
|
|
fileName:
|
|
type: string
|
|
payload:
|
|
type: string
|
|
attributes:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Attribute'
|
|
required:
|
|
- containerId
|
|
- fileName
|
|
example:
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
fileName: myFile.txt
|
|
payload: Y29udGVudCBvZiBmaWxl
|
|
attributes:
|
|
- key: User-Attribute
|
|
value: some-value
|
|
ObjectInfo:
|
|
description: Object information.
|
|
type: object
|
|
properties:
|
|
containerId:
|
|
type: string
|
|
objectId:
|
|
type: string
|
|
ownerId:
|
|
type: string
|
|
attributes:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Attribute'
|
|
objectSize:
|
|
type: integer
|
|
description: Object full payload size
|
|
payloadSize:
|
|
type: integer
|
|
description: Payload size in response
|
|
payload:
|
|
type: string
|
|
description: Base64 encoded object payload
|
|
required:
|
|
- containerId
|
|
- objectId
|
|
- ownerId
|
|
- attributes
|
|
- objectSize
|
|
- payloadSize
|
|
example:
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
objectId: 8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd
|
|
ownerId: NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM
|
|
attribute:
|
|
- key: Timestamp
|
|
value: "1648810072"
|
|
- key: Name
|
|
value: object
|
|
Address:
|
|
description: Address of the object in FrostFS.
|
|
type: object
|
|
properties:
|
|
containerId:
|
|
type: string
|
|
objectId:
|
|
type: string
|
|
required:
|
|
- containerId
|
|
- objectId
|
|
example:
|
|
objectId: 8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
Eacl:
|
|
description: EACL FrostFS table.
|
|
type: object
|
|
properties:
|
|
containerId:
|
|
type: string
|
|
readOnly: true
|
|
records:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Record'
|
|
required:
|
|
- records
|
|
example:
|
|
containerId: 5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv
|
|
records:
|
|
- action: GET
|
|
operation: ALLOW
|
|
filters:
|
|
- headerType: OBJECT
|
|
matchType: STRING_EQUAL
|
|
key: FileName
|
|
value: myfile
|
|
targets:
|
|
- role: OTHERS
|
|
StorageGroup:
|
|
description: Storage group keeps verification information for Data Audit sessions.
|
|
type: object
|
|
properties:
|
|
name:
|
|
description: Name of storage group. It will be the value of the `FileName` attribute in storage group object.
|
|
type: string
|
|
containerId:
|
|
description: Container id to which storage group is belong. Set by server.
|
|
type: string
|
|
readOnly: true
|
|
objectId:
|
|
description: Object id of storage group. Set by server.
|
|
type: string
|
|
readOnly: true
|
|
lifetime:
|
|
description: Lifetime in epochs for storage group.
|
|
type: integer
|
|
members:
|
|
description: Object identifiers to be placed into storage group. Must be unique.
|
|
type: array
|
|
items:
|
|
type: string
|
|
required:
|
|
- lifetime
|
|
- members
|
|
Attribute:
|
|
description: Attribute is a pair of strings that can be attached to a container or an object.
|
|
type: object
|
|
properties:
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
required:
|
|
- key
|
|
- value
|
|
example:
|
|
key: "User-Defined-Tag"
|
|
value: "tag value"
|
|
Principal:
|
|
type: string
|
|
Balance:
|
|
type: object
|
|
properties:
|
|
address:
|
|
type: string
|
|
value:
|
|
type: string
|
|
precision:
|
|
type: integer
|
|
required:
|
|
- address
|
|
- value
|
|
- precision
|
|
ErrorType:
|
|
description: Error type. Allow determine source of the error.
|
|
type: string
|
|
enum:
|
|
- GW
|
|
- API
|
|
ErrorResponse:
|
|
description: Error response.
|
|
type: object
|
|
properties:
|
|
type:
|
|
$ref: '#/definitions/ErrorType'
|
|
code:
|
|
type: integer
|
|
message:
|
|
type: string
|
|
required:
|
|
- type
|
|
- message
|
|
example:
|
|
type: API
|
|
code: 1024
|
|
message: "incomplete object PUT by placement"
|
|
SuccessResponse:
|
|
description: Success response.
|
|
type: object
|
|
properties:
|
|
success:
|
|
type: boolean
|
|
required:
|
|
- success
|
|
example:
|
|
success: true
|