Skip to main content

spapi

API使用方法

首先需要定义数据表描述文件(如:test.schema),定义存储在系统中的数据结构,表的各个字段(Fields)按文件中的排列顺序排列,字段类型支持(int8,int16,uint16,int32,uint32,int64,uint64,float32,float64,string,bool,file,date,datetime),表中必须有一个(int32/uint32/int64/uint64)类型的字段作为主键,且必须为第一个字段。

test.schema内容如下:

{

"TabComment":"测试",

"TabName":"TestTab",

"Insert":"additem",

"Update":"updateitem",

"Delete":"deleteitem",

"Contract":"datazt",

"ContractAddr":"https://dev.bingooglobal.com/api/yottachain_rpc",

"PrivKey":"5Jjv6rvzUqhkWcA.....................fyJYnQ8CGNW9xo3F",

"Fields":

[

{

"FieldComment":"记录ID",

"FieldName":"id",

"FieldType":"uint64",

"Primarykey":true

},

{

"FieldComment":"INT8类型",

"FieldName":"fint8",

"EncLevel":0,

"FieldType":"int8"

},

{

"FieldComment":"INT16类型",

"FieldName":"fint16",

"EncLevel":1,

"FieldType":"int16"

},

{

"FieldComment":"UINT16类型",

"FieldName":"fuint16",

"EncLevel":2,

"FieldType":"uint16"

},

{

"FieldComment":"INT32类型",

"FieldName":"fint32",

"FieldType":"int32"

},

{

"FieldComment":"UINT32类型",

"FieldName":"fuint32",

"FieldType":"uint32"

},

{

"FieldComment":"INT64类型",

"FieldName":"fint64",

"FieldType":"int64"

},

{

"FieldComment":"UINT64类型",

"FieldName":"fuint64",

"FieldType":"uint64"

},

{

"FieldComment":"FLOAT32类型",

"FieldName":"ffloat32",

"FieldType":"float32"

},

{

"FieldComment":"FLOAT64类型",

"FieldName":"ffloat64",

"FieldType":"float64"

},

{

"FieldComment":"DATE类型",

"FieldName":"fdate",

"FieldType":"date"

},

{

"FieldComment":"DATETIME类型",

"FieldName":"fdatetime",

"FieldType":"datetime"

},

{

"FieldName":"fbool",

"FieldComment":"BOOL类型",

"FieldType":"bool"

},

{

"FieldName":"fstring",

"FieldComment":"STR类型",

"Length":30,

"FieldType":"string"

},

{

"FieldComment":"文件类型",

"FieldName":"ffile",

"FieldType":"file"

}

]

}

"EncLevel":默认0,使用行密钥列密钥加密

1,使用行密钥加密

2,不加密

"Length":设置string类型字段长度

使用API表导入程序,将test.schema文件导入系统

执行: dc createtab /root/test.schema

第二步,需要按照test.schema表描述,在EOS私链创建一个数据表,即自动创建一个合约用来读写结构化数据,合约帐户(schema. Contract),表名(schema. TabName),插入方法(schema. Insert),更新方法(schema. Update),删除方法(schema. delete)...并按照(schema.Fields)描述的字段类型,按顺序在合约里创建表字段

1.file类型字段按string类型创建

2.float32类型字段,如果加密按int32类型创建,不加密则按float32类型创建

3.float64类型字段,如果加密按int64类型创建,不加密则按float64类型创建

4.bool类型字段按int8类型创建

5.date类型字段按int64类型创建

6.datetime类型字段按int64类型创建

完成上面两步后,就可以按照后面提供的API接口对该表进行插入,更新,删除,按主键查询,遍历...等操作

当应用层通过下面API的(insert)接口插入一条记录时,系统会将各个字段进行加密(加密规则,请查看产品黄皮书),对于文件类型字段将文件内容加密,加密后内容写入本地文件系统,然后调用第二步创建的EOS合约,将加密后的字段值写入合约。

API接口

1、注册和登陆

Get /login?uid=testuser1&secret_key=123456

uid:用户名

secret_key:密码



用户如果不存在,创建用户

返回:

{"access_token":" test.token.1"}

APP在调用后需API接口时需要出示令牌,将token填入HTTP请求头,

Authorization: test.token.1

也可以放到url,Query字段,:

/list?token= test.token.1&....

所有接口可能返回错误:当ResponseCode=500时,返回如下text/json
{"Code":2,"Msg":"INVALID_TABID","Detail":"..."}

当ResponseCode=200时,调用成功

暂定几个错误码,后续更新:

var SERVER_ERROR = &ErrorMessage{0x00, "SERVER_ERROR", ""}

var INVALID_TOKEN = &ErrorMessage{0x01, "INVALID_TOKEN", ""}

var INVALID_TABID = &ErrorMessage{0x02, "INVALID_TABID", ""}

var TAB_ALREADY_INITED = &ErrorMessage{0x03, "TAB_ALREADY_INITED", ""}

