Windows Azure:移动后端开发的主要更新

[原文发表地址] Windows Azure: Major Updates for Mobile Backend Development

[原文发表时间] 2013-06-14

这周我们给Windows Azure释出了一些很棒的更新,让云上的移动应用开发明显的简单了。这些新功能包括:

  • 移动服务:定制API支持
    移动服务: Git源码控制支持
    移动服务: Node.js NPM模块支持
    移动服务:一个通过NuGet的.NET API
    移动服务和网站:为移动服务和网站提供的免费的20M数据库选项
    移动消息中心:安卓广播消息推送支持

所有这些提升都已经可用了(注意:有些还在预览版)。以下是更多的具体信息。

移动服务:定制APIs Git源码控制,和NuGet

Windows Azure移动服务有能力轻松构建一个支持Windows8,windows Phone,IOS,Android和 HTML5客户端应用的移动后端。从第一个预览版开始,我们就支持用服务端脚本轻松扩展你的数据后端逻辑。这些服务器端脚本作为针对你的云上数据表的客户端CRUD操作的一部分执行。

今天的更新中,我们更进一步扩展了这个支持,并教你如何从你的移动服务后端创建开放定制APIs。可以轻松的把它们发布到你的移动端,而不需要关联到一个数据表。这个功能让一 整套场景成为可能-包括使用除数据库之外的数据源(例如:表服务或MongoDB),调用第三 方APIs,和Windows Azure队列或服务总线集成在一起,非JSON有效载荷(例如windows预通知),路由客户端请求到后端服务(例如新的Windows Azure BizTalk服务),或者简单的实现不和数据库操作对应的功能。定制的APIs可以在服务器端用javascript写(用Node.js)并可用Node.js NPM包。未来我们也会支持用.NET写的APIs。

创建一个定制的API

添加一个定制的API到一个已经存在的移动服务是超简单的。用Windows Azure管理门户你现 在就可以简单的点击新的“API”标签,然后点击“创建一个定制的API”按钮来创建一个新定制的API:

clip_image001

给API起个你想起的名字,选择你想应用的HTTP方法安全权限。你可以锁定HTTP动词到你定制的API使其对任何人可用,有一个有效的应用key可用,验证用户可用,或管理员可用。移动服务将会强制实现这些权限,不需要你写任何代码:

clip_image002

当你点击了OK按钮,你将会看到API显示在API列表中。选中它你可以编辑默认的脚本,这些脚本包含一些占位符功能:

clip_image003

今天的释出让用户可以用Node.js写定制的APIs(以后我们会支持用.NET写定制APIs),定制的API编程模型遵循Node.js模块的惯例,导出捕获http请求的功能。

上面默认的脚本功能是HTTP POST请求。为了支持GET请求,只要相应的改变导出的声明。下面是一个代码示例,用Azure Node API从Windows Azure 表存储中阅读和返回数据:

clip_image004

保存好这些变动,你现在可以从任何移动服务客户端应用程序(包括Windows 8,Windows Phone,iOS,Android或HTML5 CORS)中调用这个API。

下面是如何从一个使用.NET的Windows Store应用中异步调用API和新的调用方法,在xaml中数据绑定结果到控件的代码:

 private async void RefreshTodoItems() { 

var results = await 
App.MobileService.InvokeApiAsync<List<TodoItem>>("todos", 
HttpMethod.Get, parameters: null); 
ListItems.ItemsSource = new 
ObservableCollection<TodoItem>(results); 
} 

 

移动服务中的集成验证和定制API验证真是很简单。就像数据请求,定制的API请求一样享有内置的验证和移动服务验证(包括和Microsoft ID ,谷歌,脸书和推特验证集成) ,并且还可以让你轻松集成你的定制API代码到其他移动服务功能,比如推送消息,记录,SQL,等等。

查看新的指南,学习更多关于使用新的定制API支持,并开始添加他们到你的APP中吧。

移动服务: Git源码控制支持

