gpt4 book ai didi

Android:使用 Parse 时使用服务器端

转载 作者:太空狗 更新时间:2023-10-29 15:41:37 37 4
gpt4 key购买 nike

我和我的 friend 正在开发一个应用程序,我们希望使用 Parse.com 作为我们可以从中检索信息的数据库。我们无法决定在 Parse 上访问数据的最佳方式是什么。为了这个例子,我们的应用程序。 (即客户端)需要存储在 Parse 数据库中的东西(比如一些数字)——它应该直接使用 Parse API 运行查询,还是应该向服务器端发出请求,让它从 Parse 中检索该数字,以及发回给客户?

我们知道没有确定的答案,但我们找不到关于这种具体情况的答案。我们读了这篇文章:When to use client-side or server-side? , 但这并不完全相同。

我声称我们应该尽可能地与客户端和数据库分开,并让负责人(服务器)运行这些查询,我的 friend 声称这会增加不必要的复杂性,因为这很自然使用 Parse 提供的工具从客户端访问数据库,无需协议(protocol)等。

我们很乐意接受任何建议,

谢谢。

最佳答案

一般来说,直接调用普通电话

在任何情况下,我都鼓励您首先这样做,以使两端都正常工作。

然后如有必要,请转到 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 团队的评论。希望它可以节省一些打字时间,干杯

关于Android:使用 Parse 时使用服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004276/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com