Quarkus後端開發優勢:安全和JSON支援

banq發表於2024-04-29


GRAN Software Solutions 是一家設計和構建現代後端解決方案的德國公司。我們與大型汽車客戶和其他客戶合作,重組並建立新的解決方案。我們還開發並提供 SaaS 工具來幫助我們和其他人的日常工作。

時間追蹤挑戰
我們需要建立一個時間跟蹤應用程式,因為市場上現有的解決方案不能滿足我們的特定要求。它們要麼不是為開發人員設計的,要麼缺乏我們所需的簡單性,要麼載入了不必要的功能。我們希望利用多年來在客戶專案中獲得的豐富經驗,構建一個完全適合我們需求的工具。我們還希望創造一種更現代、更人性化的設計,使用和融合 Quarkus 等新技術會很有趣。

我們現有的時間跟蹤解決方案面臨的主要問題是缺乏在客戶端之間切換的簡單方法。我們還發現它們不支援我們習慣的快速操作或快捷方式,並且沒有直觀的方式來檢視我們白天輸入的時間。此外,我們希望根據與客戶簽訂的合同的每日費率和合同上限來跟蹤時間。這就是為什麼我們決定建立一個定製解決方案來滿足所有這些特定需求。

解決方案
當我們選擇後端使用的技術堆疊時,我們的主要目標是使用我們已經熟悉的技術,例如 Kotlin 程式語言、Spring Boot 框架和 Postgres 資料庫。我們還希望選擇一個能夠為我們提供資料庫連線、Web 客戶端、快取和其他類似功能的庫的生態系統。此外,我們希望使用高效能解決方案來降低託管成本並避免高記憶體要求。

在分析了市場上的各種解決方案後,我們決定使用 Quarkus 框架,因為它滿足了我們的所有要求。

亮點:安全支援
為了以現代且安全的方式保護我們的後端 API:

  • 我們選擇使用 JSON Web 令牌,Quarkus 對它們提供了出色的支援。
  • 我們還為 API 使用基於角色的安全性,Quarkus 使我們可以輕鬆實現這一點。
  • 我們在應用程式中擁有不同的角色,例如普通使用者和管理員,並且此資訊編碼在我們的 JSON Web 令牌中。
  • Quarkus 確保這些token在到達我們的後端系統時不會被篡改或操縱。

@RolesAllowed用於授權我們的 API 端點

@Path(<font>"/clients")
@RolesAllowed(
"User")
@Produces(MediaType.APPLICATION_JSON)
@ApplicationScoped
class ClientResource(
    private val getClientsHandler: GetClientsHandler,
    private val newClientHandler: NewClientHandler,


亮點:JSON支援
我們嚴重依賴豐富的 JSON 支援來靈活地建模資料,並將大部分功能委託給 Postgres 本身來運算元據。這樣,我們可以將已構建的 JSON 物件傳遞迴 API 客戶端,這顯著減少了在應用程式程式碼中做出設計決策所需的時間。

Quarkus 為 JSON 物件 API 提供了出色的支援。我們認為,由於效能和程式碼維護方面的原因,Postgres 是執行資料操作和聚合的正確位置,而不是應用程式程式碼。

用於JsonObject傳入和傳出我們的資料

@GET
@Produces(MediaType.APPLICATION_JSON)
suspend fun getProfile() = db.preparedQuery(
    <font>"""select profile from "user" where email = $1""".trimIndent()
).execute().awaitSuspending().first().getJsonObject(
"profile")

經驗分享
到目前為止,Quarkus 的開發過程非常出色。與 Spring Boot 等其他框架相比:

  • Quarkus 具有更快的啟動時間和更小的記憶體佔用。
  • 它還提供配置檔案,使我們能夠在環境之間進行稍微不同的配置或行為。
  • 我們可以輕鬆地用本地模擬替換一些難以執行的第三方服務,而保持應用程式程式碼不變。
  • Quarkus 在配置方面也很出色,並且我們可以輕鬆地使用application.yaml外部環境變數覆蓋檔案中儲存的值。
  • 雖然熱過載模式在 Kotlin 上執行得不太好,但我相信所有與之相關的 bug 都會在即將釋出的版本中得到解決。
  • 在開發過程中,我們大多數時候都必須重新啟動正在執行的服務才能使程式碼更改生效。

我們的後端 API 功能大約花了一個半月的時間才完成。考慮到只有兩名開發人員在後端工作,我認為這是一個很好的結果。在產品生命週期的這個階段,由於不斷重新審視需求和我們的需求,我們決定不編寫自動化測試。相反,我們現在進行手動測試。

一旦我們的時間跟蹤應用程式獲得更多活躍使用者,我們計劃開始使用 Quarkus 測試支援(包括測試容器等)編寫自動化測試。開發成熟的 API,包括使用 JSON Web 令牌和授權實現 API 安全性,在應用程式啟動時自動應用資料庫遷移,擁有圍繞 JSON 的靈活且可維護的程式碼庫,能夠將我們的 API 打包和部署到我們的 Kubernetes 叢集僅用了一個半月的時間就取得了相當大的成就。
 

相關文章