LinkNote

Avatar of 廖致皓.
Avatar of 廖致皓.

LinkNote

BackEnd Engineer
Taipei City, Taiwan

專案名稱:LinkNote

這是一款線上筆記網站,可以分享筆記本給同伴共同協作。 功能:

  • 建立筆記本&筆記
  • 支援Markdown語法
  • 關鍵字查詢筆記
  • 設定 Filter 篩選筆記
  • 賦予、刪除其他使用者存取筆記本的權限


URL:https://linknote.online/

GitHub repo: https://github.com/joeyliao127/LinkNote

LinkNote首頁

筆記本管理頁面

技術細節


前端

  • HTML
  • CSS
  • Javascript


後端

  • Java Spring Boot


Database

  • MySQL


部署

  • Nginx
  • SSL(Let's encrypt)
  • Docker
  • Ubuntu


Spring Boot

  • RESTful API 開發後端 endpoint 時依照 RESTful API 風格進行開發,透過明確的 URL 與 HTTP method 更方便的調用 endpoint,並回傳 JSON 格式的資料。


  • Controller, Service, DAO 三層式架構 透過三層式架構更方便地維護程式碼,區分每個資料夾的功能。


  • 筆記權限管理 當 Spring boot 收到 request 後,會先檢查此 user 要存取的筆記本,若要存取的筆記本不屬於此 userId,就會透過 collaborators table 中的紀錄做查詢,若在此表中有相對應的資料,則允許使用者存取、修改數據。


  • JWT token 透過 JWT token 限制存取 endpoint,當使用者發出帶有 bearer token 的 request,解析 token 後取得 payload 驗證身份。


  • Interceptor 透過 Interceptor 驗證每一個 http request,檢查 Request header 中是否帶有 Authorization 並取得 token。驗證使用者通過後 return true 允許 request 訪問 endpoint。


  • Exception Handler 透過 Exception handler 統一處理異常,並自定義異常返回給前端有用的資訊,並依照錯誤類型賦予相對應的 HTTP status code。


  • Unit Test (JUnit5) 透過 JUnit5 撰寫單元測試,確保解析 token 的 Function 解析內容的正確性。


  • CORS 在 local 開發時為了解決 CORS 的問題,在 AppConfig 中允許 GET, POST, PUT, DETELE 四種方法的跨域請求。
  • Log 撰寫 log,紀錄使用者登入情


  • Git 版本控制 由於單人開發系統,因此 git flow 較為簡單,建立 main 和 dev 分支,並 push 到 Github 上,在 local 端使用 dev 分支做開發,完成小部分功能後 commit 並 push 上 Github,發出 PR 並 merge 到 main 分支。


  • Maven 透過 maven 專案管理工具打包 Spring boot 應用程式,取得 jar 檔後部署上線。


Database


  • 資料庫設計:符合第三正規劃。
  • 權限管理:引入RBAC權限管理模型,控管使用者存存取資源權限。
  • Foreign Key Constraint:
  • Index:當 column 內容會被當作 WHERE 條件查詢時,透過 INDEX 的 B+ tree 來提昇搜尋效能,如 notes.name、tags.name 欄位。
  • 複合式主鍵:複合式主鍵用於避免使用者建立相同的筆記名稱或 Tag,若使用者建立了重複的筆記或 Tag,SQL 就會發出 exception,後端 Spring boot 的 Exception handler 就會處理此異常,並返回 400 告知前端資料已存在。


部署細節

  • 透過 Nginx 反向代理 application
  • 透過 Let's encrpyt 申請的 SSL 憑證將網址變成 https
  • 透過 CloudFlare 保護網站避免 DDoS。
  • 透過 CloudFlare 提供的 CDN 提升靜態文件的讀取速度
網站簡介 這是一款線上筆記網站,可以分享筆記本給同伴共同協作。 功能: 建立筆記本&筆記 關鍵字查詢筆記 設定 Filter 篩選筆記 賦予、刪除其他使用者存取筆記本的權限
Avatar of the user.
Please login to comment.

Published: Dec 27th 2023
41
5
0

Tools

cloudflare
Cloudflare
nginx
nginx
docker
Docker
git
Git
mysql
MySQL
spring_boot
Spring Boot
html5
HTML5

MySQL
Spring Boot
BackEnd
網頁開發

Share