iOS SDKを解析します:クラウドコードを理解する
-
20-12-2019 - |
質問
シナリオ = 私はゆっくりと、しかし確実に、Parse のクラウド コード機能で何が起こっているのかを理解しています。いくつかのサンプル クラウド コード関数で何が起こっているのかについて、短くて比較的単純な質問に答えたい人からの助けが必要です。
この例で使用するコードは以下のとおりです
1) クラウドコード
Parse.Cloud.define('editUser', function(request, response) {
var userId = request.params.userId,
newColText = request.params.newColText;
var User = Parse.Object.extend('_User'),
user = new User({ objectId: userId });
user.set('new_col', newColText);
Parse.Cloud.useMasterKey();
user.save().then(function(user) {
response.success(user);
}, function(error) {
response.error(error)
});
});
2) iOSから呼び出される
[PFCloud callFunction:@"editUser" withParameters:@{
@"userId": @"someuseridhere",
@"newColText": @"new text!"
}];
このコードはから取得されました ここ
質問1 =
(request, response)
これは何なのか混乱しています。これは、(iOS 呼び出しで) NSString をこの関数 (「userId」) に渡し、クラウド コード関数内でそれを「リクエスト」と呼びたいと言っている iOS のタイプキャストに似ていますか?それがここで起こっていることですか?
質問2 =
Parse.Object.extend('_User')
これは、Parse データベースから「User」クラスを取得して、ある種の「PFObject」がその下の行に新しい「user」を作成して更新できるようにしているのでしょうか?
これは...のようなものですか?
PFObject *userObject = [PFObject objectWithClassName:@"User"]?
質問3 =
user.set('new_col', newColText)
これは明らかに、PFUser に保存される値を「設定」します (~私はそう思います)。「newColText」変数が設定されるテキストであることはわかっていますが、「new_col」とは何でしょうか?私が考えることができる唯一のことは、これにより、「リクエスト」を通じて渡されるタイプに関係なく、データベース内の新しい列の名前が設定されるということです。
これは...のようなものですか?
[[PFUser currentUser] setObject: forKey:]
質問4 =
Parse.Cloud.useMasterKey()
あまり技術的な話にはなりませんが、別のユーザーの「ユーザー」オブジェクトを編集する前に入力する必要があるのは、基本的にこれだけですか?
質問5 =
user.save().then(function(user) {
response.success(user);
}
これは...のようなものですか?
[user saveInBackgroundWithBlock:]?
もしそうなら、
function(error) {
response.error(error)
saveInBackgroundWithBlock にエラーがあった場合にどうなるかを設定するだけですか?
覚えておいてください、私は iOS を知っています - ない JavaScript。 したがって、Apple の領域を理解している人に対して、できるだけ説明的な表現を心がけてください。
解決
ここに私の質問があります:
-
request
パラメータは、Cloud関数への要求/呼び出しの一部であるすべてにアクセスするためのもので、渡されたパラメータ(request.params
)、クライアント上で認証されているユーザー(request.user
)と他のものも含まれます。 ドキュメント。response
は、情報を呼び出し側のコードに送り返すためのもので、一般に、応答に含まれるオプションの文字列/オブジェクト/ etcを使用してresponse.success()
またはresponse.error()
を呼び出します。文書化ここにある。 -
User
のインスタンスを作成する方法であり、これは特別な内部クラスではなく_User
と_Role
と同じです。それはIDを持つユーザーのインスタンスを作成し、新しいものを作成しない(保存するまでIDはありません)。このようにしてオブジェクトを作成すると、更新したいプロパティを変更するだけで「パッチ」できます。 - 再び Documentation または>例、最初のパラメータは列名です(それが存在しない場合は作成されます)、2番目の値は何です。その列に設定したいです。
- クライアントにログインしたユーザーがやる権限がないことを行う必要がある場合は、
_Installation
を実行する必要があります。それは「すべてのセキュリティを無視し、私がしていることを知っています」。 - あなたが約束チェーンを見ている、チェーンの各ステップでは、「成功」ハンドラとオプションの「エラー」ハンドラを渡すことができます。いくつかの素晴らしいドキュメントがあります。あなたが順番にいくつかのものをやりたいとき、それはスーパー便利です。
サンプルコード:
var post = new Parse.Object('Post');
var comment = new Parse.Object('Comment');
// assume we set a bunch of properties on the post and comment here
post.save().then(function() {
// we know the post is saved, so now we can reference it from our comment
comment.set('post', post);
// return the comment save promise, so we can keep chaining
return comment.save();
}).then(function() {
// success!
response.success();
}, function(error) {
// uh oh!
// this catches errors anywhere in the chain
response.error(error);
});
.他のヒント
私もあなたとほぼ同じ立場ですが、私の考えは次のとおりです。
- いいえ、これらは関数によって受け取られるパラメータです。何かが呼び出すと、
editUser
クラウド関数では、使用する 2 つのオブジェクトがあります。 リクエスト & 応答. 。基本的にリクエストは iOS デバイスがサーバーに送信するものであり、レスポンスはサーバーが iOS デバイスに送信するものです。 - それほどではありません。のサブクラスを作成するようなものです _ユーザー.
- Parse オブジェクト タイプをデータベース テーブルとして、そのインスタンスを行として考えてください。の
set
'newColText' の値を属性/列 'new_col' に設定 (derp) します。 - よくわかりませんが、User オブジェクトを処理しないため、その関数を使用したことはありません。でも、それかもしれない。
- ほぼその通りです。しかし、それはより似たものです (JS と Obj-C を混合した疑似コード):
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error){
if(error){
response.error(error); // mark the function as failed and return the error object to the iOS device
}
else{
response.success(user); // mark the function call as successful and return the user object to the iOS device
}
}];