大家好第一次發文詢問問題
我目前正在製作一個小專案,這個專案是個會議管理系統,系統有分網頁與Android,網頁的部分已經利用json把資料庫內容建立在MongoDB內,我想請問要怎麼讓Android也同時可以連上已建立好的MongoDB呢?
目前找到的資料是,如果直接把資料庫寫死在APP內會有很大的風險,所以要透過伺服器去連接,MongoDB官網有MongoDB Atlas(雲端版)可以透過Realm讓Android與MongoDB連接,但是我怎麼讓雲端版的與我本機上的MongoDB資料同步呢?
p.s目前還是學生,是比菜鳥還菜鳥的學習程式的人,因為已經苦惱已久,還麻煩大大給予解答,如描述的地方有錯誤或需要更詳細的內容,歡迎大大們不吝嗇地指導!
如果直接把資料庫寫死在APP內會有很大的風險,所以要透過伺服器去連接
原則上,這你只理解了一點,沒理解到全部。
因為所謂透過伺服器去連接。一般來說指的是透過一個後端語言來幫你處理。
也就是api的方式來處理。
一般連接的情況如下
app->(apikey或是token)->api後端應用(判斷apikey的正確與否)
->(資料庫的帳密)->資料庫
所以在app上,並不會去看到對應的帳密。也無法直連資料庫。
也就是說,你還得先去處理一個api應用的程式才行。
但是我怎麼讓雲端版的與我本機上的MongoDB資料同步呢?
同步有一個原則,需要兩邊都能固定連結溝通。
也就是得先了解你所謂的本機。不能是127.0.0.1的連結方式。
先了解到這邊就好。
通常是自己寫一個後端來和你的APP溝通,而後端才會連接到資料庫。
想要簡單用用的話,去看FireBase
實在不建議把手機/平板跟資料庫直接對連,一來適合的資料庫連接元件真的不好找,二是安全性的問題,你確定打包成APK就能原始碼安全嗎?你可以試試,用7Z就可以把APK解壓縮,內容需不需要反組譯?或是你直接寫在資源檔裡?只要連接字串能反向解密,都不安全
再來,你為了直連資料庫,3306也要曝露在公網上,就算程式不被反組譯,你也擋不住DDoS的大量攻擊和無限次的密碼探測吧...
把APK當前端,用WebService或WebAPI做後端,相對安全的多了
你所謂的realm是指 mongodb realm 服務吧?我假設你是想把自己web用的mongodb跟realm的雲端mongodb同步,不確定mongodb的雲端服務是否提供跟本地端db同步的功能,這需要研究,不過這個服務基本上是要收費的,再說你也已經完成自己的web了,實在不需要繞遠路來事件這個功能。
同一個服務的資料庫通常會是共用的,主要是要簡化資料一制性的問題,此外,資料是所有服務的命脈,不能被破壞或任意取得,因為很重要,所以集中管理也有好處,比如備份或備援等等,基於這個概念DB一般都是部署於層層保護的地方,當然練習的時候可以簡化一點,不過最好一開始就有這個觀念。
由於DB被保護起來了,所以要與他溝通需要透過一些程序,通常我們只允許部分設備能夠跟DB溝通,而APP運作的環境是各別使用者的手機,由於通常無法保證手機及其運作環境的安全性,因此不能讓其直接連線DB,此時就需要透過一個中介來進行溝通,APP先與某個允許讀寫DB的服務溝通,該服務確認沒問題後才將資料寫入DB或提供查詢後的的資料,而這個中介的服務便是一個API Service,而你既然已經實作了一個web了,可以去理解一下網頁的溝通模式跟Web API之間的差異,這兩者本質上是一樣的東西,你可以透過實作網站的技術去實現一個API Service,再透過API與後端的DB溝通。