var ARGS_ERROR = &ErrorMessage{0x04, "ARGS_ERROR", ""}

var NO_TAB_PERMISSION = &ErrorMessage{0x05, "NO_TAB_PERMISSION", ""}

var NO_FIELD_PERMISSION = &ErrorMessage{0x06, "NO_FIELD_PERMISSION", ""}

var INVALID_USERNAME = &ErrorMessage{0x07, "INVALID_USERNAME", ""}

var BAD_REQUEST = &ErrorMessage{0x08, "BAD_REQUEST", ""}

var FIELD_TOO_LARGE = &ErrorMessage{0x09, "FIELD_TOO_LARGE", ""}

var INVALID_FIELD_VALUE = &ErrorMessage{0x10, "INVALID_FIELD_VALUE", ""}

var NO_RECORD = &ErrorMessage{0x11, "NO_RECORD", ""}

var INVALID_CDRID = &ErrorMessage{0x12, "INVALID_CDRID", ""}

var DUPLICATE_KEY = &ErrorMessage{0x13, "DUPLICATE_KEY", ""}

每当调用API接口,返回INVALID_TOKEN错误时,表示token过期,需要重新调用登陆接口获取token

2、遍历表接口

GET /list  (注意HTTP请求头加入token,下同)



返回系统中已经创建了多少表,返回表ID,名称,功能描述,当前用户是否允许访问,格式ContentType:text/json如:

[{"TabComment":"description","TabId":1,"TabName":"testtab1","Allow":true}{"TabComment":"description","TabId":2,"TabName":"testtab2","Allow":false}]

TabComment:表的功能描述

TabName:表名

TabId:表ID

Allow:允许向此表插入记录

3、获取指定表的结构接口

GET / 1/schema

输入:第一级路径是表的ID,接口2中的TabId字段值

返回表结构,如下:

{"TabComment":"description","TabId":1,"TabName":"test","Allow":false,"Fields":[{"FieldComment":"文件ID","FieldName":"ID","FieldType":"int32","Primarykey":true,"Allow":false},{"FieldComment":"作者","FieldName":"Author","FieldType":"string","Primarykey":false,"Allow":false},{"FieldComment":"插入时间","FieldName":"CreateTime","FieldType":"int64","Primarykey":false,"Allow":false},{"FieldComment":"文件内容","FieldName":"FileLocation","FieldType":"file","Primarykey":false,"Allow":false}]}

FieldComment:字段描述
FieldName:字段名

Primarykey:是否主健
FieldType:字段类型,包括int8,int16..... file(文件类型字段)

Allow:对此字段有读取和修改权限


只有拥有所有字段的访问权限,该用户才拥有向表中插入记录,删除记录的权限。

4. 初始化指定表的访问权限

GET /1/init

输入:第一级路径是表的ID,接口2中的TabId字段值

