Ionic + Cordova + Angular + LoopBack框架实战
第一章 APP敏捷开发思想
1.1 大话敏捷开发
话说敏捷开发,这是一种夙愿。将交织的业务处理逻辑交给脚本自动处理,将可复用的模块抽取出来,通过插件配置的形式集成到新的项目中,程序员仅仅专注于开发核心业务需求,开发组装完各个模块之后,几条命令一敲,喝杯咖啡,APP自动编译出来了,甚
至可以自动模拟用户操作进行必要的测试工作。这些不是梦想,已经成为可能,跟着本书的思路,作者带你一步一步走向APP敏捷开发殿堂。
如果你之前学过JAVA,学过EJB,你肯定会觉得Spring框架是轻量级的框架;对于
使用过Spring、Hibernate、Struts或JSF开发的程序员来说,使用Spring Web MVC框
架更能提高开发效率,减少工作量。当然,上面的说法仁者见仁,智者见智。我没有学过太多的语言,之前用PHP做过一些项目,和之前用JAVA开发相比,觉得PHP还是挺牛的,简单易学,门槛低,见效快,零基础是真的可以学会的。特别是如果使用像Symfony、ThinkPHP这些开发框架之后,开发效率可不止是一点的提升。
然而,当2009年NodeJS横空出世,借力Chrome V8引擎,给JavaScript有增加了
一层魔力,成为目前当之无愧的敏捷开发语言。记得前年自己正在学NodeJS做网站,转
角发现了一个新名词Angular,貌似牛X哄哄,所以学了一下,果然很高大上。那时候,
开发一个项目,后台前台一个项目文件就够了,用Angular开发前台,通过ajax请求与
后台交互,后台自然而然就用NodeJS + Express框架了。
如今,时代不同了,移动互联网是未来。只会做后台,做网页还是远远不够的,于是自己就开始想有木有敏捷开发APP的框架,那时恰好认识了PhoneGap,现在听到更多的
是Cordova,她提供了一套前段开发APP应用的平台,通过WEB API开发跨终端平台的应
用程序。你也可以根据自己的需求,开发自己需要的底层插件,集成到平台上来。比较早的开发模式是使用jQueryMobile + Cordova开发编译APP,随后又有集成AngularJS和Cordova的开发框架ionic,但是由于Cordova开放的API接口数据都在js回调函数中,无法注入Angular的scope,所以现在甚至有了ngCordova框架,该框架特意封装了Augular和Cordova。
说完前端和APP,那么做应用开发自然少不了服务后台了,后台一般提供数据服务和
相应的业务逻辑处理。随着前端技术的不断发展,比较流行的技术架构是前后端分离,鼓励开发富客户端应用,分散服务端的复杂业务处理。随着Angular这种前端MVC框架的出现,使得前端有了处理业务逻辑的思路,而Android和IOS开发的手机APP自然可以处理客户端的业务逻辑。所以,目前的项目开发架构就很清朗,可以在客户端处理的业务逻辑,尽量放到客户端处理;必须要放在服务端处理的业务逻辑,才放到服务端处理。尽量保证服务端结构简单,易于维护和处理,同样也可以提高服务端的可用性和伸缩性。
哪里有需求,哪里就有解决方案,于是LoopBack出现了,这是一个高性能,可伸缩
的服务端开发框架。只需要几行命令,就能帮你生成服务端RESTful API,甚至还自动生
成了可以在浏览器浏览的API接口说明网页,LoopBack是一个很强大,功能全面的服务
端开发框架,后面章节会详细讲解。
1.2 一些说明
本书主要从实用的角度讲解关于APP敏捷开发的相关技术,并不会深究每个框架的内部实现机制。皓眸哥主要还是想通过本教程和真实的项目实战来和各位同学分享这种高效的开发方法,不管您是做研发还是做生产测试,绝对能帮助你省去不少弯路。
互联网发展的浪潮下,我们做事要有互联网的思维,开发也要有互联网的速度,快速迭代,快速调整。Ionic是一个很好的开发框架,结合ngCordova,你几乎可以开发出各
种需求的应用程序。
关于运行效果,这个可能是公司做产品需要考虑的,比起原生的开发程序,cordova
编译后的程序可能会感觉不如原生的流畅,但是现在随着手机配置的提升,Android系统
和IOS系统的不断优化完善,cordova目前已经发布最新的4.0 版本,根据皓眸哥自己的使用体验来说,两种方式开发的应用程序使用起来没有多大的差别,如果说有一点的瑕疵,也可以通过巧妙的设计来弥补,或者自己封装一层插件来提高用户体验。
第二章 开发环境搭建
2.1 NodeJS环境配置
进入官网(https://www.doczj.com/doc/e72038219.html,/),下载安装包安装,本文作者用的是win8.1系统。windows系统会自动将nodeJS安装后的路径加到系统环境变量path中,如果你在
cmd控制台输入:node,没有反应,则说明你的这个nodeJS目录没有添加到系统环境变
量中,请手动添加。nodeJS安装完之后,会自动安装npm,你也可以查看一下所安装的版本。我的nodeJS和npm版本如下:
node -v
v0.10.28
npm –v
1.4.28
2.2 Cordova与Android环境配置
ionic是一个专注于用WEB开发技术,基于HTML5创建类似于手机平台原生应用的一
个开发框架。目前绑定的与angularJS和SASS。这个框架的目的是从web的角度开发手
机应用,基于PhoneGap的编译平台,可以实现编译成各个平台的应用程序。首先需要安
装cordova和android环境。
PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序
的快速开发平台。它使开发者能够利用iPhone,Android,Palm,Symbian,WP7,Bada和Blackberry智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,
此外PhoneGap拥有丰富的插件,可以调用。
Phonegap是一款开源的开发框架,旨在让开发者使用HTML、Javascript、CSS等Web
APIs开发跨平台的移动应用程序。原本由Nitobi公司开发,现在由Adobe拥有。它需要
特定平台提供的附加软件,例如iPhone的iPhone SDK,Android的Android SDK等,也
可以和DW5.5及以上版本配套开发。使用PhoneGap只比为每个平台分别建立应用程序好
一点点,因为虽然基本代码是一样的,但是你仍然需要为每个平台分别编译应用程序。
Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访
问原生的设备功能,如摄像头、麦克风等。Cordova还提供了一组统一的JavaScript类
库,以及为这些类库所用的设备相关的原生后台代码。Cordova支持如下移动操作系统:iOS, Android,ubunto phone os, Blackberry, Windows Phone, Palm WebOS, Bada 和 Symbian。Cordova是贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,
是驱动PhoneGap的核心引擎。你可以把他想象成类似于Webkit和Google Chrome的关系。
1.首先要安装java运行环境jdk,这个可以自行到官网下载。百度也有下载连接:
( https://www.doczj.com/doc/e72038219.html,/s?tn=baidu&ie=utf-8&f=8&wd=jdk ),这个主意要将java安装路径的bin目录加入系统或用户的环境变量path中,安装完可以在cmd命令行窗口输入java -version,看是否有反应。
2.然后下载ADT(Android Development Tools),这个到官网下载:
(https://www.doczj.com/doc/e72038219.html,/sdk/index.html ),这个网站打开慢,下载还是比较快的。下载后解压ADT,这个里面主要包含两个文件夹,一个是装好插件的
eclipse,用于开发Android应用,另外一个是android开发sdk目录。需要将
sdk/platform-tools这个路径加入系统环境变量path中,为了以后调试用到adb。需要注意的是adt不要下载adt V22.3.0,这个是一个坑,就是22.30版本无法自动升级到23版本以上,需要重新下载adt,而我们需要23版本以上的adt这样主要是为了能下载使用x86的虚拟机镜像,加快Android虚拟机运行速度。附上adt的下载地址:
ADT Bundle——23.0.2
Windows 32-bit:https://https://www.doczj.com/doc/e72038219.html,/android/adt/adt-bundle-windows-x86-20140702.zip
Windows 64-bit:https://https://www.doczj.com/doc/e72038219.html,/android/adt/adt-bundle-windows-x86_64-20140702.zip Mac OS X 64-bit:https://https://www.doczj.com/doc/e72038219.html,/android/adt/adt-bundle-mac-x86_64-20140702.zip
Linux 32-bit:https://https://www.doczj.com/doc/e72038219.html,/android/adt/adt-bundle-linux-x86-20140702.zip
Linux 64-bit:https://https://www.doczj.com/doc/e72038219.html,/android/adt/adt-bundle-linux-x86_64-20140702.zip
如果你下载的速度比较慢,注意修改你的host文件哈,测试过的比较好的配置如下:
74.125.113.121 https://www.doczj.com/doc/e72038219.html,
203.208.46.146 https://www.doczj.com/doc/e72038219.html,
203.208.46.146 https://www.doczj.com/doc/e72038219.html,
3. 下载安装ant,这个是在用phonegap的cordova工具生成android项目时,需要的编辑工具。下载地址:(https://www.doczj.com/doc/e72038219.html,/bindownload.cgi ),安装完之后要注意,一定要在cmd命令行窗口输入 ant 命令,看是否报错。我的这个就报错:在jre目录找不到tools.jar。解决方法很简单,自己看了一下jre目录是没有,在jdk目录下
lib目录有tools.jar,于是拷贝一个过去就解决了。
具体使用技巧和问题解决办法,参考我的博客:
https://www.doczj.com/doc/e72038219.html,/2015/01/06/2015_mac_android/
上面安装完成之后,接着安装cordova插件,
npm install -g cordova
接着你就可以运行一个示例项目测试一下:
cordova create myapp https://www.doczj.com/doc/e72038219.html,.myapp "HelloWorld"
cd myapp
cordova platform add android //添加android运行平台
cordova build android //编译apk
cordova emulate android //调用adb调试应用
如果提示找不到android,则需要新建环境变量ANDROID_HOME,路径为sdk的目录。如果有其他问题,参考我的博客:
https://www.doczj.com/doc/e72038219.html,/2014/08/06/2014_phonegap_android/
2.3 ionic环境配置
执行下面的命令就可以,还可以使用ionic模板创建项目:
npm install -g ionic
ionic start myApp tabs //创建带有top栏和bottom栏的示例项目
ionic start myApp sidemenu //创建带有左侧带有menu栏的示例项目
ionic start myApp blank //创建空白项目
ionic serve //自动打开浏览器,本地调试
添加Android或者IOS平台,添加Android平台,指行下面的命令:
cd myApp
ionic platform add android //这行可能会报错
ionic build android
ionic emulate android
添加IOS平台需要先安装ios-sim插件,执行下面的命令:
npm install -g ios-sim
cd myApp
ionic platform add ios //这行可能会报错
ionic build ios
ionic emulate ios
如果有什么错误,参考我的博客:https://www.doczj.com/doc/e72038219.html,/2014/08/07/2014_ionic/
第三章 ionic框架资源
3.1 CSS样式与图标
ionic提供了所有图标预览页面:https://www.doczj.com/doc/e72038219.html,/,你可以在上面选择喜欢的图标,需要注意的是带ios的图标并没有内置在发行包中,需要另外安装。
Css样式参考我的博客:
3.1.1 ionic中文详解CSS组件1
3.1.2 ionic中文详解CSS组件2
ionic同样也封装了许多的控件,关于这些控件的用法,参考我的博客:
3.1.3 ionic中文javascript API(1)
3.1.4 ionic中文javascript API(2)
3.1.5 ionic中文javascript API(3)
3.2 示例项目与调试技巧
先介绍一个入门的简单项目,使用ionic制作文件选择与上传的项目,参考我的博客:
3.2 ionic文件选择与上传
关于ionic项目调试,其实没有特别好的方法,对于界面,我们可以通过浏览器直接调试,然而对于功能性的问题,调试就不是那么方便了。有两种方法可以做:
1.使用cordova提示控件,比如dialog,toast等等
2.使用控制台打印到Android的logcat中
比较推荐第二种方法来做,这样我们不管是用Android虚拟机还是真机调试,只要连接上logcat就可以查看调试信息。但是目前官方还没有提供这样的插件,我们下面就结合ionic插件开发的教程,和你一块编写一个console插件,插件中提供log方法,这样你安装这个插件之后,调试android应用时可以通过console.log方法将调试信息输出到logcat 中。
第四章 ionic插件开发
4.1 ionic调试插件开发
这里主要介绍如何开发ionic插件,我们将开发一款用于输出信息到android控制台的插件myconsole。新建一个文件夹名为console,目录结构如下:
目录说明:
src 存放对应平台的native源代码
android 存放Android平台要编译到apk的对应src的包目录
ios 存放对应IOS平台的文件
www
存放cordova plugin插件js文件,网页上的方法会先调用到这个plugin中对应的方法,然后根据配置文件调用到android或者ios中对应的类和方法。
LICENSE 存放开源的许可证,这个不是必须的
plugin.xml插件描述文件,当执行ionic plugin add命令时会解析该文件
readme.md说明文件
先编写www目录下的console.js文件,代码如下:
var exec = require('cordova/exec');
module.exports = {
/**
* 一共5个参数
第一个 :成功会掉
第二个 :失败回调
第三个 :将要调用的类的配置名字(在config.xml中配置稍后在下面会讲解)
第四个 :调用的方法名(一个类里可能有多个方法靠这个参数区分)
第五个 :传递的参数以json的格式
*/
log: function(mills,callback,err) {
exec(function(winParam){
callback(winParam);
}, function(errParam){
err(errParam);
}, "MyConsole", "log", [mills]);
},
err: function(mills,callback,err) {
exec(function(winParam){
callback(winParam);
}, function(errParam){
err(errParam);
}, "MyConsole", "err", [mills]);
}
};
我们在这里定义了两个方法log和err,这两个方法是暴露给前台js调用的方法。然后我们编写对应android平台的java文件,我暂时放在com.haomou包目录下,MyConsole.java 代码如下:
package com.haomou;
import android.app.Activity;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import https://www.doczj.com/doc/e72038219.html,.Uri;
import android.util.Log;
/**
* js调用java方法
* 必须继承CordovaPlugin
* 我使用的 cordova 3.3.0版本
* @author chale https://www.doczj.com/doc/e72038219.html,
*/
public class MyConsole extends CordovaPlugin {
public String message="";
/**
* 注意构造方法不能为
* MyConsole(){}
* 可以不写或者定义为如下
*/
public MyConsole() {
}
CallbackContext callbackContext;
@Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException { this.callbackContext = callbackContext;
if (action.equals("log")) {
// 获取args的第一个参数
message = args.getString(0);
Log.i("myConsole", message);
return true;
}
if (action.equals("err")) {
// 获取args的第一个参数
message = args.getString(0);
Log.d("myConsole", message);
return true;
}
return false;
}
}
}
从上面的代码可以看到,我们在excute方法中会捕获获取的参数,如果是log则用info的方式输出信息,如果是err,则通过debug的方式输出信息。
最后一步我们开始编写配置文件,安装插件的时候,ionic会根据这个配置文件来动态配置android项目,编写plugin.xml内容如下:
xmlns:android="https://www.doczj.com/doc/e72038219.html,/apk/res/android" id="com.haomou.console" version="0.0.1"> This plugin allows print msg in logcat
关于这个配置文件,注释中我已经写的很清楚了。这里我们要编写的工作就完成了。下面介绍如何安装和卸载ionic插件。
4.2 ionic插件安装与卸载
使用下面的命令查询、安装、卸载插件:
ionic plugin list //列出所有已安装插件
ionic plugin remove 插件名 //先根据上面的list列出插件,然后根据插件名卸载
ionic plugin add 插件地址 //这个插件地址可以是github的项目地址,也可以是一个文件夹路径
ionic –help //查看帮助文件
4.3 虚拟机调试ionic项目
通过ionic emulate Android命令可以直接启动虚拟机,并启动应用程序,但是启动后,就断开了,这时候我们需要使用adb连接虚拟机或者Android设备查看日志信息。
先在控制台执行adb命令,如果没有反应,需要把Android sdk目录下的platform-tools目录加入到环境变量path中。然后执行下面的命令:
adb devices //列出可用的Android设备
adb logcat //进入Android日志打印控制台
adb shell //进入Android系统的shell
adb install apk路径 //给Android设备安装应用
4.2 其他技巧
1.如何指定编译的android版本,也就是API Level?
----修改项目下的 platforms/android/project.properties和platforms/android、CordovaLib/project.properties中的target=android-19 即可。修改成你想要的版本,前提是你已经安装了对应的api版本的sdk ,否则编译会出错。
第五章 服务端REST敏捷开发
5.1 REST概念介绍
http作为一种通用网络协议,是目前应用最多,最通用,也是相对较为稳定的协议,易于开发,易于扩展。其实REST并不是一种新兴的技术语言,也不是什么新的技术框架。准确来说说REST只是一种概念、风格或者约束,是回归HTTP本身的建议。
REST的核心概念是资源,使用HTTP提供的基本方法来对资源进行操作,一般的操作
定义如下:POST(创建资源)、GET(获取资源)、PUT(修改资源)、DELETE(删除)。它们正好对应了CRUD。对资源的表述,一般的选择会是XML,但是我更加推荐使用JSON
来表述资源。在网络中的传输量也小,而且也便于JavaScript来解析,而且现在其他语
言解析也是非常方便的事情。不过,最关键的还是占用更少的资源,让同样的资源能够服务更多的人。
上图中展示了REST围绕资源的关系。
5.2 Token与OAuth2.0
当使用一个REST API时,其中一个挑战就是认证(authentication)。在传统的
web应用中,服务端成功的返回一个响应(response)依赖于两件事。一是,他通过一种
存储机制保存了会话信息(Session)。每一个会话都有它独特的信息(id),常常是一
个长的,随机化的字符串,它被用来让未来的请求(Request)检索信息。其次,包含在
响应头(Header)里面的信息使客户端保存了一个Cookie。服务器自动的在每个子请求
里面加上了会话ID,这使得服务器可以通过检索Session中的信息来辨别用户。这就是
传统的web应用逃避HTTP面向无连接的方法。
关于Token参考我的技术博客:https://www.doczj.com/doc/e72038219.html,/2014/08/13/2014_web_token/
关于OAuth 2.0 参考我的博客:https://www.doczj.com/doc/e72038219.html,/2014/08/19/2014_oauth/
5.3 跨终端的服务端敏捷开发框架
记得前些年,有个哥们开发了lazyREST用图形化的界面构造rest后台服务,后来这个哥们忙着赚钱、创业,项目好久好久没有维护了。
然而,github上另外一个项目,一直特别火,现在正在逐步发展壮大,这就是loopback,官网是loopback.io。loopback是一个高度可扩展的,开源的NodeJS框架,你可以用它来:
1.创建动态的端到端的REST API,而几乎不用编写任何代码
2.可以访问数据库如Oracle, MySQL, PostgreSQL, MS SQL Server, MongoDB,
SOAP 或者其他的REST APIs.
3.内置支持关系数据模型和访问控制
4.对于移动APP内置推送、地理位置和文件服务
5.提供Android,IOS和Angular的开发SDK,便于快速开发
6.很方便的在云端构建应用
LoopBack结构组成:
1.NodeJS模块类库
2.通过脚手架生成应用的Yeoman生成器
3.客户端SDK
LoopBack提供了以下工具包:
1.命令行工具slc loopback 可以用于创建应用,数据模型,数据源等等
2.StrongLoop Arc
LoopBack模块框架图如下,提供了一组NodeJS的模块,你可以结合在一块用,或者分开使用。
Core
?loopback
?loopback-datasource-juggler
?strong-remoting
Connectors
?loopback-connector-mongodb
?loopback-connector-mysql
?loopback-connector-postgresql
?loopback-connector-rest Enterprise Connectors
?loopback-connector-oracle
?loopback-connector-mssql
?loopback-connector-soap
?loopback-connector-atg Community Connectors
LoopBack社区创建了许多其他的connector,参考Community connectors。
Components
?loopback-component-push
?loopback-component-storage
?loopback-component-passport Client SDKs
?loopback-sdk-ios
?loopback-sdk-android
?loopback-sdk-angular
o loopback-sdk-angular-cli
o grunt-loopback-sdk-angular Tools
?loopback-explorer
?loopback-workspace
?generator-loopback Examples
?loopback-example-app
?loopback-example-database
?loopback-example-datagraph
?loopback-example-full-stack
?loopback-example-office-supplies ?loopback-example-todo
?loopback-example-access-control ?loopback-example-proxy
?strongloop-community/loopback-examples-ios
?loopback-example-ssl Resources
?Documentation.
?API documentation.
?LoopBack Google Group.
?GitHub issues.
?Gitter chat.
5.4 LoopBack实例
1. 安装loopback
npm install –g strongloop
//查看版本
slc –v
-----------
strongloop v2.10.1 (node v0.10.35)
├── strong-arc@1.0.3 (0fbac2c)
├── strong-build@1.0.2 (b698551)
├─┬ strong-supervisor@1.3.0 (85c2a79)
│└── strong-agent@1.2.1
├── node-inspector@0.7.4
├── strong-deploy@1.1.1 (dba6165)
├── strong-pm@1.5.1 (2a9b727)
├── strong-registry@1.1.3 (3138d24)
├── nodefly-register@0.3.3
└── generator-loopback@1.7.0 (f72c607)
安装过程可能会报错,不用理会,目前有几个模块可能会冲突。但是冲突的模块可以单独安装的,不用在全局安装。安装完成后,可以查看版本。
2. 为了方便演示,我们采用官方的第三方登录的示例项目展示。下载安装项目:
npm install loopback--‐component--‐passport
这个第三方登录的示例提供了两种演示效果,第一个是直接用第三方授权登录,基于passport认证,第二种是绑定现有的帐号到第三方。
3. 配置第三方登录provider(参考: https://www.doczj.com/doc/e72038219.html,/guide/providers/ ),原项目中是用facebook和goole授权登录的例子,我们演示一个使用微博登录的例子。安装微博插件:
npm install passport--‐weibo
配置项目根目录下providers.json文件,增加:
"weibo-login": {
"provider": "weibo",
"module": "passport-weibo",
"clientID": "2130919215",
"clientSecret": "0a5a554df68f8ded90a8f85e19950aab",
"callbackURL": "http://127.0.0.1:3000/auth/weibo/callback",
"authPath": "/auth/weibo",
"callbackPath": "/auth/weibo/callback",
"successRedirect": "/auth/account",
"scope": ["email"]
}
这个是配置微博登录的,关于上面的接口是需要在微博开放平台上申请的,由于我们是在内网测试的,网址是127.0.0.1,申请接口时候选择站内应用,具体详情参考:
https://www.doczj.com/doc/e72038219.html,/2015/01/19/2015_apply_weibo/
4. 运行项目,查看效果
slc run
……
Browse your REST API at http://localhost:3000/explorer
Web server listening at: http://localhost:3000/
如下图所示,LoopBack内建的API explore还是很好用的。
5.5 LoopBack 用户访问角色控制
做应用时涉及到用户这一块比较通用的是基于用户角色的访问控制管理,用户分角色,分别管理。下面给出了一个静态创建角色的例子:
User.create([
{username: 'John', email: 'john@https://www.doczj.com/doc/e72038219.html,', password: 'opensesame'}, {username: 'Jane', email: 'jane@https://www.doczj.com/doc/e72038219.html,', password: 'opensesame'}, {username: 'Bob', email: 'bob@https://www.doczj.com/doc/e72038219.html,', password: 'opensesame'} ], function(err, users) {
if (err) return cb(err);
//create the admin role
Role.create({
name: 'admin'
}, function(err, role) {
if (err) cb(err);
//make bob an admin
role.principals.create({
principalType: https://www.doczj.com/doc/e72038219.html,ER,
principalId: users[2].id
}, function(err, principal) {
cb(err);
});
});
});
注意参数不能随便修改。
然后可以在模型json文件中配置访问权限:
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW",
"property": "find"
}
然后就可以了,只有admin角儿的user才可以访问find方法。
关于用户角色访问控制,loopback实际上已经内建了集中角色如下:
5.5 LoopBack 文件上传
5.5.1 LoopBack服务端配置
LoopBack提供了大数据存储的模块,只要安装storage connector即可,安装方法如下:
$ npm install loopback--‐component--‐storage –save
然后我们可以通过命令创建一个datasource,或者直接修改datasources.json文件。命令如下:
$ slc loopback:datasource
生成的 /server/datasource.json
...
"myStorageDataSource": {
"name": "myStorageDataSource",
"connector": "storage"
}