1. 程式人生 > >不用再等後端的介面啦!這個開源專案花 2 分鐘就能模擬出後端介面

不用再等後端的介面啦!這個開源專案花 2 分鐘就能模擬出後端介面

![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210117152056521-1211028357.jpg)

本文作者:HelloGitHub-嘉文

這裡是 HelloGitHub 推出的[《講解開源專案》](https://github.com/HelloGitHub-Team/Article)系列,今天給大家帶來一款開源免費的模擬後端 API 的工具:moco 沒學過後端開發的也能快速上手這個開源專案,靚仔靚妹們不必再辛苦等待後端開發 API,從而有更多的時間逛 HelloGitHub 體驗更多有趣的開源專案。接下來本文將用帶你快速上手 moco 這個開源工具,讓你不再卡在後端介面的開發進度上,一騎絕塵! > 專案地址:https://github.com/dreamhead/moco ## 一、moco 有什麼用 > 我做前端或者客戶端開發,對我有什麼用? 1. 在後端 API 開發緩慢的時候,如果你想測試應用展示效果,就不必再等後端進度,使用 moco 輕鬆模擬後端 API。 2. 在專案初期的時候,產品經理或者是客戶想看到你的應用展示,模擬好 API 就可以開發前端,展示效果啦。 > 我做後端開發,對我有什麼用? 1. 企業級軟體一般都是多人開發,因為介面之間是互相依賴的,所以如果你依賴的服務進度緩慢或者是沒有在環境中執行,你就無法對你開發的功能進行測試,進而不能及時交付專案,從而加班熬夜。 2. 即使你所依賴的服務在環境中執行,但是所依賴的服務依舊會不斷測試和調優,這個過程也可能會導致你開發功能測試出現問題。一個穩定的測試介面,減少你的等待時間。 ## 二、快速開始 ### 2.1 準備工作 ```bash JDK 1.8+ (推薦1.8版本) ``` ### 2.2 下載 jar 包 [點選此處下載 jar 包](https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/1.1.0/moco-runner-1.1.0-standalone.jar) ### 2.3 API 配置檔案 新建 `hello.json` 檔案,寫入以下內容 ```json [{ "description": "moco 快速開始示例", "request": { "uri": "/hello" }, "response": { "text": "Hello GitHub" } }] ``` 目錄結構如下 ```json ├── hello.json // API 介面配置檔案 ├── moco-runner-1.1.0-standalone.jar // 下載的模擬 API 的工具 ``` ### 2.4 執行專案 在該目錄下執行 ```bash java -jar moco-runner-1.1.0-standalone.jar http -p 9999 -c hello.json ``` >* moco-runner-1.1.0-standalone.jar:執行程式的路徑(剛剛下載的包的路徑) > >* http:選擇服務型別(有 http、https、socket) > >* -p 9999:設定服務埠 9999 > >* -c hello.json:設定配置檔案路徑(剛剛新建的配置檔案) ### 2.5 效果展示 在瀏覽器中訪問一下地址 ```bash localhost:9999/hello ``` 效果如圖所示 ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210117152115825-188436524.png) ## 三、詳細用法 剛剛的你應該十分輕鬆地模擬一個簡單的後端 API,是不是很有成就感?但是你使用或者開發過後端 API 你就也許知道:一個合格的後端 API 不應該僅僅侷限如此。一個合格的後端 API 應該能包括:請求方法、請求 URL、請求引數、請求頭、請求體、返回狀態碼、返回提示資訊、返回頭和返回體等內容。 如何使用 moco 這個開源專案模擬出一個合格的後端介面呢?接下來就帶你一步步瞭解詳細用法。 ### 3.1 基本結構 ```json [ { "description": "moco 基本結構", "request": { "uri": "/hello", "method": "post" }, "response": { "text": "Hello GitHub" } } ] ``` * json 檔案的最層是一個 `[]` 陣列,裡面可以封裝多個 API(示例只有一個 API) * 因為 json 配置檔案不支援註釋,所以這個 API 的註釋你可以寫到 `description` 裡面 * `request` 可以包含請求的所有內容 * `response` 可以包含返回的所有內容 ### 3.2 模擬一個基本的 RESTful API ```json [{ "description": "模擬一個基本的 RESTful API", "request": { "uri": "/hello2", "method": "post", "headers": { "Content-Type": "application/json", "Accept": "application/json", "token": "header.playload.signature", "Accept-Charset": "utf8" }, "cookies": { "login": "true" }, "json": { "name": "zhangsan", "age": 13 } }, "response": { "json": { "message": "測試成功" }, "latency": { "duration": 2, "unit": "second" }, "headers": { "Content-Type": "application/json", "token": "new-header.new-playload.new-signature" }, "cookies": { "login": { "value": "true", "domain": "localhost", "secure": "true", "httpOnly": "true", "path": "/" } } } }] ``` * `method`:請求方法 * `headers`:請求頭 * `cookies`:請求 Cookies * `json`:請求體的一種型別(還有 `froms` 表單等型別) * `response` 返回值的 `headers` 、`json`、`cookies` 也類似 * `latency` 模擬伺服器卡頓(因為模擬的後端 API 返回資料幾乎是瞬間的,這裡我們讓其卡頓 2 秒) **測試** 這裡我們使用 GitHub 上面開源免費的 API 測試軟體 [Postman](https://github.com/postmanlabs/postman-app-support) 進行測試 (1)url、請求方法、請求頭和 Cookies ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210117152130187-1567130771.png) (2)請求體(json) ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210117152139230-268522676.png) (3)測試效果 點選 Send 傳送,並在下方 response 檢視測試效果 ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210117152148900-1302396281.png) 檢視返回的請求頭 ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210117152159907-1909708648.png) 檢視返回的 Cookies ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210117152208949-1301836363.png) 檢視全域性 Cookies ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210117152219048-447215632.png) ### 3.3 附件下載 有時候我們需要模擬檔案下載,moco 如何實現呢? ```json [{ "description": "moco 附件下載", "request": { "uri": "/hello" }, "response": { "attachment":{ "filename": "demo.txt", "file": "demo.txt" } } }] ``` 檔案目錄 ```bash ├── hello.json // API 介面配置檔案 ├── moco-runner-1.1.0-standalone.jar // 模擬 API 的工具 ├── demo.txt // 要下載的檔案,這裡可以使用相對路徑 ``` `localhost:9999/hello` 即可下載 `demo.txt` 檔案 ### 3.4 輪詢資料 如果我們重新整理頁面想獲得不同的內容 moco 如何實現呢? ```json [{ "description": "moco 輪詢資料", "request": { "uri": "/hello" }, "response": { "cycle": [{ "text": "hello 1" }, { "text": "hello 2" }, { "text": "hello 3" } ] } }] ``` 訪問 `localhost:9999/hello` 會依次得到如下內容 ```json hello 1 hello 2 hello 3 hello 1 hello 2 ... ``` ### 3.5 重定向 有時候我們想重定向頁面 moco 如何實現呢? ```json [{ "description": "moco 重定向", "request": { "uri": "/hello" }, "redirectTo": "https://hellogithub.com" }] ``` 訪問 `localhost:9999/hello` 會自動重定向到 `https://hellogithub.com` ### 3.6 正則表示式 moco 還支援一些運算子,比如正則表示式。 ```json [{ "description": "moco 正則表示式", "request": { "uri": { "match": "/hello/\\w*" } }, "response": { "text": "Hello GitHub" } }] ``` 可以通過正則表示式匹配的連結訪問,比如 ```json localhost:9999/hello/jarvan localhost:9999/hello/bmft ``` ### 3.7 使用模板 有的時候我們的返回引數依賴於請求引數(比如編碼型別),這個時候我們就可以用 template 模板來實現,我們可以在模板中通過 `req` 來表示傳送的請求 。 ```json { "description": "moco 使用模板", "request": { "uri": "/hello", "method": "post" }, "response": { "text": { "template": "${req.method}" } } } ``` 返回的值是 ```json { "text": "post" } ``` ## 四、最後 看到這裡,想必你已經瞭解開源專案 moco 的基本使用了,是不是覺得很有意思?這裡給出一個小建議,如果想真正使用這個開源專案 moco,建議參考官方文件去「實踐」,這是最快捷,最有效的使用開源專案的辦法。「實踐」就是鞏固的最佳方法,希望你能在實踐中體驗設計程式的快樂! 至此,感謝熱愛開源的小夥伴們的閱讀。**公眾號 HelloGitHub ** 會定時介紹 GitHub 上有趣的開源免費的專案,如果你對開源專案感興趣,那就關注我們收到第一時間​的文章推送吧。 > 參考: > > [GitHub:專案官方文件](https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md) > > [開源中國:Moco 可輕鬆搭建的測試伺服器](https://www.oschina.net