ingoing

« Previous section Next section »

UCloud Developer Guide / Orchestration of Resources / Storage / Provider APIs / Files / Ingoing API

Ingoing API

Table of Contents

1. Remote Procedure Calls

2. Data Models

Remote Procedure Calls

retrieveProducts

Retrieve product support for this provider

This endpoint responds with the Products supported by this provider along with details for how Product is supported. The Products must be registered with UCloud/Core already.

streamingSearch

browse

copy

create

Request creation of resource.

createDownload

createFolder

createUpload

delete

Request deletion of resource.

emptyTrash

init

Request from the user to (potentially) initialize any resources

This request is sent by the client, if the client believes that initialization of resources might be needed. NOTE: This request might be sent even if initialization has already taken place. UCloud/Core does not check if initialization has already taken place, it simply validates the request.

move

retrieve

trash

updateAcl

Callback received by the Provider when permissions are updated

This endpoint is mandatory for Providers to implement. If the Provider does not need to keep internal state, then they may simply ignore this request by responding with 200 OK. The Provider MUST reply with an OK status. UCloud/Core will fail the request if the Provider does not acknowledge the request.

verify

Invoked by UCloud/Core to trigger verification of a single batch

This endpoint is periodically invoked by UCloud/Core for resources which are deemed active. The Provider should immediately determine if these are still valid and recognized by the Provider. If any of the resources are not valid, then the Provider should notify UCloud/Core by issuing an update for each affected resource.

Data Models

FilesProviderStreamingSearchResult

sealed class FilesProviderStreamingSearchResult {
    class EndOfResults : FilesProviderStreamingSearchResult()
    class Result : FilesProviderStreamingSearchResult()
}

FilesProviderStreamingSearchResult.EndOfResults

data class EndOfResults(
    val type: String /* "end_of_results" */,
)
Properties


FilesProviderStreamingSearchResult.Result

data class Result(
    val batch: List<PartialUFile>,
    val type: String /* "result" */,
)
Properties


PartialUFile

A partial UFile returned by providers and made complete by UCloud/Core

data class PartialUFile(
    val id: String,
    val status: UFileStatus,
    val createdAt: Long,
    val owner: ResourceOwner?,
    val permissions: ResourcePermissions?,
    val legacySensitivity: String?,
)
Properties


FilesProviderBrowseRequest

data class FilesProviderBrowseRequest(
    val resolvedCollection: FileCollection,
    val browse: ResourceBrowseRequest<UFileIncludeFlags>,
)
Properties


FilesProviderCopyRequestItem

data class FilesProviderCopyRequestItem(
    val resolvedOldCollection: FileCollection,
    val resolvedNewCollection: FileCollection,
    val oldId: String,
    val newId: String,
    val conflictPolicy: WriteConflictPolicy,
)
Properties


FilesProviderCreateDownloadRequestItem

data class FilesProviderCreateDownloadRequestItem(
    val resolvedCollection: FileCollection,
    val id: String,
)
Properties


FilesProviderCreateFolderRequestItem

data class FilesProviderCreateFolderRequestItem(
    val resolvedCollection: FileCollection,
    val id: String,
    val conflictPolicy: WriteConflictPolicy,
)
Properties


FilesProviderCreateUploadRequestItem

data class FilesProviderCreateUploadRequestItem(
    val resolvedCollection: FileCollection,
    val id: String,
    val supportedProtocols: List<UploadProtocol>,
    val conflictPolicy: WriteConflictPolicy,
)
Properties


FilesProviderEmptyTrashRequestItem

data class FilesProviderEmptyTrashRequestItem(
    val resolvedCollection: FileCollection,
    val id: String,
)
Properties


FilesProviderMoveRequestItem

data class FilesProviderMoveRequestItem(
    val resolvedOldCollection: FileCollection,
    val resolvedNewCollection: FileCollection,
    val oldId: String,
    val newId: String,
    val conflictPolicy: WriteConflictPolicy,
)
Properties


FilesProviderRetrieveRequest

data class FilesProviderRetrieveRequest(
    val resolvedCollection: FileCollection,
    val retrieve: ResourceRetrieveRequest<UFileIncludeFlags>,
)
Properties


FilesProviderSearchRequest

The base type for requesting paginated content.

data class FilesProviderSearchRequest(
    val query: String,
    val owner: ResourceOwner,
    val flags: UFileIncludeFlags,
    val category: ProductCategoryId?,
    val itemsPerPage: Int?,
    val next: String?,
    val consistency: PaginationRequestV2Consistency?,
    val itemsToSkip: Long?,
)

Paginated content can be requested with one of the following consistency guarantees, this greatly changes the semantics of the call:

ConsistencyDescription

PREFER

Consistency is preferred but not required. An inconsistent snapshot might be returned.

REQUIRE

Consistency is required. A request will fail if consistency is no longer guaranteed.

The consistency refers to if collecting all the results via the pagination API are consistent. We consider the results to be consistent if it contains a complete view at some point in time. In practice this means that the results must contain all the items, in the correct order and without duplicates.

If you use the PREFER consistency then you may receive in-complete results that might appear out-of-order and can contain duplicate items. UCloud will still attempt to serve a snapshot which appears mostly consistent. This is helpful for user-interfaces which do not strictly depend on consistency but would still prefer something which is mostly consistent.

The results might become inconsistent if the client either takes too long, or a service instance goes down while fetching the results. UCloud attempts to keep each next token alive for at least one minute before invalidating it. This does not mean that a client must collect all results within a minute but rather that they must fetch the next page within a minute of the last page. If this is not feasible and consistency is not required then PREFER should be used.


📝 NOTE: Services are allowed to ignore extra criteria of the request if the next token is supplied. This is needed in order to provide a consistent view of the results. Clients should provide the same criterion as they paginate through the results.


Properties


FilesProviderStreamingSearchRequest

data class FilesProviderStreamingSearchRequest(
    val query: String,
    val owner: ResourceOwner,
    val flags: UFileIncludeFlags,
    val category: ProductCategoryId,
    val currentFolder: String?,
)
Properties


FilesProviderTrashRequestItem

data class FilesProviderTrashRequestItem(
    val resolvedCollection: FileCollection,
    val id: String,
)
Properties


Last updated