簡體   English   中英

在大型應用程序中指定路由的最佳實踐

[英]Best practice for specifying the routing in a big application

我對長頸鹿很陌生。

假設我們有一個包含大量模塊和頁面(即數十個網頁和成百上千個 web api 操作)的大型應用程序,那么在不造成混亂的情況下指定路由的最佳方法是什么?

例如,我們有這些業務模塊(假設我們可以將它們映射到具有相同名稱的子文件夾):

  • 人力資源
    • 雇員
      • 顯示頁面
      • CRUD 操作:
        • 添加員工
        • 更新
        • 消除
      • 獲取參考數據操作
    • 發帖...
  • 工資單...
  • 行政 ...

這里的路由示例是簡約的: https : //github.com/giraffe-fsharp/Giraffe/blob/master/DOCUMENTATION.md#routing 通常,應用程序可以有很大的路由表。 我假設我們必須為每個模塊都有一個子路由。

謝謝

我不知道社區中討論的“最佳實踐”(如果我是你,我也會去 F# Slack 並在 #web 頻道中開始關於這個主題的討論)但我通常堅持編寫應用程序路由來自模塊特定的路由器。

在頂層,我傾向於使用非常通用的路由(錯誤路由、OIDC 注銷等)以及頂級模塊路由

let webApp =
    choose [
        route "/error" >=> handleError
        route "/logout" >=> logout
        moduleARoutes
        moduleBRoutes
    ]

模塊路由可能如下所示

let moduleARoutes : HttpHandler =
    subRoute "/api/moduleA"
        authorize >=> choose [
            GET >=>
                choose [
                    routef "/%O" handleGet
                    routef "/%O/things" handleGetThings
                ]

            POST >=>
                choose [
                    routef "/%O" handleCreate
                    routef "/%O/things" handleThingCreation
                ]

            subModuleA1Routes
        ]

moduleARoutes處於同一級別的子模塊和其他模塊以完全相同的方式完成。

您唯一需要非常小心的是您編寫處理特殊處理(如授權和身份驗證)的 Web 部件的位置。 我個人喜歡在頂級模塊的基礎上處理它,但這是非常有品味和特定於用例的。

總而言之,您在 Giraffe 路線定義中有很多自由和選擇——一切都是完全可組合的。 一個警告可能是性能 - 我不完全確定您的路由設計(尤其是在您描述的巨大應用程序中)如何影響端點分辨率。 我會相應地進行試驗、測量和調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM