API
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