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 &

Javascript中的位移符號

剛好在寫LeetCode 190, 191時遇到要如何處理正負數的位移問題,因為題目要求的是傳入的值會是一個32bits長度的數,但是在javascript 中這就可能會是個正整數或負整數,所以需要的處理方式不一樣…

大概問了下gpt主要在js中有三種位移符號

  1. 左移運算符 (<<):這個運算符將數字的二進位表示向左移動指定的位數。左移後,右邊空出的位將被0填充。這是有符號左移,會考慮符號位。

假設我們有一個正整數 x = 5,在二進制中表示為 0000 0000 0000 0000 0000 0000 0000 0101

我們對 x 執行左移1位的操作 (x << 1),結果會是:

x << 10000 0000 0000 0000 0000 0000 0000 1010

在十進制中,這個數字是10(5的兩倍)。左移一位基本上等於乘以2。

  1. 帶符號右移運算符 (>>):這個運算符將數字的二進位表示向右移動指定的位數。右移後,左邊空出的位將由原來的符號位(即最左邊的位)填充。這允許負數在右移後保持為負數。

假設我們有一個負整數 y = -5,它在32位二進制補碼中的表示為 1111 1111 1111 1111 1111 1111 1111 1011

進行 y << 1 操作,結果會是:

y << 11111 1111 1111 1111 1111 1111 1111 0110

在十進制中,這個數字是-10。類似於正數的情況,左移一位相當於乘以2,但符號保持不變。

  1. 無符號右移運算符 (>>>):這個運算符也將數字的二進位表示向右移動,但移動後左邊空出的位將被0填充,不考慮符號位。這意味著結果總是非負的。

假設我們有一個負整數 y = -8,它在32位二進制補碼中的表示為 1111 1111 1111 1111 1111 1111 1111 1000

進行 y >>> 1 操作,結果會是:

y >>> 10111 1111 1111 1111 1111 1111 1111 1100

在十進制中,這個數字是非常大的,因為無符號右移將負數轉換為正數。這個具體數值是2147483644(2^31-4)

這些例子展示了無符號右移運算符在正數和負數上的作用。對於正數,無符號右移一位與普通右移(帶符號)沒有區別,都相當於將數字除以2。

然而,對於負數,無符號右移會產生顯著不同的結果。由於無符號右移不考慮數字的符號位,它將原始數字視為一個非常大的正數,然後進行位移。這導致負數在經過無符號右移後變成一個非常大的正數。

結論:

在js中如果要處理unsighted intger的相關需求時,會有需要用到 >>> 符號,具體的使用方式如下:

  • 透過 value >>> 0 可以將value轉成正整數。
  • 如果 value 轉成 unsighted int 是一個大於 1<<31-1的正數,則如果要用右移運算符時,則第一次右移需要使用(>>>)運算符,之後就可以使用 (>>)右移運算符。
    (如果 value 在這時用的是 >> 運算符的話,則代表在使用完以後,還是會保留最左邊的1 bit以為持此數的正負號)