当系统创建表后,暂时没有任何人有权限访问此表,这时当前用户如果执行初始化接口,就拥有了该表访问权,如果该表已经被其他用户初始化过,那么当前用户就无法初始化,想获得该表访问权,必须让其他用户授权给当前用户,即(接口5

成功返回: "Content-Type", "text/ json " 格式,与接口3的返回相同,且Allow=true

{"TabComment":"description","TabId":1,"TabName":"test","Allow": true,"Fields":[{"FieldComment":"文件ID","FieldName":"ID","FieldType":"int32","Primarykey":true,"Allow": true },{"FieldComment":"作者","FieldName":"Author","FieldType":"string","Primarykey":false,"Allow": true },{"FieldComment":"插入时间","FieldName":"CreateTime","FieldType":"int64","Primarykey":false,"Allow": true },{"FieldComment":"文件内容","FieldName":"FileLocation","FieldType":"file","Primarykey":false,"Allow": true }]}

失败返回:"Content-Type", "text/json"错误消息

初始化成功后,当前用户拥有该表的全部权限(插入,删除,修改,读取,遍历任何字段,也可以将权限授权给其他用户)

5. 授权指定表的指定字段给其他用户

GET /1/auth?username=testuser2&Author=1& CreateTime=1

输入:username,将授权给指定用户表权限,第一级路径是表的ID,接口2中的TabId字段值

例如上面的指令,当前用户把表1中字段名为CreateTime和Author的列权限授权给用户testuser2, 当然当前用户必须拥有该表的对应字段CreateTime和Author的列权限,否则返回NO_FIELD_PERMISSION;字段名Author和CreateTime必须等于1,其他认为不授权该字段,且大小写敏感,使用表结构中给出的字段名

成功返回:用户testuser2对表1的权限描述,格式与接口3的返回相同,如下

{"TabComment":"description","TabId":1,"TabName":"test","Allow": false,"Fields":[{"FieldComment":"文件ID","FieldName":"ID","FieldType":"int32","Primarykey":true,"Allow": false},{"FieldComment":"作者","FieldName":"Author","FieldType":"string","Primarykey":false,"Allow": true },{"FieldComment":"插入时间","FieldName":"CreateTime","FieldType":"int64","Primarykey":false,"Allow": true},{"FieldComment":"文件内容","FieldName":"FileLocation","FieldType":"file","Primarykey":false,"Allow": false }]}

将列Author和CreateTime权限授权给用户testuser2后, 用户testuser2暂时还不能对表1进行插入,修改,删除,查询等操作,只有当前用户授权了某一行记录(比如ID=1的记录),testuser2才可以对ID=1的记录的Author和CreateTime字段进行修改,查询操作。行授权接口请看(接口6

如果想把表1的全部控制权限授权给用户testuser2,可不填字段列表,如下:

GET / 1/auth?username=testuser2

当然,前提是当前用户具有表1的全部控制权限,否则还是会返回无列权限错误

用户testuser2拥有了表1的全部控制权限,意味着它和testuser1一样,可以对表进行插入,删除,修改,读取,遍历任何记录任何字段,也可以将权限授权给其他用户。

6. 授权指定表的指定行权限给其他用户

GET /1/share?username=testuser2&ID=1

输入:username,将授权给指定用户ID=1的行权限,第一级路径是表的ID,接口2中的TabId字段值

如果用户拥有列Author和CreateTime的权限(接口5可以授权列权限),用户testuser2就可以对记录1的Author和CreateTime进行查询和修改

行授权成功,返回授权成功的行ID

{"ID":1}

7.对指定表增加一条记录

POST  /1/insert  

第一级路径是表的ID,接口2中的TabId字段值

如果表包含文件类型字段,需要上传文件,所以Content-Type必须是 multipart/form-data,相当于下面这样,注意表单中字段名必须是表结构中给出的字段名,大小写敏感

![C:UsersADMINI~1AppDataLocalTemp1617956058(1).png](data:image/png;base64,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)

通过设置multipart.Part的Content-Disposition的值来传入文件名

:

Content-type: multipart/form-data; boundary=---+boundary

Content-Disposition: form-data; name=file;filename=a.doc;

这样查询记录时,会把文件名"a.doc "显示在json中

注意:提交的RequestBody第一个字段,必须是表主键,如ID(系统需要先取到主键值来计算行密钥)

如果不上传文件类型字段,可以不使用multipart/form-data格式

成功返回插入结果:


{"Author":"张三封","CreateTime":34,"FileLocation":"a.doc","ID":2}

重复插入会有DUPLICATE_KEY 错误

8.读取记录

Get /1/query?ID=2

第一级路径是表的ID,接口2中的TabId字段值,ID是主健,注意字段名必须与表1结构中的主健字段名一致

如果当前用户无表权限,会返回对应错误

返回有权限列的字段值,比如如果没有列(CreateTime)的权限

则返回:

{"Author":"张三封","FileLocation":" a.doc ","ID":2}

FileLocation字段时文件字段,返回的是上传时传入的文件名

记录不存在,返回NO_RECORD错误

9.下载文件

Get /1/down?ID=2	

第一级路径是表的ID,接口2中的TabId字段值,ID是主健,注意字段名必须与表1结构中的主健字段名一致,返回ID=2的记录中文件数据流

如果记录中有两个文件类型字段,需要指定下载那个字段的文件(fieldname=?)

Get /1/down?ID=2&fieldname= FileLocation

当然,当前用户需要有该文件类型字段的访问权限

记录不存在,返回NO_RECORD错误

10.删除记录

Get /1/delete? ID=2

第一级路径是表的ID,接口2中的TabId字段值,ID是主健,注意字段名必须与表1结构中的主健字段名一致

功能是删除表1中主健值是2的记录,当前用户必须有该表及所有字段权限才可删除

成功返回:

{"ID":2}

11.修改记录

POST  /1/update  

第一级路径是表的ID,接口2中的TabId字段值

如果表包含文件类型字段,需要上传文件,所以Content-Type必须是 multipart/form-data,相当于下面这样,注意表单中字段名必须是表结构中给出的字段名,大小写敏感

![C:UsersADMINI~1AppDataLocalTemp1618557780(1).png](data:image/png;base64,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)

如果不上传文件类型字段,可以不使用multipart/form-data格式

成功返回插入结果:

{"Author":"里斯" ,"FileLocation":"软件需求.pdf","ID":2}

只返回修改的字段,没有修改的字段如CreateTime没显示
如果当前用户没有字段Author权限,返回修改失败

注意:如果提交的RequestBody不包含某字段,比如不包含Author字段,表示不修改该字段,如果含有Author字段,但Author值为空字符串,则使用空字符串值更新对应字段值

12.遍历记录

Get  /1/list? startid=1&limit=10

第一级路径是表的ID,接口2中的TabId字段值

startid:主键的起始ID

limit:行数

返回:

[{"Author":"张三封","FileLocation":"a.doc","ID":1},

{"Author":"张","FileLocation":"软件需求.pdf ","ID":2}

]

不足10行,表示遍历完

注意:对于没有全部表字段权限的用户,list只返回被授权的行记录