EnginioClient
ImportStatement: import Enginio 1.0
Since: Qt 5.3
Properties
authenticationState: Enginio::AuthenticationState
backendId :string
identity :EnginioIdentity
Signals
error(QJSValuereply)
finished(QJSValuereply)
sessionAuthenticated(QJSValuereply)
sessionAuthenticationError(QJSValuereply)
sessionTerminated()
Methods
EnginioReplycreate(QJSValue object, Operation operation)
EnginioReplydownloadUrl(QJSValue object)
EnginioReplyfullTextSearch(QJSValue query)
EnginioReplyquery(QJSValue query, Operation operation)
EnginioReplyremove(QJSValue query, Operation operation)
EnginioReplyupdate(QJSValue query, Operation operation)
EnginioReplyuploadFile(QJSValue object, QUrl file)
DetailedDescription
importEnginio 1.0
EnginioClient是QML为云设计的API。它用来与后端云沟通。EnginioModel更是使多个对象的处理变得简单。云端被云端id标识。
EnginioClient{
id: client
backendId: "YOUR_BACKEND_ID" //from Enginio Dashboard
}
一旦云端被设置,调用EnginioClient的query来运行查询变得可能。例如用类型"objects.image"运行查询获得所有的对象。
EnginioClient{
// ...
Component.onCompleted:query({"objectType": "objects.image"})
}
EnginioClient给了我们相应查询结果的方便方式:
EnginioClient{
// ...
onFinished: console.log("Enginorequest finished." + reply.data)
onError: console.log("Enginio error" + reply.errorCode + ": " + reply.errorString)
}
数据交换使用JSON 语法,它是JavaScript 语法的子集。
PropertyDocumentation
authenticationState: Enginio::AuthenticationState
身份验证的状态。Enginio提供了简便的方式管理用户。这个属性反应了当前用户的验证情况。同时参阅identity和EnginioOAuth2Authentication。
backendId :string
云端id。他能从Enginio发布板获得。
identity : EnginioIdentity
代表一个用户。设置这个属性将创建一个异步认证请求,返回的结果更新authenticationState。分配它一个空指针将终止会话。
同时参阅authenticationState、sessionAuthenticated、sessionAuthenticationError和EnginioOAuth2Authentication。
SignalDocumentation
error(QJSValuereply)
当响应完成,包含错误时,发射这个信号。
finished(QJSValuereply)
当相应完成时发射这个信号。注意这个信号总是被发射,不管响应完成是成功还是失败。
sessionAuthenticated(QJSValuereply)
用户登录后发射这个信号。这个信号发射于用户成功登陆到云端。从那时起,和云端的所有通信都使用这个凭证。reply包含登录和用户的信息。详细的信息根据登录方法的不同有所区别,但典型的响应像下面这样:.
{
"access_token":"...", // oauth2access token
"refresh_token":"...", // oauth2refresh token
"token_type":"bearer", // oauth2token type
"expires_in": 28799, // oautth2 token expiry date
"enginio_data": {
"user": {
"id": "...", // this user Id
"createdAt":"...", // when theuser was created
"creator": { // who created the user
"id": "creatorId",
"objectType":"users"
},
"email":"user@user.com", // theuser's email address
"firstName":"John", // theuser's first name
"lastName":"Foo", // theuser's last name
"objectType":"users",
"updatedAt":"2013-11-25T14:54:58.957Z",
"username":"JohnFoo" // the user's login
},
"usergroups": [] // usergroups to which theuser belongs
}
}
同时参阅EnginioClient::sessionAuthenticationError()、EnginioReply和EnginioOAuth2Authentication。
sessionAuthenticationError(QJSValuereply) const
登录失败发射这个信号。reply包含登录为什么登录失败的详细信息。同时参阅EnginioClient::sessionAuthenticated()、EnginioReply、EnginioClientConnection::identity、EnginioOAuth2Authentication。
sessionTerminated()const
当用户登出时,发射这个信号。同时参阅EnginioOAuth2Authentication。
MethodDocumentation
EnginioReplycreate(QJSValue object, Operation operation)
插入一个新对象到数据库中。返回的EnginioReply指明创建的成功。如果没有错误的完成,则云端的对象便成可以使用的。
operation参数定义了创建的对象种类。如普通对象或一个用户或组。默认情况下,Enginio::ObjectOperation被使用并创建普通对象。注意,objectType要求是普通对象,并以"objects."开始。用JSON创建对象需要遵循下面的结构:
{
"objectType":"object.myType",
"name" : "A thing",
"price" : "5",
}
仅仅objectType被要求,name和price是自定义属性的例子。用户和其他对象种类一样,不需要请求任何objectType就可被创建。
下面创建一个新用户:
var reply =enginioClient.create(
{ "username": login.text,
"password":password.text,
"email":userEmail.text,
"firstName":userFirstName.text,
"lastName":userLastName.text
}, Enginio.UserOperation)
添加新成员到用户组,JSON需要看起来像下面的例子:
{
"id": "groupId",
"member": { "id":"userId", "objectType": "users" }
}
一旦创建完成,返回的EnginioReply包含状态和数据。同时参阅EnginioReply、query()、update()、remove()和Enginio::Operation。
EnginioReplydownloadUrl(QJSValue object)
得到下载文件的URL。
vardownloadData = {
"id": uploadReply.data.id,
}
vardownloadReply = enginio.downloadUrl(downloadData)
响应包含下载的URL和URL将在有效状态持续多久。
downloadReply.data.expiringUrl
downloadReply.data.expiresAt
同时参阅uploadFile()。
EnginioReplyfullTextSearch(QJSValue query)
在数据库中执行全文搜索。qurey是发送到云端执行全文搜索的对象。注意,搜索需要服务等索引到搜索属性(在云端被设置)。返回的EnginioReply包含搜索完成的状态和结果。同时参阅EnginioReply、EnginioClient::create()、EnginioClient::query()、EnginioClient::update()、EnginioClient::remove()和JSON要求结构。
EnginioReplyquery(QJSValue query, Operation operation)
查询数据库。
quere包含在云端的实际查询。它将运行在云端的操作部分。query必须包含"objectType",用以指明在云端的类型定义。他还能包含下面的部分:
query -描述什么样的对象被查询,允许过滤结果。可查阅{https://engin.io/documentation/rest/parameters/queries}{JSON query structure}
limit -限制服务返回多少个对象。默认值是100。
offset -从返回结果开始,多少个对象被略过。注意服务保持随即排序,所以这样用offset意味着排序。
sort -结果如何排序,参阅JSON排序要求结构。
count -如果count被设置,服务仅返回了count匹配的对象。
include -那些对象在响应中包含。参阅JSON的include结构
JSON列出所有"objects.image"类型的对象:
{
"objectType":"objects.image"
}
下面是包含文件引用和查询参数的对象是有效的,需要返回:
{
"objectType":"objects.image",
"include": {"file":{}},
"query" : { "file": {"$ne": null } }
}
寻找用户组用"allUsers":
vargroupQuery = enginioClient.query({ "query": { "name" :"allUsers" } }, Enginio.UsergroupOperation)
当查询完成,返回的EnginioReply包含状态和结果数据。
同时参阅EnginioReply、create()、update()和remove()。
EnginioReplyremove(QJSValue query, Operation operation)
从数据库中移除一个对象。
被对象ID指定的对象被移除,如果要移除的对象是普通对象,还需要指定objectType。
JSON看起来像下面这样指定标识:
{
"objectType":"objects.images",
"id":"52b1a94b5a3d8b15b1037ff5"
}
operation被移除对象的区域,默认是Enginio::ObjectOperation,表示普通对象默认被移除。当移除完成,返回包含状态的EnginioReply。同时参阅EnginioReply、create()、query()和update()。
EnginioReplyupdate(QJSValue query, Operation operation)
更新数据库中的对象。operation是更新对象的区域。默认Enginio::ObjectOperation,表示更新普通对象。
改变对象的名字属性为"New Name",在JSON上像下面的操作:
{
"id": "objectId",
"objectType":"objects.objectType",
"name": "New Name"
}
对象的所有其他属性不受更新影响。
改变对象的访问控制列表,在JSON上像下面的处理:
{
"id": "objectId",
"objectType":"objects.objectType",
"access": { "read":["id": "userId", "objectTypes":"users"],
"update":["id": "userId", "objectTypes":"users"],
"admin":["id": "userId", "objectTypes":"users"] }
}
更新一旦完成,返回包含状态的EnginioReply。同时参阅EnginioReply、create()、query()和remove()。
EnginioReplyuploadFile(QJSValue object, QUrl file)
保存对象关联的文件到Enginio。
每一个上传到数据库的文件需要与对象关联。
注意,上传只在设置制服的服务器上工作。设置制服是这样的:在云端的仪表板上创建我们使用的属性,设置这个属性引用文件。
上传文件的顺序,首先创建一个对象:
varfileObject = {
"objectType":AppConfig.testObjectType,
"title": "Example objectwith file attachment",
}
var reply =enginio.create(fileObject);
然后做上传动作:
var objectId= reply.data.id
varuploadData = {
"file":{
"fileName":"test.png"
},
"targetFileProperty": {
"objectType": AppConfig.testObjectType,
"id": objectId,
"propertyName":"fileAttachment"
},
}
varuploadReply = enginio.uploadFile(uploadData, fileName)
注意不要直接删除文件,替代的做法是,当包含引用的对象被删除,文件自动被删除。同时参阅downloadUrl()。