今天的移动服务更新也支持集成Git源码控制。这个新的源码控制支持提供一个Git资源库来作为你移动服务的一部分,并且它还包括所有你已有的移动服务脚本和权限。你可以克隆这个git资源库到你本地机器上,修改你的脚本,然后就可以用Git轻松的部署移动服务到生产环境。这提供了一个极好的开发者工作流,可用于任何开发机器(windows,Mac和Linux)。

想要这些新支持,请导航到仪表板上的移动服务并选择安装源码控制链接:

clip_image005

如果这是你第一次在Windows Azure上使用Git,你将会被要求提供你要访问的资源库的证书。

clip_image006

当你配置了这些,你可以选择你的移动服务配置标签并且会看到一个Git URL,可以用来使用资源库:

clip_image007

你可以通过命令行来使用这个URL来克隆资源库到本地:

> git clone https://scottgutodo.scm.azure-mobile.net/ScottGuToDo.git

clip_image008

下面是资源库的目录结构:

clip_image009

就像你看到的,这个资源库包含一个服务文件夹和几个子文件夹。定制的API脚本和相关的权限以.js和.json文件形式出现在api文件夹下面(.json文件为你的终端提供持久的JSON形式的安全设置)。相似的,表脚本和表权限也以.js和.json文件出现,但因为表脚本在CRUD操作之前是分开的,它们遵循<tablename>.<operationname>.js命名习惯。最终,计划任务脚 本出现在scheduler文件夹,共享文件夹是作为存储你的被多个脚本共享的代码和一些杂项诸如APNS反馈脚本的习惯位置。

我们来修改表脚本 todo.js文件,这样当查询表服务的异常发生时我们明显有了更好的错误捕获:

todos.js

tableService.queryEntities(query, function(error, todoItems){
    if (error) {
        console.error("Error querying table: " + error); 
        response.send(500);
     } else { 
         response.send(200, todoItems);
}
});

保存这些修改,现在回到命令行提交并推送到移动服务:

>git add
>git commit –m "better error handling in todos.js"
> git push

clip_image010

一旦这些修改部署完成,他们会立即生效,你也将会在门户中看到反射出的这些修改:

clip_image011

有了新的源码控制特性,我们让你轻松的本地编辑移动服务和在Windows Azure门户进行不牺牲易用性的原子风格的推送。

移动服务: NPM模块支持

新的移动服务源码控制支持也允许你添加任何Node.js模块到脚本中,而不是通过移动服务的固定集提供。例如,在上面的例子中你可以轻松选择使用Mongo代替Windows Azure表。安装Mongo数据库既可以通过在Windows Azure商店购买一个Mongo实验室订阅(提供MongoDB服务)也可以自己在虚拟机上安装(Windows或Linux)。然后到你本地git资源库的服务文件夹运行下列命令:

>npm install mongoose

这会添加Mongoose模块到你的移动服务脚本。在这之后你可以在你定制的API脚本中使用和引用Mongoose模块来连接到Mongo 数据库:

 var mongoose = require('mongoose'); 
var schema = mongoose.Schema({ text: String, completed: Boolean }); 

exports.get = function (request, response) { 
 mongoose.connect('<your Mongo connection string> '); 
 TodoItemModel = mongoose.model('todoitem', schema); 
 TodoItemModel.find(function (err, items) { 
 if (err) { 
 console.log('error:' + err); 
 return response.send(500); 
 } 
 response.send(200, items); 

 }); 
};

 

完成后不要忘记推送你的修改到移动服务。

> git add
> git commit –m "Switched to use Mongo Labs"
> git push

现在我们的移动服务使用Mongo数据库了!

注意,今天的更新中,定制的Node.js模块用法只局限于定制的API脚本。我们将很快会在所有的脚本中实现(包括数据和定制CRON任务)。

新的移动服务 NuGet包,包括 .NET4.5支持

几个月前我们宣布了一个新的预发布版的基于便携类库(PCL)的移动服务客户端SDK。

今天,我们非常激动的宣布这个新的库已经是一个支持移动服务的稳定的.NET客户端SDK,再也不是那个预发布包了。今天的更新包括:完全支持Windows商店,Windows Phone 7.x, 和.NET 4.5,这允许开发者从ASP.NET或WPF应用程序中使用移动服务。

