# 一個月成果簡報 --- ## 目錄 - 個人簡介 - 一個月 TimeLine - 實作 Restful API Demo - 3個月目標計畫 --- ## 個人簡歷 - 吳青叡 Karsten - 2017 09 | 資策會轉職 - 2018 03 | 後端工程師 - 2019 12 | 104平台工程部 ---- ### 轉職動機 職涯規劃 ---- ### 經歷 1. scala工程師(廣告商) 2. 全端工程師(遊戲產業) 3. 專案駐點(玉山銀行內部系統) --- ## First Month Timeline ![](https://i.imgur.com/tgHyVwv.png) --- ## API Spec. [Specification](https://hackmd.io/zUDvVrlTSuy-Za3vdho5Lg?vie) ---- ### API DEMO <a style="font-size:10pt">github source:https://github.com/104corp/104fp-newcomer-api</a> ---- ### 技術 - Spring Boot - Spring Data ( JPA / Redis ) - AOP - Retrofit - AssertJ + Junit ---- ### 架構 ![](https://i.imgur.com/xQFSGJK.jpg) ---- ### 驗證 AC PID 帳號 - AOP ( Aspect-Oriented Programming ) - 關注橫切面 ( cross-cutting concern ),例如 logging / security / compute performance - <a href="#/6/1">AOP示意圖</a> - Aspect、Advice 與 Pointcut ---- ### Why ? 1. 與業務邏輯耦合度降低,模組化管理、重用及後續擴充 2. 粒度較小 ( 以方法為單位 ) 3. 非侵入性,且容易撰寫 4. <a href="#/6/2">Check AC PID</a> ---- ### 錯誤統一處理 - RestControllerAdvice 與 ExceptionHandler - 利用代理機制,在 rest-controller 輸入或輸出時做一些事 - <a href="#/6/4">Exception Handler</a> ---- ### 資料快取 - 採用 Redis 做快取 - <a href="#/6/5">Cache Sample</a> ---- ### 基本驗證 - 基於 Java Bean Validation ( JSR303 ) - @Valid 驗證 request body - <a href="#/6/7">驗證物件</a> ---- ### 串接外部 API 取得 PID 資訊 - 使用 Retrofit 作為主要 library - 利用代理機制包裝 http 連線部分 ---- ### Why ? 1. 基於 OKhttp library 2. 省去重複性地 Parsing JSON 的處理,內建 GSON libraray 3. 相比 HttpClient 抽離 Converter 與 Adapter,支援度良好 ( JSON、XML 格式 / Java8、RxJava 等實現 ) 4. 與業務邏輯脫離 5. <a href="#/6/8">Retrofit</a> ---- ### 回傳格式設計 - 基於 104fp-commons-response 專案 - **response**: - httpStatus code 200 時,正常回傳資料 - **warn**: - httpStatus code 4XX 時,驗證 / 邏輯錯誤等訊息 - **fail**: - httpStatus code 5XX 時,Server / 外部 API 錯誤 - <a href="#/6/9">Response body</a> ---- ### 資料庫串接與分頁 - 使用 Spring Data JPA - repository 介面繼承 PagingAndSortingRepository,內建原生 CRUD 方法及分頁不需要額外實作 class - <a href="#/6/10">Repository</a> ---- ### Why ? 1. jdbc template 轉化PO需親自對應 resultset 拿取對應欄位轉成Java Bean 2. 與 mybatis 相比,JPA 是偏向使用物件化的方式去操作,省去大量的 SQL 撰寫 ---- ### 單元測試 - AssertJ + Junit - <a href="#/6/11">測試用</a> ---- ### 可改善的目標 1. OWASP 安全性 2. 命名與註解 3. JSR303 錯誤處理統一使用 **.properties** 檔做管理 ( 已補上 ) 4. Swagger 文件 --- ## 3個月目標 - AWS - 學習 : 觀看線上 AWS 課程 - 目標 : 將 DEMO 專案 API 藉用 CI / CD 方式佈署到 AWS 上成功運行 --- ## 附錄 ---- <a href="#/4/4" style="font-size:10pt">返回</a> ![](https://openhome.cc/Gossip/SpringGossip/images/AOPConcept-2.JPG) <a style="font-size:12pt">source : https://openhome.cc</a> ---- <a href="#/4/5" style="font-size:10pt">返回</a> ![](https://i.imgur.com/PiY4L8W.png) ---- <a href="#/4/5" style="font-size:10pt">返回</a> ![](https://i.imgur.com/8mOGpPy.png) ---- <a href="#/4/6" style="font-size:10pt">返回</a> ![](https://i.imgur.com/tcoC8JT.png) ---- <a href="#/4/7" style="font-size:10pt">返回</a> ![](https://i.imgur.com/QaAp0d4.png) ---- <a href="#/4/7" style="font-size:10pt">返回</a> ![](https://i.imgur.com/vyIqEcp.png) ![](https://i.imgur.com/rhrWAjC.png) ---- <a href="#/4/8" style="font-size:10pt">返回</a> ![](https://i.imgur.com/VpmJV2F.png) ![](https://i.imgur.com/226kIma.png) ---- <a href="#/4/10" style="font-size:10pt">返回</a> ![](https://i.imgur.com/MRe6eza.png) ![](https://i.imgur.com/D5lT18m.png) ---- <a href="#/4/11" style="font-size:10pt">返回</a> ![](https://i.imgur.com/QQTR26L.png) ---- <a href="#/4/12" style="font-size:10pt">返回</a> ![](https://i.imgur.com/7mhm0E3.png) ---- <a href="#/4/14" style="font-size:10pt">返回</a> ![](https://i.imgur.com/X9SYTvt.png)
{"metaMigratedAt":"2023-06-15T03:13:01.280Z","metaMigratedFrom":"YAML","title":"一個月成果簡報","breaks":true,"slideOptions":"{\"allottedMinutes\":30}","contributors":"[{\"id\":\"6cc58199-6326-45e7-96e2-d6319f2bfb7a\",\"add\":6736,\"del\":3122}]"}
    278 views