1. 程式人生 > >從URI看Mobile和Web資料

從URI看Mobile和Web資料

引言

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分享到外部世界。要學會做一個更加開放的系統。