Android:使用Parse时使用服务器端
作者:互联网
我和我的朋友正在开发一个应用程序,我们希望使用Parse.com作为我们的数据库,我们可以从中检索信息.
我们无法确定在Parse上访问数据的最佳方法是什么.为了这个例子,我们的应用程序. (即客户端)需要存储在Parse数据库中的东西(比如一些数字) – 如果它使用Parse API直接运行查询,或者它应该向服务器端发出请求,让它从Parse中检索该数字,并且把它发回给客户?
我们知道没有确切的答案,但我们无法找到有关这一具体情况的答案.我们读了这篇文章:When to use client-side or server-side?,
但这不完全相同的情况.
我声称我们应该尝试尽可能地从客户端和数据库中分离,并让这些查询由负责人(服务器)运行,我的朋友声称这会增加不必要的复杂性,因为使用这些工具非常自然由Parse提供,从客户端访问数据库,无需协议等.
我们会批评任何建议,
谢谢.
解决方法:
一般情况下,请直接进行正常通话.
在任何情况下,我都鼓励你先做到这一点,让一切都在两端都有效.
然后,如有必要,请转到Cloud Code.
如果您打算使用多个平台(即iOS和Android),云代码可以节省大量时间.
但是不要忘记,对于简单的呼叫,云代码是浪费时间. “正常”Parse调用令人惊讶,令人难以置信,令人惊讶,快速且快速地使用.
使用普通的Parse调用绝对没有“错误” – 所以这样做.
关于这个问题,你什么时候必须使用云代码调用 – 你会知道,因为你无法通过正常的调用来实现它:)
不要忘记你经常可以在云代码中使用“afterSave”或“beforeSave”来做大量的工作.您通常不需要在云代码中进行“自定义调用”.
这真是太棒了
Parse云代码的经验法则———>
如果你必须做“不止一件事”……在这种情况下你可能不得不把它变成一个云代码功能.如果你必须做“三件或更多事情”,那么请务必将其作为云代码功能.
这是一个很好的经验法则.
(再说一次,正如我所说的,通常只是一个“afterSave”或类似作品才能出色地…而不是字面上写一个完整的自定义调用.)
这是一个典型的云调用示例,可以在互联网所涵盖的所有平台中节省180亿行代码.首先是云代码……
Parse.Cloud.define("clientRequestHandleInvite", function(request, response)
{
// called from the client, to accept an invite from invitorPerson
var thisUserObj = request.user;
var invitorPersonId = request.params.invitorPersonId;
var theMode = request.params.theMode;
// theMode is likely "accept" or "ignore"
console.log( "clientRequestAcceptInvite called.... invitorPersonId " + invitorPersonId + " By user: " + thisUserObj.id );
console.log( "clientRequestAcceptInvite called.... theMode is " + theMode );
if ( invitorPersonId == undefined || invitorPersonId == "" )
{
response.error("Problem in clientRequestAcceptInvite, 'invitorPersonId' missing or blank?");
return;
}
var query = new Parse.Query(Parse.User);
query.get(
invitorPersonId,
{
success: function(theInvitorPersonObject)
{
console.log("clientRequestFriendRemove ... internal I got the userObj ...('no response' mode)");
if ( theMode == "accept" )
{
createOneNewHaf( thisUserObj, theInvitorPersonObject );
createOneNewHaf( theInvitorPersonObject, thisUserObj );
}
// in both cases "accept" or "ignore", delete the invite in question:
// and on top of that you have to do it both ways
deleteFromInvites( theInvitorPersonObject, thisUserObj );
deleteFromInvites( thisUserObj, theInvitorPersonObject );
// (those further functions exist in the cloud code)
// for now we'll just go with the trick of LETTING THOSE RUN
// so DO NOT this ........... response.success( "removal attempt underway" );
// it's a huge problem with Parse that (so far, 2014) is poorly handled:
// READ THIS:
// parse.com/questions/can-i-use-a-cloud-code-function-within-another-cloud-code-function
},
error: function(object,error)
{
console.log("clientRequestAcceptInvite ... internal unusual failure: " + error.code + " " + error.message);
response.error("Problem, internal problem?");
return;
}
}
);
}
);
如果您是Parse的新手,那么很难弄清楚如何从Android或iOS调用这些内容!这是从Android调用的那个…
这将为你节省一天与HashMaps搞乱:)
private static void handleInvite( ParseUser invitor, final boolean accepted )
{
String invitorId = invitor.getObjectId();
// you must SEND IDs, NOT PARSEUSER OBJECTS to cloud code. Sucks!
String cloudKode;
cloudKode = (accepted? "accept" : "ignore");
HashMap<String, Object> dict = new HashMap<String, Object>();
dict.put( "invitorPersonId", invitorId );
dict.put( "theMode", cloudKode );
Toast.makeText(State.mainContext, "contacting...", Toast.LENGTH_SHORT).show();
ParseCloud.callFunctionInBackground(
"clientRequestHandleInvite",
dict,
new FunctionCallback<Object>()
{
@Override
public void done(Object s, ParseException e)
{
Toast.makeText(State.mainContext, "blah", Toast.LENGTH_SHORT).show();
// be careful with handling the exception on return...
}
});
}
这是来自iOS的同一个云调用……现在好,直到你必须在SWIFT中完成
-(void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath
{
int thisRow = indexPath.row;
PFUser *delFriend = [self.theFriends objectAtIndex:thisRow];
NSLog(@"you wish to delete .. %@", [delFriend fullName] );
// note, this cloud call is happily is set and forget
// there's no return either way. life's like that sometimes
[PFCloud callFunctionInBackground:@"clientRequestFriendRemove"
withParameters:@{
@"removeThisFriendId":delFriend.objectId
}
block:^(NSString *serverResult, NSError *error)
{
if (!error)
{
NSLog(@"ok, Return (string) %@", serverResult);
}
}];
[self back]; // that simple
}
注意对于iOS / Swift体验,请单击:How to make this Parse.com cloud code call?,其中包括Parse.com团队的评论.希望它可以节省一些打字,欢呼
标签:parse-platform,android,database,client-side,server-side 来源: https://codeday.me/bug/20190928/1828789.html