Google App EngineアプリケーションにAJAXを実装しようとしているので、役立つAJAXフレームワークを探しています。誰かが何か考えを持っていますか?
私はGoogleWebToolkitについて考えていますが、Google App Engine用のAJAXを作成するという点でどれほど優れていますか?
Google App EngineアプリケーションにAJAXを実装しようとしているので、役立つAJAXフレームワークを探しています。誰かが何か考えを持っていますか?
私はGoogleWebToolkitについて考えていますが、Google App Engine用のAJAXを作成するという点でどれほど優れていますか?
Google Web ToolkitはJavaのサブセットであるため、バックエンドでJavaを使用する場合にも最適に機能します。Google App Engineは現在Pythonのみであるため、サーバーとクライアントが互いにうまく通信できるようにするには、多くの混乱を招く必要があると思います。
jQueryは、DjangoSnippets.comのAJAXタグで最も人気のあるJavaScriptライブラリオプションのようです。
編集:上記は、Pythonで記述されたGoogleAppEngineアプリケーションにのみ当てはまります。Google App EngineがJavaをサポートするようになったため、GWTはAJAXフロントエンドを作成するための良い選択になる可能性があります。 Googleには、その方法を示すチュートリアルもあります。
AJAXライブラリを使用する良い方法は、GoogleのAJAXLibrariesAPIサービスを利用することです。これは、JSをダウンロードして/static/
フォルダーに配置するよりも少し高速でクリーンであり、ディスククォータを消費しません。
あなたのJavaScriptにあなたはただ置くでしょう、例えば:
google.load("jquery", "1.3.2");
および/または
google.load(google.load("dojo", "1.3.0");
ヘッダーのどこかに、次のようなものを配置します。
<script src="http://www.google.com/jsapi?key=your-key-here"></script>
そして、GoogleのAPIライブラリを使用するために必要なのはそれだけです。
GAE と Google Web Toolkit (GWT) を一緒に使用しない理由はありません。バックエンド コードを Python で記述し、フロントエンド コードを Java (および場合によっては一部の JavaScript) で記述し、JavaScript にコンパイルします。別の AJAX フレームワークを使用する場合、サーバー側とクライアント側の言語にもこの違いがあります。
GWT には、サーバー上の Java コードのリモート呼び出しを容易にする機能がありますが、これらは完全にオプションです。他の AJAX フレームワークと同様に、JSON または XML インターフェイスを使用できます。
GWT 1.5 には JavaScript オーバーレイ タイプも付属しています。これにより、基本的に、クライアント サイド コードを開発するときに、JSON データの一部を Java オブジェクトのように扱うことができます。詳細については、こちらをご覧ください。
アップデート:
Google が Google App Engine の Java サポートを追加したので、必要に応じて、完全な Google スタック上でバックエンドとフロントエンドの両方のコードを Java で開発できます。GAE、GWT、またはその両方を使用するアプリケーションの開発とデプロイを非常に簡単にする Googleの優れたEclipse プラグインがあります。
Google App Engine に Ajax を実装した方法を次に示しますが、この考え方は他のプラットフォームにも一般化できます。
ほとんどの場合、JSON 応答で応答する Ajax 要求用のハンドラー スクリプトがあります。構造は次のようになります (これは、標準の GAE ハンドラー スクリプトからの抜粋です)。
def Get(self, user):
self.handleRequest()
def Post(self, user):
self.handleRequest()
def handleRequest(self):
'''
A dictionary that maps an operation name to a command.
aka: a dispatcher map.
'''
operationMap = {'getfriends': [GetFriendsCommand],
'requestfriend': [RequestFriendCommand, [self.request.get('id')]],
'confirmfriend': [ConfirmFriendCommand, [self.request.get('id')]],
'ignorefriendrequest': [IgnoreFriendRequestCommand, [self.request.get('id')]],
'deletefriend': [DeleteFriendCommand, [self.request.get('id')]]}
# Delegate the request to the matching command class here.
コマンドは、コマンド パターンの単純な実装です。
class Command():
""" A simple command pattern.
"""
_valid = False
def validate(self):
""" Validates input. Sanitize user input here.
"""
self._valid = True
def _do_execute(self):
""" Executes the command.
Override this in subclasses.
"""
pass
@property
def valid(self):
return self._valid
def execute(self):
""" Override _do_execute rather than this.
"""
try:
self.validate()
except:
raise
return self._do_execute()
# Make it easy to invoke commands:
# So command() is equivalent to command.execute()
__call__ = execute
クライアント側では、Ajax デリゲートを作成します。Prototype.js を使用すると、これを簡単に記述して理解できます。ここに抜粋があります:
/**
* Ajax API
*
* You should create a new instance for every call.
*/
var AjaxAPI = Class.create({
/* Service URL */
url: HOME_PATH+"ajax/",
/* Function to call on results */
resultCallback: null,
/* Function to call on faults. Implementation not shown */
faultCallback: null,
/* Constructor/Initializer */
initialize: function(resultCallback, faultCallback){
this.resultCallback = resultCallback;
this.faultCallback = faultCallback;
},
requestFriend: function(friendId){
return new Ajax.Request(this.url + '?op=requestFriend',
{method: 'post',
parameters: {'id': friendId},
onComplete: this.resultCallback
});
},
getFriends: function(){
return new Ajax.Request(this.url + '?op=getfriends',
{method: 'get',
onComplete: this.resultCallback
});
}
});
デリゲートを呼び出すには、次のようにします。
new AjaxApi(resultHandlerFunction, faultHandlerFunction).getFriends()
これが役立つことを願っています!
クライアント側のコード用の純粋なjavascriptフレームワーク(おそらくJquery)を調べて、PythonでJSONサービスを作成することをお勧めします。これが最も簡単で最良の方法のようです。
Google Web Toolkitを使用すると、JavaでUIを記述し、それをjavascriptにコンパイルできます。Daveが言うように、バックエンドがJavaである場合は、その場合に適したRPCフックがあるため、より適切な選択になる可能性があります。
「GWTforPython」であるPajamas(http://pyjs.org/ )をご覧になることをお勧めします。
GWT の GQueryも試してください。これは Java コードです。
public void onModuleLoad() {
$("div").css("color", "red").click(new Function() {
public void f(Element e) {
Window.alert("Hello");
$(e).as(Effects).fadeOut();
}
});
}
Java コードであるため、コンパイル時 (Java->JavaScript) の最適化にコストがかかり、リファクタリングが容易になります。
いいですね。
jQueryは優れたライブラリですが、PrototypeJavaScriptフレームワークも確認してください。それは本当にJavaScriptを時々厄介な言語から美しくエレガントな言語に変えます。
Googleは最近、JavaバージョンのGoogleAppEngineを発表しました。このリリースでは、GWTを使用したGAEアプリケーションの開発を容易にするEclipseプラグインも提供されています。
詳細はこちらをご覧ください:http ://code.google.com/appengine/docs/java/overview.html
もちろん、PythonではなくJavaでアプリケーションを書き直す必要がありますが、GWTを使用している人として、AJAXコードベースで最新のIDEを使用する利点はそれだけの価値があります。
JavaScriptからPythonへのメソッド呼び出しを呼び出せるようにしたい場合、JSON-RPCはGoogleAppEngineでうまく機能します。詳細については、Googleの記事「AJAXを使用してクライアントRPCリクエストを有効にする」を参照してください。
現在、GAEアプリにJQueryを使用していますが、JQueryはうまく機能します。動的で、Ajax呼び出しを使用してJSON文字列を取得するグラフ(google charts)があります。それは私にとって本当にうまくいくようです。