Есть ли хорошая платформа AJAX для приложений Google App Engine?[закрыто]
-
09-06-2019 - |
Вопрос
Я пытаюсь реализовать AJAX в своем приложении Google App Engine и поэтому ищу хорошую среду AJAX, которая мне поможет.У кого-нибудь есть идеи?
Я думаю о Google Web Toolkit, насколько он хорош с точки зрения создания AJAX для Google App Engine?
Решение
Поскольку Google Web Toolkit представляет собой подмножество Java лучше всего это работает, когда вы используете Java и на бэкэнде.Поскольку Google App Engine в настоящее время только Python Я думаю, вам придется немало повозиться, чтобы ваш сервер и клиент могли хорошо общаться друг с другом.
jQuery, по-видимому, является самым популярным вариантом библиотеки JavaScript в мире. Тег AJAX на DjangoSnippets.com.
Редактировать: Вышеупомянутое справедливо только для приложений Google App Engine, написанных на Python.Поскольку Google App Engine теперь поддерживает Java, GWT теперь может стать хорошим выбором для написания внешнего интерфейса AJAX. У Google даже есть руководство, показывающее, как это сделать.
Другие советы
Хороший способ — использовать библиотеку AJAX, чтобы воспользоваться преимуществами Служба API библиотек AJAX Google.Это немного быстрее и чище, чем загружать 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>
И это все, что вам нужно для использования библиотек API Google.
Вот как мы реализовали Ajax в Google App Engine, но эту идею можно распространить и на другие платформы.
У нас есть сценарий-обработчик для запросов Ajax, который отвечает, в основном, ответами JSON.Структура выглядит примерно так (это отрывок из стандартного скрипта-обработчика 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()
Надеюсь, это поможет!
Нет причин, по которым вам не следует использовать GAE и Google Web Toolkit (GWT) вместе.Вы пишете свой внутренний код на Python, а внешний — на Java (и, возможно, немного на JavaScript), который затем компилируется в JavaScript.При использовании другой платформы AJAX вы также увидите разницу между языком сервера и клиента.
В GWT есть функции, упрощающие удаленный вызов Java-кода на сервере, но они совершенно необязательны.Вы можете просто использовать интерфейсы JSON или XML, как и в других платформах AJAX.
GWT 1.5 также поставляется с типами наложения JavaScript, которые по сути позволяют вам обрабатывать часть данных JSON как объект Java при разработке кода на стороне клиента.Вы можете прочитать больше об этом здесь.
Обновлять:
Теперь, когда Google добавил поддержку Java для Google App Engine, вы можете разрабатывать как внутренний, так и внешний код на Java в полном стеке Google — если хотите.Есть хороший Плагин Eclipse от Google, что упрощает разработку и развертывание приложений, использующих GAE, GWT или оба.
Я бы порекомендовал изучить чистый Javascript-фреймворк (вероятно, Jquery) для вашего клиентского кода и написать сервисы JSON на Python - это кажется самым простым/лучшим способом.
Google Web Toolkit позволяет написать пользовательский интерфейс на Java и скомпилировать его в JavaScript.Как говорит Дэйв, это может быть лучшим выбором, если серверная часть выполнена на Java, поскольку для этого случая у нее есть хорошие перехватчики RPC.
Возможно, вы захотите взглянуть на Пижамы (http://pyjs.org/), то есть «GWT для Python».
попробуйте также GQuery для GWT.Это 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 — прекрасная библиотека, но также обратите внимание на Прототип JavaScript-фреймворка.Это действительно превращает JavaScript из иногда неудобного языка в красивый и элегантный язык.
Если вы хотите иметь возможность вызывать вызовы методов из JavaScript в Python, JSON-RPC хорошо работает с Google App Engine.См. статью Google "Использование AJAX для включения клиентских запросов RPC", подробнее.
В настоящее время я использую JQuery для своего приложения GAE, и он прекрасно работает для меня.У меня есть динамическая диаграмма (диаграммы Google), которая использует вызов Ajax для получения строки JSON.Кажется, у меня это действительно работает нормально.
Недавно Google анонсировала Java-версию Google App Engine.В этом выпуске также представлен плагин Eclipse, который упрощает разработку приложений GAE с помощью GWT.
Подробности смотрите здесь: http://code.google.com/appengine/docs/java/overview.html
Конечно, вам придется переписать свое приложение на Java вместо Python, но как человек, работавший с GWT, позвольте мне сказать вам, что преимущества использования современной IDE в вашей кодовой базе AJAX полностью того стоят.