課程分為6個部分:
1.設置階段
本節中的講座將提供課程大綱,討論將用作課程展示的案例研究(ACME Travel),提供課程中使用的工具列表。
2. REST API概念
本節中的講座將涵蓋基礎概念,如RESTful API的演進和6種架構的約束。
3.設計REST API
本節中的重點是設計REST API的最佳實務。本節中採用的方法是展示一些流行的API提供者(例如,Twitter,Facebook,Twilio …)如何設計他們的REST API。
資源,CRUD實現
錯誤處理,HTTP狀態代碼
變更管理和版本控制
分頁,部分反應
為了示範實現方面,一組基於NodeJS的API也被用於實現 ACME Travels 虛擬企業。
4.保護REST API
常用的BasicAuth標準不是實現API安全的最佳方式。在本節中,學生將學習用於REST API的常用認證和授權方案
Tokens(Jason Web Tokens或JWT)
Key/Secret
OAuth 2.0(使用Spotify實現作為參考)
當企業將API暴露給公眾網路時,它對企業構成風險,因為駭客可能使用API中的漏洞來對企業發起攻擊。有多種類型的這種功能攻擊,API提供商必須考慮。你將了解常見的攻擊和保護API的最佳做法。
5. Swagger 2.0 / Open API 計畫規範
本節將從協作規範開發流程和採用合同第一方法的好處開始。學生將學習
Swagger 2.0規範標準
如何以YAML格式創建REST API規範
用於Swagger規範編輯的工具選項
Swagger 2.0的好處
展示如何利用通用平台(如Apigee,Mulesoft和IBM API Connect)規範
作為講座的一部分,將為 ACME Vacations 創建一個完整的規範。在本節結束時,學生將能夠為自己的API編寫Swagger / OAI規範。
6. API管理
API管理是在安全,可擴展的環境中發布,記錄和監督應用程式介面 API 的流程。本節中的講座包括 API 供應商在 API 管理範圍內執行的以下活動的詳細資訊。
生命週期管理
開發人員生產力
開發者入口網站
安全
流量管理
分析
產品化
獲利化 ( API 經濟 )
https://softnshare.com/rest-api/
nodejs 好處 在 Kewang 的資訊進化論 Facebook 的最佳貼文
前一篇 (https://www.facebook.com/kewang.information/posts/2241503749459320) 提到了 Autocomplete 的實作方式,但仍然有許多可以調整的地方,像是如何加大 throughput、帶額外資料...等,下面就來分享一下小編的作法。
---
## 1. 減少傳輸量
因為 Autocomplete 的操作行為是使用者每打一個字,就要傳給 server,server 再回傳使用者一些 candidate。所以減少傳輸量是最先要處理的事情,要不然資料量太大傳輸慢會影響前端使用體驗。最簡單的作法就是改變原本回傳的 JSON 格式,如下所示:
### 調整前
[
{"id": 123, "candidate": "taipei"},
{"id": 456, "candidate": "taiwan"},
{"id": 789, "candidate": "tall"}
]
### 調整後
["123%taipei","456%taiwan","789%tall"]
前端拿到資料後自己再用 split 的方式分割字串,實測下來大概可以減少 40% 的資料量。
---
## 2. 減少傳輸量
沒錯!第二點也是減少傳輸量,將準備要回傳的資料用 gzip 壓縮後再回傳。
以 expressjs 本身建議的 compression 套件來說,實測下來發揮不了什麼作用。因為 compression 套件預設為資料量大於 1kb 才會做壓縮,而目前的資料已經是小於 1kb 了,所以沒做任何壓縮就直接回傳。
另外還發現加了 compression 套件之後,以目前開的 heroku 機器來說,回應時間會加上 5-10ms 左右。不過現在服務還沒上線,沒有使用量都不準,等上線之後再來觀察看看好了。
---
## 3. 減少使用者打 server 的次數
前端可以在輸入一個字元的時候不要送 request 給 server,因為經驗法則,使用者應該至少會打兩個字元之後,Autocomplete 回應給使用者 candidate,這樣對 UX 上應該會比較好吧 (小編不專業分析 XD)。不止可以降低 server 的 loading,也可以減少存入 Redis 的資料量。
但這會牽涉到 CJK 與 non-CJK 的處理方式,這就還要再看看如何處理比較好。
---
## 4. 減少使用者打 server 的次數
沒錯!又是減少次數。client 可以在 server 回傳資料的時候,將資料暫存在 client 的記憶體內。因為常會有輸入相同文字的時候,這時就可以直接從 client 的記憶體取出資料,就不用打到 server 了。
但這個使用方式比較不好處理,需視情境而定。若是 Redis 的資料常常在變動,那這個方式會造成取不回最新的資料。或許可以在 client 放個 LRU cache 來做處理。
---
## 5. 減少使用者打 server 的次數
又是我 XDDD!這次是要 server 幫忙,當 client 重複輸入相同 keyword 時,client 會帶 If-None-Match 的 header 給 server,server 會檢查這串值是否已經有打過了,如果打過就回 client 304,表示資料沒變動,可以直接用 client 本身的資料。
這在之前的 JCConf 有分享 (https://www.facebook.com/kewang.information/posts/2192127034396992) 過,大家可以回去翻一下。
---
## 6. 減少 Redis 的資料量
西方國家所用的拉丁字母除了大家常用的 26 個英文字母外,也常會有一些包括重音之類的字母。像是 a 及 á 之類的,這個在搜尋的時候不會太影響,JavaScript 可以利用 String.normalize('NFD') 把 á 轉換成 aˊ,最後再將 ˊ 取代為空字串 (https://stackoverflow.com/a/37511463/939212),Redis 裡面只要存 a 就好,這樣可以節省不少資料量。
當然還有將大寫轉為小寫、trim 掉頭尾空白這幾種做法,也都可以省下不少資料量。
至於 CJK 的話,再說吧 XDDD
---
## 7. 存入 metadata
如果這個 Autocomplete 只是單純選擇 candidate 之後做搜尋,那可以不用存 metadata 進去。但有些功能其實是要把 candidate 回傳給 client 時,也帶一些 metadata 給 client 做其他運用,最常見的應該就是帶 id 這類 metadata 了。
最簡單的作法就是在存入 candidate 的時候,直接把要存的 metadata 帶在字尾,如下所示:
1. t
2. ta
3. tai
4. taiw
5. taiwa
6. taiwan
7. taiwan*123
把 123 放在 taiwan 後面,在取出 candidate 的時候再利用 split 的方式把 taiwan 跟 123 分別取出就可以了。
---
總結上面的幾種方式,目前小編這裡用到了 1, 2, 5, 6, 7 共五種,效果還不錯,就等上線再來看看實戰結果囉。
#funliday #autocomplete #redis #javascript #nodejs
nodejs 好處 在 Kewang 的資訊進化論 Facebook 的最佳貼文
讓全世界使用 nodejs 的朋友都驚呆了!!!居然讓 path 這個 module 的速度快 18000% 倍,小編點進去看之後,發現就只是「江湖一點訣,說破不值錢」而已,但要達到也是要費一大番功夫,完全是翻掉重寫了。
1. 大家都知道 REGEX 很方便但速度真的很慢,所以作者改用最原始的 charCodeAt 一個字元一個字元來判斷,光是這樣子速度就提升應該好幾倍。
2. 避免不必要的 array 建立。
3. 可以儘早 return 的內容就儘早 return,減少不必要的運算產生。這其實是一種 coding style,小編現在寫 code 也儘量依照這個原則來處理,除了上面這個好處之外,對於 if 的階層可以變的更少,code 也變的更乾淨好維護。
4. 跟第 2 點應該差不多,只不過這是針對 string。
5. 應該是指不必要的 string 迴圈可以合併起來吧。
如果對這些程式碼有興趣的朋友,可以看看 nodejs/node 的 b212be08f62a48656c5befd8be0a82d691ea66e4 lib/path.js 喔。
Optimization strategies include:
* Replacing regexps with manual parsers
* Avoiding unnecessary array creation (including split() + join())
* Returning earlier where possible to avoid unnecessary work
* Minimize unnecessary string creation and concatenations
* Combining string iterations
原始 commit:https://github.com/nodejs/node/commit/b212be08f62a48656c5befd8be0a82d691ea66e4
---
原本從 ant 那邊的文章被刪掉了,小編就重 po 一次囉。
---
#node #nodejs #regex
nodejs 好處 在 數位志工&資工系系學會Nodejs的單元測試&CI CD - Facebook 的必吃
地點: 知本校區理工學院C404 「寫測試的好處是什麼?」 這個問題非常難回答。通常只能得到「只有寫了才知道」這種含糊不清的答案。 1. 單元測試保證你的code真的能動2. ... <看更多>
nodejs 好處 在 【NodeJS 教学】NodeJS 版本管理工具NVM (Node Version ... 的必吃
这个工具就是NVM,Node Version Manager,中文叫Node版本管理工具。 为什么我们需要同时安装多个 NodeJS 版本呢?安装多个版本有什么 好处 ? ... <看更多>