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