成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

App后臺api開發(fā)前的準(zhǔn)備

yzzz / 1601人閱讀

摘要:負(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)系

功能模塊接口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)系模塊 。

比如分析發(fā)消息這個(gè)業(yè)務(wù):

我 (我是人。“人”是一個(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ì)API

API設(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ù)有問題”

7. 關(guān)于API的版本升級問題

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ì)列 1. 消息隊(duì)列應(yīng)用場景

消息隊(duì)列可以把大量的并發(fā)請求變成串行請求,起到減輕服務(wù)器負(fù)擔(dān)的作用。
有些小任務(wù)需要花很多時(shí)間,但是遲點(diǎn)完成也可以,就可以把這樣的任務(wù)交給消息隊(duì)列處理。比如一些不要求馬上完成的發(fā)送郵件,推送消息的任務(wù)。

2. 消息隊(duì)列介紹

消息隊(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 號稱最快,適合大吞吐量場景
五、搜索技術(shù)介紹

搜索的基本原理是“分詞”和“倒序索引”。
常見的開源搜索軟件:

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

相關(guān)文章

  • App后臺api開發(fā)前的準(zhǔn)備

    摘要:負(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)系 ...

    laoLiueizo 評論0 收藏0
  • 淺析微信支付:開發(fā)前的準(zhǔn)備

    摘要:本文是淺析微信支付系列文章的第三篇,主要會講一下在開發(fā)前的一些注意事項(xiàng)。淺析微信支付系列已經(jīng)更新兩篇了喲,沒有看過的朋友們可以看一下。開通微信支付需要注冊登陸微信商戶平臺,微信支付相關(guān)的信息都需要在這個(gè)平臺上進(jìn)行操作。 本文是【淺析微信支付】系列文章的第三篇,主要會講一下在開發(fā)前的一些注意事項(xiàng)。 淺析微信支付系列已經(jīng)更新兩篇了喲~,沒有看過的朋友們可以看一下。 淺析微信支付:前篇大綱...

    yanest 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<