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