跳到主要内容

File API 设计文档

API

API定义主要依据常用的文件操作来定义的,分为增删改查四个接口,对于Get/Put接口来说,文件的上传和下载需要支持流传输。因此接口定义如下:

  // Get file with stream
rpc GetFile(GetFileRequest) returns (stream GetFileResponse) {}

// Put file with stream
rpc PutFile(stream PutFileRequest) returns (google.protobuf.Empty) {}

// List all files
rpc ListFile(ListFileRequest) returns (ListFileResp){}

// Delete specific file
rpc DelFile(DelFileRequest) returns (google.protobuf.Empty){}

关于接口的定义的讨论可以参照issue98

参数定义

message GetFileRequest {
//
string store_name = 1;
// The name of the file or object want to get.
string name = 2;
// The metadata for user extension.
map<string,string> metadata = 3;
}

message GetFileResponse {
bytes data = 1;
}

message PutFileRequest {
string store_name = 1;
// The name of the file or object want to put.
string name = 2;
// The data will be store.
bytes data = 3;
// The metadata for user extension.
map<string,string> metadata = 4;
}

message FileRequest {
string store_name = 1;
// The name of the directory
string name = 2;
// The metadata for user extension.
map<string,string> metadata = 3;
}

message ListFileRequest {
FileRequest request = 1;
}

message ListFileResp {
repeated string file_name = 1;
}

message DelFileRequest {
FileRequest request = 1;
}

Get接口

Get的入参主要有三个:

| 参数名 | 意义 | 是否必传 | | --- | --- | --- | --- | --- | --- | --- | | store_name | 后端对应的components(eg: aliyun.oss, aws.s3) | yes | | name | 文件名字 | yes| | metadata | 元数据,该字段用户可以用来指定component需要的一些字段,(eg:权限,用户名等) | yes|

Put接口

Put接口入参主要有三个,多了一个data字段用来传输文件内容:

| 参数名 | 意义 | 是否必传 | | --- | --- | --- | --- | --- | --- | --- | | store_name | 后端对应的components(eg: aliyun.oss, aws.s3) | yes | | name | 文件名字 | yes| | data | 文件内容 | no(允许用户上传空数据,每个component可以做具体实现)| | metadata | 元数据,该字段用户可以用来指定component需要的一些字段,(eg:权限,用户名等) | yes|

List和Del接口

两个接口的参数是一样的:

| 参数名 | 意义 | 是否必传 | | --- | --- | --- | --- | --- | --- | --- | | store_name | 后端对应的components(eg: aliyun.oss, aws.s3) | yes | | name | 文件名字 | yes| | metadata | 元数据,该字段用户可以用来指定component需要的一些字段,(eg:权限,用户名等) | yes|

配置参数

配置参数,不同的component可以配置不同格式,比如aliyun.oss的配置如下:


{
"file": {
"file_demo": {
"type": "aliyun.oss",
"metadata":[
{
"endpoint": "endpoint_address",
"accessKeyID": "accessKey",
"accessKeySecret": "secret",
"bucket": ["bucket1", "bucket2"]
}
]
}
}
}