从URI看Mobile和Web数据

来源:互联网 发布:linux升级gradle 编辑:程序博客网 时间:2024/06/12 12:55

引言

在Mobile Analytics一文中,我们谈到了Mobile APP和 Web APP数据最大的区别是在数据的开放度的问题,那我们就从uri和urL说起。

1、URI和URL

URI:Uniform Resource Identifier,统一资源标识符,用来标记一个唯一的资源,URL:Uniform Resource Locator,统一资源定位符,是一种具体的uri的实现。

URI抽象结构 [scheme:]scheme-specific-part[#fragment]

[scheme:][//authority][path][?query][#fragment]

authority为[user-info@]host[:port]

可以看出URI一般由三部分组成:访问资源的命名机制(scheme),存放资源的授权,包括用户信息和主机信息(authority),资源自身的名称,由路径表示(path)。除外,还有query和fragment


2、WEB 的开放世界和 HTTP协议

HTTP协议,超文本传输协议,是WEB URL的一种,WWW世界里面的核心协议。具体可以看这篇文章HTTP协议详解
说web数据非常开放,就从http协议说起。在web的世界里面,每一个人都可以通过一个类似于这样的http协议的URL发布和分享出去自己的内容
http://127.0.0.1:8080/cmd_helloworld/?name=xianyadan
其它人通过一个浏览器就都可以查询到,够开放了吧

3、Android Activity与URI

相比之下,Android的世界就要封闭得多了,每一个应用都是一个独立的小岛,每一个小岛里面有很多Activity,但是很可能都不是对外的,意味这没有办法查询到,即使是在同一个机器设备上面。所有没有办法看到。
Android引入了自定义URI进入这封闭世界,带来了一束光。具体可以看这篇文章Android 自定义URI SCHEME
通过这篇文章,我们可以看到在Android的设备上面,我们也是有可能可以将自己的信息分享给其它应用的,那就是通过自定义URI SCHEME,
<a href="xl://goods:8888/goodsDetail?goodsId=10011002">打开商品详情</a>
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));startActivity(intent);
这样其它应用就可以访问到了

4、Android Content Provider 与URI

ContentProvider在android中的作用是对外共享数据, 也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE或 Context.MODE_WORLD_WRITEABLE同样也可以对外共享数据。那么,这里为何要使用ContentProvider对外共享数据呢?是这样的,如果采用文件操作模式对外共享数据,数据的访问方式会因数据存储的方式而不同,导致数据的访问方式无法统一,如:采用xml文件对外共享数 据,需要进行xml解析才能读取数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读取数据。

使用ContentProvider对外共享数据的好处是统一了数据的访问方式,

ContentProvider的URI由以下三部分组成: "content://"、数据的路径、标示ID(可选),举些例子,如: 

  所有联系人的Uri: content://contacts/people

  某个联系人的Uri: content://contacts/people/5

  所有图片Uri: content://media/external

  某个图片的Uri:content://media/external/images/media/4

具体可以看看Android ContentProvider和Uri详解


5、结语

我们在Mobile Analytics一文中分析了Mobile APP和Web APP最大的区别是对外的数据的呈现和分享的问题,今天就从URI的层面来看这个区别,毫无疑问,WWW是最开放的,通过http协议把内容放到网络上开启了人类的共享时代。
移动应用(C/S应用)本来是非常不开放的一个资源,在Android时代,通过Android的设计者们引入了URI到Activity,和引入URI到ContentProvider。就像在封闭的房间里开了几扇窗户,在封闭的岛上开放了一些渡口。但是很遗憾这种开放也仅仅局限于Android系统,目前还不能很好的分享到跨端。甚至在Android内部也没有应用得那么广。

URI是分布式世界的一个核心,通过URI得内容里面分享出URI是一个非常重要得链接世界得方式。一个开放的系统就是有更多得URI分享到外部世界。要学会做一个更加开放的系统。

原创粉丝点击