RESTFul API 的 mock server 解決方案

會寫這一篇主要是最近在公司上有遇到我們需要快速迭代與試錯,但在前後端是不一樣的團隊,但在快速迭代的情況下,為了避免不要互相影嚮進度,一個常見的作法就是架設json mock server,也就是設定對應的api 只回應對應的假資料…

這類型的工具也很多,只是最近剛好摸到一個工具覺得是我目前碰過的類似工具之中,最容易上手的,而且可以有GUI可以使用…

Mockoon

這個工具與其它類似工具的主要差異是,它有GUI界面,可以直接在界面上設定要開哪些endpoint與對應的response以後,就可以直接在local 端跑起mock server了。

而且GUI 界面類似於 Postman,所以上手難度很低,稍微摸一下界面就知道它可以做哪些工具了…

Mockoon routes view
reference: https://mockoon.com/docs/latest/gui-cheat-sheet/

其它更多好用的功能像是

  • Proxy configurations

這個是當api request 打進時,mockoon上如果有沒設定的endpoint時,可以指定它轉發到特定的機器。

  • Support openapi/swagger config import

這個顧名思義是可以直接把我們寫的api 文件檔直接丟到mockoon上,這樣對應的endpoints 就被設定好了。

  • Rule based responses

這我覺得也算是蠻客製化的功能,我們可以針對一個endpoint設定多個responses,然後透過一些客製化的規則(rules)來設定mockoon 要回哪個response。

  • Support CLI based runtime

除了gui 界面以外,官方也有支援cli (用npm包的),所以我們可以把local端的mockoon設定檔丟到cloud上的機器,然後就可以在機器上用cli跑起一個對應的mock server。

像是下面一個簡單的 restart.sh 就可以讓重啟linux 上的mockcoon 並且讀取對應的設定檔。

!/bin/bash
 pkill -f "mockoon-cli"
 mockoon-cli start --data mockoon_api_config.json -p 9000 > /dev/null 2>&1 &

VSCode 中編寫Markdown table 的plugin

每次要寫Markdwon 時, 總覺得最麻煩的就是要編輯table, 只要欄位中的字串長度改變, 每次都要在調整相對應的欄位邊界很久…

剛好在Vscode上發現這個Markdown Table plugin 這個好物, 真是不錯, 每次有table欄位值變更時, 只需要無腦的按 Tab鍵即可!!!

真是幫我省下不少時間阿XDDDDD

Reference:

Mac上遇到的warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)

這個問題之前遇到過幾次,每次都是透過iTerm2連接到remote linux server時跳出警告… 雖然問題不大,但昨天連到自家的機器又遇到一樣的問題時,還是決定來找一下解決方式!

這個警告主要影響的是使用者在iTerm2上的畫面顯示,只要用到UTF-8的地方會一直出現警告 !

解決方式

網路上找了一下相關的解決方式以後,大概可以分為兩種方式處理:

Server 端的解決方式

將下列的設定加入到 /etc/environment 裡面

LANG=en_US.utf-8
LC_ALL=en_US.utf-8

Client 端的解決方式(Mac)

將下列兩行環境變數加入到使用者的 ~/.bashrc~/.zshrc(基本上看client端這邊的shell環境)

export LC_ALL=en_US.UTF-8
export LANG=US.UTF-8

我目前採用Client端的解決方式,再重新做 source ~/.zshrc以後,目前就沒在遇到問題了!

Reference:

透過jq 將json檔案格式輸出成 env格式

剛好工作上有這個需求, 就順便找了一下看 jq 指令是否可以簡單的做到這件事…

測試了下面的指令以後, 看起來真的是頗好用, 一行指令就可以把 json 轉成 env 了!

cat example.json| jq -r 'to_entries[] | [.key,.value] | join("=")' > example.env

Reference:

Database diff

從DK的blog上看到的分享工具 data-diff 後, 快速看了一下它的說明文件以後, 感覺這東西有需求的話應該會蠻不錯用的!

看起來可以比對多個data source的資料表, 而且預計支援的資料庫或相關服務也蠻多是市面上常見的… 蠻適合以後有需要時再來試看看.

Reference:

透過SQLite3 來用一指令實現SQL讀取CSV檔

看到DK的文章上提到這個功能覺得也太有趣了, 沒想到會有這麼簡單方式來從CSV檔中讀取想要的內容…

使用方式

將sqlite3 透過memory的方式讀取了以後, 就可以透過SQL來找到其中想要的內容了…

sqlite3 :memory: -cmd '.mode csv' -cmd '.import mds_content_status.csv temp' -cmd '.mode column' 'SELECT * FROM temp'

為了讓使用方式更方便, 還可以在.bashrc.zshrc中把上面的cli 指令包裝成 shell function 如下:

function query_csv() {
    local CSV_FILE=$1
    local TABLE=$2
    local QUERY=$3

    sqlite3 :memory: -cmd '.headers on' -cmd '.mode csv' -cmd ".import ${CSV_FILE} ${TABLE}" -cmd '.mode column' "${QUERY}"
}

然後我們就可以用下面的方式去query了…

query_csv users.csv user_table 'SELECT id, name FROM user_table where id=17807'

reference

Linux中網路界面速度的調整方式

最近剛好工作上有需要, 需要針對一些網路情況不佳的裝置去做一些實驗; 但問題來了, 要在實務上去真的找到這種裝置其實蠻難的, 這時候Linux 提供了一些很好模擬的方式來對特定的網路界面模擬上述情境…

限制網路界面的速率

再做了一些快速的瀏覽以後, 看起來在Linux中主要是透過 tc 這個指令來做 traffic control, 不過社群中有人提供了一個更簡便的方式 wondershaper, 如果OS是ubuntu 的話可以用 sudo apt-get install wondershaper 就可以安裝了.

一些常見的指令範例有:

設定eth1 的download=256kbps, upload=128kbps

sudo wondershaper eth1 256 128

清除 eth1的流量設定

sudo wondershaper clear eth1

設定網路界面的packet lost 機率

這個情境下, 我們可以模擬網路掉包在不同嚴重程度的情況下的情境; 主要是透過 iptables 來達成, 可以參考以下範例:

設定來源ip為 123.123.123.123 且封包到這台電腦的 local port為 3000時, 其packet drop的機率為 5%

sudo iptables -I INPUT -s 123.123.123.123 -p tcp --dport 3000 -m statistic --mode random --probability 0.05 -j ACCEPT

reference:

Ubuntu 中調整輸出音訊的方式

最近接了藍芽喇叭以後, 發現ubuntu 內建的system settings 在選擇輸出音訊時有時候會不太正常, 常常聲音會出不來, 或是在先前所選的裝置。

後來查了stackoverflow上的一篇文章後, 發現了一個不錯的工具…. pavucontrol

安裝 pavucontrol

sudo apt install pavucontrol
pavucontrol 

然後執行 pavucontrol 以後就有一個新的音訊控制的UI了 XD

Reference

Mac 上對應於 Linux 上的App

會有這篇文章,主要是因為在hacker news上看到有人分享轉移到Mac M1時,如何找到他在Linux上使用時對應的Apps/tools

為我來說,主要會紀錄這篇是為了看我目前在Linux上哪邊可以找到對應我在Mac上常用的工具。(當然也順便紀錄一下有哪些Mac App是不錯用的)

目前看下來,我在Linux這邊可以嘗試的工具有:

Reference:

* https://hookrace.net/blog/macos-setup/