今天,你可以通过NuGet安装并使用这个包。

移动服务和网站:为移动服务和网站提供的免费的20M数据库选项

 

从今天开始,每个 Windows Azure用户使用网站和移动服务都可以获得一个免费使用12个月的20M数据库(包括开发/测试和生产环境)。

只要当创建一个移动服务或一个网站时,简单的选取新的“创建一个新的免费20M数据库”选项即可得到这项好处:

clip_image012

你可以通过 Windows Azure订阅或其他 Windows Azure虚拟机或云服务,同时在10个网站和10个移动服务免费使用数据库。

消息中心:安卓广播推送消息支持

 

今年早些时候,我们介绍了 Windows Azure上的新功能,可以大规模发送广播推送消息:消息中心

在一开始的消息中心预览版中你可以用IOS和Windows设备获得这些支持。今天我们兴奋的宣布,新的消息中心也支持推送消息到安卓设备了。

推送消息对于移动应用来说是至关重要的部分。不仅是消费类应用提高参与和使用的关键,也可在企业级应用程序中更新信息提高员工业务反应。你可以从任何类型的app(移动服务,网站,云服务或虚拟机)中使用消息中心推送消息到设备。

消息中心提供给你下列功能:

跨平台推送消息支持。 消息中心提供一个通用API来一次推送消息到IOS,安卓或Windows商店。你的应用程序可以用特定平台格式或平台无关方式发送消息。

高效的多博广播。 消息中心优化了消息推送服务,可以低延迟推送消息广播到数千或数百万设备中。你的服务器后端引发一条消息到消息中心,然后数百万的推送消息被自动传送到你的用户设备中。在消息中心注册时设备和app可以指定per-user标签的数量。这些标签不需要被预先配置或出售,只要调用一个简单的API就可以轻松的发送过滤过的消息到无限多的用户
/设备。

大规模。 消息中心让你可以在不用重新架构或碎片你的应用同时达到数百万设备。pub/sub路由机制允许你以超有效的方式广播消息。可以让你不用架构自己的路由就极容易的路由并发送消息到数百万用户。

任何后端App可用。 消息中心可以轻松集成到任何后端服务器app中,无论是移动服务,网站,云服务还是IAAS虚拟机。

很容易配置消息中心来推送消息到安卓设备。在Windows Azure管理门户创建一个新的消息中心(新建->应用服务->服务总线->消息中心):

clip_image013

然后用https://code.google.com/apis/console注册谷歌云消息并获得你的API key,然后粘贴到谷歌云消息设置页面的消息中心管理页面中的配置标签:

clip_image014

接着添加代码到你的安卓应用的MainActivity 类的OnCreate 方法来注册设备消息中心:

 gcm = GoogleCloudMessaging.getInstance(this); 
String connectionString = "<your listen access connection string>"; 
hub = new NotificationHub("<your notification hub name>", connectionString, this); 
String regid = gcm.register(SENDER_ID); 
hub.register(regid, "myTag"); 

现在你可以从.NET后端(或Node.js,java,或PHP)广播消息到任何通过简单的API调用注册了“myTag”标签的Windows Store, Android, 或iOS 设备中(你可以广播到数百万客户端,只要调用API注册过)。

 var hubClient = NotificationHubClient.CreateClientFromConnectionString( 
 “<your connection string with full access>”, 
 "<your notification hub name>"); 
hubClient.SendGcmNativeNotification("{ 'data' : {'msg' : 'Hello from Windows Azure!' } }", "myTag”);

 

消息中心提供了极易扩展,跨平台,消息推送架构,可让你高效路由推送消息到数百万用户和设备。将会让你的消息逻辑显著简化并更具扩展,还可让你借此构建更好的应用程序。

MSDN上学习更多关于消息中心的内容。

概述

上述特性现在都可用了(注意:一些服务还在预览版)。如果你还没有Windows Azure帐号,现在就可以免费试用注册一个。访问Windows Azure开发者中心学习更多如何构建应用程序的知识。

希望帮到你。

Scott

ps:除了博客,我现在也用推特快速更新并分享链接,关注我 twitter.com/scottgu