摘要:負(fù)責(zé)從拉取數(shù)據(jù)源,把數(shù)據(jù)源分詞,建立索引搜索模塊工作流程如下模塊從中拉取數(shù)據(jù)模塊用經(jīng)過中文分詞后的數(shù)據(jù)建立索引客戶端向模塊發(fā)起搜索請求模塊查找索引中的數(shù)據(jù)模塊得到索引中符合要求的數(shù)據(jù)的等數(shù)據(jù)把數(shù)據(jù)返回給客戶端
一、從業(yè)務(wù)邏輯中提煉API接口(整理自《App后臺開發(fā)運(yùn)維和架構(gòu)實(shí)踐》 作者:曾健生)
業(yè)務(wù)邏輯思維導(dǎo)圖
功能——業(yè)務(wù)邏輯思維導(dǎo)圖
基本功能模塊關(guān)系
功能模塊接口UML(設(shè)計(jì)出API)
編寫API文檔
在設(shè)計(jì)稿中標(biāo)注API
1. 業(yè)務(wù)邏輯思維導(dǎo)圖抽象業(yè)務(wù)流程,列出結(jié)構(gòu)關(guān)系,相同的元素(推送、評論、圖片上傳)用同一種顏色標(biāo)記。
2. 功能——業(yè)務(wù)邏輯思維導(dǎo)圖列出功能模塊與業(yè)務(wù)邏輯相結(jié)合。
功能模塊的劃分,可以按照“人”、“事”來劃分?!叭恕本褪且粋€(gè)大模塊,“事”要看有哪些事,相同的事就是一個(gè)模塊,人和事之間的關(guān)系,就是關(guān)系模塊 。
我 (我是人。“人”是一個(gè)模塊)
消息 (消息是“事物”?!跋ⅰ笔且粋€(gè)模塊)
我發(fā)消息 (發(fā)消息,是事件,不是事物,是人與物的關(guān)系,是一個(gè)關(guān)系模塊)
3. 基本功能模塊關(guān)系理清各個(gè)模塊之間的依賴調(diào)用關(guān)系
4. 功能模塊接口UML (設(shè)計(jì)出API)具體分析各個(gè)模塊的具體的功能(具體的API),再根據(jù)上一步驟整理的模塊間的關(guān)系,畫出UML圖
5. 編寫API文檔提倡使用TDD(測試驅(qū)動(dòng))原則開發(fā),編寫在線API文檔,既是一份文檔,也是一個(gè)在線測試工具。
相關(guān)的開源工具:
swagger-ui
eolinker
sosoapi
http://www.easyapi.com/
6. 設(shè)計(jì)稿標(biāo)注API為了方便app端和web端的開發(fā)人員,快速理解和使用API,可以在設(shè)計(jì)圖中在相應(yīng)的界面相應(yīng)的元素上,標(biāo)注出需要的API,這個(gè)工作可以分析編寫API文檔同時(shí)進(jìn)行。
二、設(shè)計(jì)API的要點(diǎn) 1. 根據(jù)對象設(shè)計(jì)APIAPI設(shè)計(jì)中最重要的是根據(jù)對象而不是界面來設(shè)計(jì)API,提高API的可擴(kuò)展性。
2. API的命名API的命名務(wù)必要做到從API名稱就能明白這個(gè)API的作用。
3. API的安全性涉及到登錄和支付功能的,使用HTTPS協(xié)議
使用URL簽名的方式驗(yàn)證API請求的合法性
使用AES對稱加密的方式,保護(hù)API請求和返回中的所有數(shù)據(jù)
##### 更進(jìn)一步的通信安全:
使用自定義的通信協(xié)議傳輸敏感數(shù)據(jù)
使用DES(非對稱加密算法)
使用邦邦加密、愛加密等第三方工具對APP進(jìn)行加密
涉及到支付功能的,每一次都需要輸入密碼,密碼不在本地保存
使用自主開發(fā)的輸入控件輸入敏感信息
4. API返回的數(shù)據(jù)APP客戶端主要開發(fā)語言java和objective-C都是強(qiáng)類型語言,所以絕對不允許返回null值。
數(shù)據(jù)庫設(shè)計(jì)時(shí),所有字段都必須有默認(rèn)值,不允許出現(xiàn)null。
app客戶端必須用全局的函數(shù)處理所有API返回的數(shù)據(jù),當(dāng)返回的數(shù)據(jù)缺少某個(gè)值時(shí),自動(dòng)補(bǔ)上一個(gè)默認(rèn)值。
使用PHP作為APP后臺的開發(fā)語言存在一個(gè)問題:PHP中數(shù)組和字典都屬于Array,但在java和objective-C中這兩者是不一樣的。
5. 圖片的處理app開發(fā)中,通常需要一張圖片有多種尺寸,以適應(yīng)app的不同版本和各異的客戶端。
建議:
App客戶端本地緩存常用圖片,緩存不能命中時(shí)才去請求服務(wù)器
App端需要的不同尺寸的圖片時(shí),發(fā)送帶尺寸參數(shù)的請求到后臺,有后臺動(dòng)態(tài)生成并緩存。
文件云存儲服務(wù)(七牛,又拍)和CDN都提供圖片的縮放功能,高速的文件上傳下載,有條件的情況下,推薦使用。
6. 返回的提示信息最科學(xué)的情況是APP后臺只返回信息代碼,具體的文字由客戶端決定。
需要給App客戶端程序員返回的提示信息,要專業(yè)清晰,比如“少傳了什么參數(shù),哪個(gè)參數(shù)有問題”
App客戶端做了改版后,部分API不能滿足需求了,這時(shí)就需要升級API,要避免同一個(gè)App客戶端調(diào)用不同版本的API,一般會全部升級。例如:原來是“xxx.com/v1/getpost”, 升級為“xxx.com/v2/getpost”。
注意:
升級版本時(shí),V2版本的API的Controller必須要繼V1版的Controller,這樣V2版本的API只重寫需要改動(dòng)的API
完善文檔,在線API測試文檔中詳細(xì)說明,方便客戶端人員調(diào)試。
三、選擇合適的數(shù)據(jù)庫內(nèi)存型還是硬盤型
內(nèi)存的讀取速度大概是硬盤的80倍。
內(nèi)存容量很有限。例如Ucloud服務(wù)器最多有64G內(nèi)存,硬盤可高達(dá)1000G。
Redis,MongoDB,mysql 讀寫數(shù)據(jù)的區(qū)別
存儲服務(wù) | 類型 | 說明 |
---|---|---|
Redis | 內(nèi)存型 | 支持持久化保存到硬盤 |
mongoDB | 混合 | 使用MMAP機(jī)制,操作內(nèi)存完成文件讀寫 |
Mysql | 硬盤型 |
Redis,MongoDB,Mysql 查詢數(shù)據(jù)的區(qū)別
存儲服務(wù) | 說明 |
---|---|
Redis | “鍵值對”存儲,讀寫速度快 |
MongoDB、 Mysql | 有id或索引,效率高;無id或索引,效率低 |
Redis,MongoDB,Mysql 適用場景
存儲服務(wù) | 適用場景 |
---|---|
Redis | 適合存儲讀寫頻率非常高,且知道“鍵”的數(shù)據(jù),比如用戶身份信息,在登錄或其他操作中都能用到 |
mongoDB | 大尺寸、低價(jià)值的數(shù)據(jù);高伸縮性場景;地理坐標(biāo)查詢功能強(qiáng)大,適用于LBS應(yīng)用。劣勢:不支持事務(wù),查詢功能遜于sql |
Mysql | 最常用的存儲服務(wù),支持事務(wù),支持復(fù)雜sql |
消息隊(duì)列可以把大量的并發(fā)請求變成串行請求,起到減輕服務(wù)器負(fù)擔(dān)的作用。
有些小任務(wù)需要花很多時(shí)間,但是遲點(diǎn)完成也可以,就可以把這樣的任務(wù)交給消息隊(duì)列處理。比如一些不要求馬上完成的發(fā)送郵件,推送消息的任務(wù)。
消息隊(duì)列一般包括三個(gè)角色:隊(duì)列服務(wù)端,隊(duì)列生產(chǎn)者,隊(duì)列消費(fèi)者。
常見的消息隊(duì)列產(chǎn)品:
消息隊(duì)列 | 介紹 |
---|---|
RabbitMQ | 重量級產(chǎn)品,支持大量協(xié)議,適合企業(yè)級開發(fā);支持路由,負(fù)載均衡,數(shù)據(jù)持久化;自帶web監(jiān)控界面,方便監(jiān)控。 |
Redis | 輕量級,運(yùn)維成本低 |
ZeroMQ | 號稱最快,適合大吞吐量場景 |
搜索的基本原理是“分詞”和“倒序索引”。
常見的開源搜索軟件:
Lucene
很受歡迎的免費(fèi)java信息檢索程序庫
solr
基于Lucene,查詢語言更豐富,查詢性能更好,提供了完善的功能管理界面。對外提供類似于Web-service的API接口,用戶可以通過http請求向搜索引擎服務(wù)器提交一定格式的xml文件,生成索引;也可以通過http get操作提出查找請求,得到XML格式的返回結(jié)果。
ElasticSearch
它是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶的全文搜索引擎,基于RESTful Web接口。
Sphinx
Sphinx是一個(gè)基于Sql的全文檢索引擎,其結(jié)合MySQL、PostgreSQL做全文索引,可以提供比數(shù)據(jù)庫本身更專業(yè)的搜索功能,使應(yīng)用程序更容易實(shí)現(xiàn)專業(yè)化的全文索引。Sphinx特別為一些腳本語言設(shè)計(jì)搜索API接口,如PHP、Python、Perl、Ruby等,同時(shí)為MySQL也設(shè)計(jì)了一個(gè)存儲引擎插件。
CoreSeek
CoreSeek是一款中文全文索引/搜索軟件,基于Sphinx研發(fā),專攻中文搜索和信息處理領(lǐng)域,適用于行業(yè)/垂直搜索、論壇/站內(nèi)搜索、數(shù)據(jù)庫搜索、文檔/文獻(xiàn)檢索、信息檢索、數(shù)據(jù)挖掘等應(yīng)用場景,用戶可以免費(fèi)下載使用。
Coreseek有兩個(gè)核心模塊Indexer和Search。
Indexer: 負(fù)責(zé)從mysql拉取數(shù)據(jù)源,把數(shù)據(jù)源分詞,建立索引
Search: 搜索模塊
Coreseek工作流程如下:
Indexer模塊從MySQL中拉取數(shù)據(jù)
Indexer模塊用經(jīng)過中文分詞后的數(shù)據(jù)建立索引
客戶端向Search模塊發(fā)起搜索請求
Search模塊查找索引中的數(shù)據(jù)
Search模塊得到索引中符合要求的數(shù)據(jù)的id等數(shù)據(jù)
把數(shù)據(jù)返回給客戶端
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39593.html
摘要:負(fù)責(zé)從拉取數(shù)據(jù)源,把數(shù)據(jù)源分詞,建立索引搜索模塊工作流程如下模塊從中拉取數(shù)據(jù)模塊用經(jīng)過中文分詞后的數(shù)據(jù)建立索引客戶端向模塊發(fā)起搜索請求模塊查找索引中的數(shù)據(jù)模塊得到索引中符合要求的數(shù)據(jù)的等數(shù)據(jù)把數(shù)據(jù)返回給客戶端 (整理自《App后臺開發(fā)運(yùn)維和架構(gòu)實(shí)踐》 作者:曾健生) 一、從業(yè)務(wù)邏輯中提煉API接口 此過程可分為六個(gè)階段: 業(yè)務(wù)邏輯思維導(dǎo)圖 功能——業(yè)務(wù)邏輯思維導(dǎo)圖 基本功能模塊關(guān)系 ...
摘要:本文是淺析微信支付系列文章的第三篇,主要會講一下在開發(fā)前的一些注意事項(xiàng)。淺析微信支付系列已經(jīng)更新兩篇了喲,沒有看過的朋友們可以看一下。開通微信支付需要注冊登陸微信商戶平臺,微信支付相關(guān)的信息都需要在這個(gè)平臺上進(jìn)行操作。 本文是【淺析微信支付】系列文章的第三篇,主要會講一下在開發(fā)前的一些注意事項(xiàng)。 淺析微信支付系列已經(jīng)更新兩篇了喲~,沒有看過的朋友們可以看一下。 淺析微信支付:前篇大綱...
閱讀 2962·2021-10-18 13:33
閱讀 846·2019-08-30 14:20
閱讀 2633·2019-08-30 13:14
閱讀 2524·2019-08-29 18:38
閱讀 2892·2019-08-29 16:44
閱讀 1216·2019-08-29 15:23
閱讀 3491·2019-08-29 13:28
閱讀 1918·2019-08-28 18:00