Статьи

AppengineJS: JavaScript приходит в GAE


Хотя Google SDK, созданный Google для платформы App Engine, не существует, новый порт GAE Python SDK для JavaScript под названием
AppengineJS облегчает создание приложений для GAE, написанных на языке, с которым знакомы все веб-разработчики. Порт использует Rhino (реализацию JVM JavaScript) поверх Java App Engine, но API основан на Python App Engine, потому что это язык сценариев, такой как JS.

В
блогеНа этой неделе Джордж Мошовитис, один из разработчиков проекта, сказал, что его проект в последнее время вызвал большой интерес, и у него было несколько ответов на комментарии читателей. Он сказал, что если вы уже знаете Python или Java, вам следует придерживаться тех SDK, которые поддерживаются Google. App Engine Python
документация должна эффективно работать на JavaScript SDK.  

Документация AppengineJS объясняет, что они используют соглашения о кодировании JavaScript:


Имена Python, такие как thisisa_name, преобразуются в имена JavaScript, такие как thisIsAName.
Более того, все функции delete () переименованы в функции .remove (), чтобы избежать коллизий с ключевым словом delete (также предоставляется псевдоним DELETE (), но его использование не рекомендуется и может быть исключено в будущем).

Для хранилища данных GAE поддерживается Python ext / db api, но API был немного изменен для большей совместимости с JavaScript:

var db = require("google/appengine/ext/db");

var Category = db.Model("Category", {
label: new db.StringProperty(),
category: new db.ReferenceProperty({referenceClass: Category})
});

var c = new Category({keyName: "news", label: News"});
c.put();
var key = ...
var c1 = Category.get(key);
var c2 = Category.getByKeyName("news");
var categories = Category.all().fetch(3);
...
var comments = Comment.all().ancestor(article).order("-created").withCursor(cursor).fetch(10);

Вот пример документации AppengineJS, относящейся к Blobstore:

Форма:

var blobstore = require("google/appengine/api/blobstore");

exports.GET = function(env) {
return {data: {
uploadURL: blobstore.createUploadUrl("/test")
}}
}

<form action="{uploadURL}" method="POST" enctype="multipart/form-data">
<p>
<input type="file" name="file" />
</p>
<p>
<button type="submit">Upload</button>
</p>
</form>

Загрузить:

var blobstore = require("google/appengine/api/blobstore");

exports.GET = function(env) {
return {data: {
uploadURL: blobstore.createUploadUrl("/save")
}}
}

Сохранить:

var blobstore = require("google/appengine/api/blobstore");

exports.POST = function(env) {
var blobs = blobstore.getUploadedBlobs(env);

return {
status : 303,
headers : {
"Location": "/serve?key=" + blobs.file.toString()
}
};
}

Обслуживать:

var blobstore = require("google/appengine/api/blobstore");

exports.GET = function(env) {
var params = new Request(env).GET();
return blobstore.serve(params.key, env);
}

В документах AppengineJS также рассматриваются URL-выборки, изображения, электронная почта, Memcache, пользователи, очередь задач, XMPP, формы, квота и OAuth. Библиотека все еще находится в стадии разработки, но она определенно пригодна для использования прямо сейчас. Ниже приведена разбивка уровня конверсий API Python:

    • google / appengine / api /
memcache : 90% (можно использовать)

    • google / appengine / api /
urlfetch : 80% (можно использовать)

    • google / appengine / api /
mail : 80 % (можно использовать)

    • google / appengine / api /
images : 60% (можно использовать)

    • google / appengine / api /
users : 90% (можно использовать)

    • google / appengine / api / labs /
taskqueue : 80% (можно использовать)

    • google / appengine / ext /
db : 80% (можно использовать, ожидайте незначительных изменений API)

    • google / appengine / ext /
db / forms : 60% (можно использовать, ожидайте изменений API)

    • google / appengine / api /
xmpp : 80% (можно использовать)

    • google / appengine / ext /
blobstore : 50% (можно использовать)

    • google / appengine / api /
oauth : 90% (не проверено)

Вы можете загрузить AppengineJS с
GitHub . SDK является частью
Nitro Ecosystem и отслеживает последние разработки в группе
CommonJS .