# 一個月成果簡報
---
## 目錄
- 個人簡介
- 一個月 TimeLine
- 實作 Restful API Demo
- 3個月目標計畫
---
## 個人簡歷
- 吳青叡 Karsten
- 2017 09 | 資策會轉職
- 2018 03 | 後端工程師
- 2019 12 | 104平台工程部
----
### 轉職動機
職涯規劃
----
### 經歷
1. scala工程師(廣告商)
2. 全端工程師(遊戲產業)
3. 專案駐點(玉山銀行內部系統)
---
## First Month Timeline

---
## 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
----
### 架構

----
### 驗證 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>

<a style="font-size:12pt">source : https://openhome.cc</a>
----
<a href="#/4/5" style="font-size:10pt">返回</a>

----
<a href="#/4/5" style="font-size:10pt">返回</a>

----
<a href="#/4/6" style="font-size:10pt">返回</a>

----
<a href="#/4/7" style="font-size:10pt">返回</a>

----
<a href="#/4/7" style="font-size:10pt">返回</a>


----
<a href="#/4/8" style="font-size:10pt">返回</a>


----
<a href="#/4/10" style="font-size:10pt">返回</a>


----
<a href="#/4/11" style="font-size:10pt">返回</a>

----
<a href="#/4/12" style="font-size:10pt">返回</a>

----
<a href="#/4/14" style="font-size:10pt">返回</a>

{"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}]"}