# [電影欣賞] DevOps 潮流下的 API First 開發策略 ![](https://i.imgur.com/CNBAMfh.jpg) 影片網址: https://www.youtube.com/watch?v=xDMTP2OVROo ## 什麼是 API First? 推動 API First 的期待是什麼呢? **API-First 方法的定義** ([14m35s](https://youtu.be/xDMTP2OVROo?t=875)): - 先有 API,再拿 API 來開發自己的產品。而不是先有產品,再來生出 API。 - 先把 API 的 contract (就是 interface) 定出來,有了 contract 就驗證 Spec 與 Design 能不能用、好不好用 (在寫 code 之前)。 **老闆期待的 API First 是什麼** ([15m57s](https://youtu.be/xDMTP2OVROo?t=957))? → 有了好用的 API,就可以透過它來組合出各種產品,也減少客戶需要製客化的需求 → 可規模化 **哪些東西該作成 API?哪些不用呢?**([20m59](https://youtu.be/xDMTP2OVROo?t=1259)) - 跟 UI 高度相關的最好不要 - 以產品的角度來說,核心的功能應該有 API - API 不見得要涵蓋所有的產品功能,cover 太多反而限制了產品發展的空間 - 儘可能取得技術與商業需求的平衡 **2002 年的 AWS 的 API 授權備忘錄** ([28m07s](https://youtu.be/xDMTP2OVROo?t=1687)) - 跨團隊的服務,只能用 API 溝通 - 沒限制只能用 HTTP API,但得是 API - 禁止使用不恰當的技術跨團隊溝通 **流程與決策順序改變,必須先改變團隊的文化與能力** ([32m51s](https://youtu.be/xDMTP2OVROo?t=1971)) - (開讀書會…) - 介紹 3 本書給你 ## API 的開發策略 [34m53s](https://youtu.be/xDMTP2OVROo?t=2093) - 開發流程 - contract first vs requirement first - 分析設計方式 & Ownership - 先由 domain 開始,而非 database schema 開發 - 安全控管的改變 (**註:我覺得是這場 talk 最重要的精華**) - 你怎麼做 OAuth 權限設計的!? **開發流程的改變** ([38m32s](https://youtu.be/xDMTP2OVROo?t=2312)) - Contract First ![](https://i.imgur.com/mN8Yil7.png) - 決定好 Contract 後,生出 Mock API,直接讓 Client 端試用。這時還不需要去管 Database 怎麼設計,直接做 e2e testing 看看有沒有什麼設計的問題。 - 擴大解說一下 Contract First ([40m31s](https://youtu.be/xDMTP2OVROo?t=2431)) ![](https://i.imgur.com/gehA4L0.png) - 有了 mock api 後,進行 e2e testing 每個角色都有事情可以做了 - 前端可以實作、SDK 可以實作、文件也可以寫了、QA 也能動起來了。 ![](https://i.imgur.com/jAJxfq2.jpg) - 我們的作法:design spring, PoC 確認你的 contract works ([46m14s](https://youtu.be/xDMTP2OVROo?t=2774)) ![](https://i.imgur.com/AK49iBH.jpg) --- 更具體的設計分隔線 (前方高能) --- **API 設計方式的改變與標準化** [48m06s](https://youtu.be/xDMTP2OVROo?t=2886) - 以**狀態機**表達:resource 的生命週期與可用的行為 - 通常不是 CRUD 能搞定的事,你需要狀態機。 - CRUD 能搞定的事,你 codegen 就好了啊! 會員管理實例 [50m23s](https://youtu.be/xDMTP2OVROo?t=3023) ![](https://i.imgur.com/NQxBQ1I.png) ![](https://i.imgur.com/dcJCzBo.png) 理清狀態與可以呼叫的行為對應後,(權限部分的) 商業邏輯的整理就更加明確了: ![](https://i.imgur.com/Tm5MJwd.png) - API Access Scope 參考範例 ([1:00:41](https://youtu.be/xDMTP2OVROo?t=3641)) - 對比典型的 CRUD API ([1:06:53](https://youtu.be/xDMTP2OVROo?t=4013)) 金句誕生 ([1:07:47](https://youtu.be/xDMTP2OVROo?t=4067)) > 因為 CRUD 是系統資料存取的動作不是你 Domain 的動作,所以你很難判斷的出這件事情的意圖。那你判斷不是意圖…. 你真正要管控的是意圖,所以你的權限管制就會很困難。 > - 設計 API 的安全機制:授權管理 ([1:10:46](https://youtu.be/xDMTP2OVROo?t=4246)) - 不同的權限管控方式:車票 vs 識別證 ([1:13:45](https://youtu.be/xDMTP2OVROo?t=4425)) - 外部使用 vs 內部使用 **思考是否會過度設計?** [1:18:46](https://youtu.be/xDMTP2OVROo?t=4726) **總結** [1:23:16](https://youtu.be/xDMTP2OVROo?t=4996) **Q & A 開始** [1:29:12](https://youtu.be/xDMTP2OVROo?t=5352)