如何在laravel實作縮網址系統-系統架構篇

更新於 發佈於 閱讀時間約 4 分鐘

在進行 Laravel 縮網址系統的開發之前,如何進行架構是至關重要的,這會讓我們要進行的動作會更加清楚。

以下是該系統架構的詳細規劃,將涵蓋數據庫設計、API 設計以及關鍵的核心邏輯。

系統架構概述

縮網址系統的核心目標是將長網址轉換為短網址,並允許使用者通過短網址重定向到原始長網址。我們將通過 Laravel 的框架 結構來實現這一目標。

1. 資料表設計

表結構定義

表名: short_urls

  • id: 自增主鍵 ( BIGINT UNSIGNED AUTO_INCREMENT) – 唯一標識每條記錄。
  • original_url: 長網址 ( VARCHAR(2048)) – 用於存儲原始的長網址。
  • short_code: 短網址代碼 ( CHAR(6)) – 儲存生成的短網址,長度設為固定的6個字符,這樣可容納的唯一組合足以支撐常見的應用需求。
  • created_at: 創建時間 ( TIMESTAMP) – 自動生成。
  • updated_at: 更新時間 ( TIMESTAMP) – 自動生成。

索引設置

  • 唯一索引: 為 original_url 設置唯一索引,避免相同長網址重複存儲。
  • 普通索引: 為 short_code 設置索引,以加快短網址查詢的速度。


2. API 設計

API 設計將遵循 RESTful 標準,具體包括以下幾個端點。

POST /api/shorten

  • 功能: 接收用戶提交的長網址,生成並返回相應的短網址。
  • 請求 Body:
    • url (string, 必需): 用戶提交的長網址,需通過後端進行驗證,確保其格式正確。
  • 回應:
    • 成功: 返回 200 OK,並在 JSON 中包含 short_url(短網址)。
    • 失敗: 如果 url 格式不正確或超出長度限制,返回 400 Bad Request,並在 JSON 中給出錯誤信息。


GET /api/{short_code}

  • 功能: 通過短網址查詢對應的長網址,並重定向到該長網址。
  • 路由參數:
    • {short_code} (string, 必需): 短網址代碼,需通過正則表達式驗證,確保其格式正確。
  • 回應:
    • 成功: 返回 302 Found,並重定向到 original_url。
    • 失敗: 如果未找到對應的短網址,返回 404 Not Found。


GET /api/lookup/{short_code}

  • 功能: 提供反查短網址對應的長網址功能。
  • 路由參數:
    • {short_code} (string, 必需): 短網址代碼。
  • 回應:
    • 成功: 返回 200 OK,並在 JSON 中包含 original_url。
    • 失敗: 如果未找到對應的長網址,返回 404 Not Found。


3. 核心邏輯

縮網址系統的核心邏輯涉及以下幾個重要部分:

  • 短網址生成邏輯:
    • 系統將接收用戶的長網址,檢查其是否已存在於數據庫中。如果存在,直接返回已存在的短網址。如果不存在,則生成一個唯一的短網址代碼並儲存到數據庫中。
  • 短網址查詢與重定向:
    • 當用戶通過短網址訪問系統時,系統將根據短網址代碼查找對應的長網址,並進行 HTTP 重定向。
  • 反查邏輯:
    • 允許用戶通過 API 查詢短網址對應的長網址,這對於用戶管理生成的縮網址有很大的幫助。


4. 核心組件

  • Controller (控制器): 負責接收HTTP請求,處理業務邏輯,並返回響應。
  • Service (服務層): 集中業務邏輯的處理,使控制器保持簡潔。
  • Repository (數據層): 負責與數據庫進行交互,封裝Eloquent的操作。
  • Model (模型): 代表數據庫中的表,與數據庫進行ORM層面的互動。


5. 緩存與性能優化

為了支持高併發和快速響應,我們計劃引入 Redis 來緩存常用的短網址和長網址映射。這樣可以大幅度減少對數據庫的查詢次數,提高系統的整體性能。

  • Redis 緩存策略:
    • 每次創建或查詢短網址時,將其對應關係緩存在 Redis 中,設置適當的過期時間。
    • 緩存命中時直接返回結果,未命中時再查詢數據庫並更新緩存。


總結

以上是縮網址系統的架構規劃,重點在於數據庫設計、API 設計以及核心邏輯處理。這個架構設計能夠滿足縮網址系統的基本需求,並具備一定的擴展性和性能優化空間。接下來的開發將基於這個架構進行實作和細節優化。

留言
avatar-img
留言分享你的想法!
Rewrite-avatar-img
發文者
2024/08/25
如何在laravel實作縮網址系統-功能實作篇「框架與結構」提及了這篇文章,趕快過去看看吧!
avatar-img
詹姆士的軟體易開罐
27會員
88內容數
這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
2024/09/06
延續上篇: 功能實作篇 框架與結構 接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。
Thumbnail
2024/09/06
延續上篇: 功能實作篇 框架與結構 接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。
Thumbnail
2024/08/25
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
Thumbnail
2024/08/25
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
Thumbnail
2024/08/16
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
Thumbnail
2024/08/16
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
討論系統架構時,我們常忽略低流量時期的準備,但真正的挑戰在於怎樣在突發高流量時保持穩定。我們深入探討了如何透過水平擴展、負載均衡、快取策略等多維度規劃,來強化系統對高流量的承受力,確保系統的靈活擴展與高可用性。
Thumbnail
討論系統架構時,我們常忽略低流量時期的準備,但真正的挑戰在於怎樣在突發高流量時保持穩定。我們深入探討了如何透過水平擴展、負載均衡、快取策略等多維度規劃,來強化系統對高流量的承受力,確保系統的靈活擴展與高可用性。
Thumbnail
Codeigniter如果不調整設定,網址中會自帶index.php,為了符合MVC架構,通常會將它去除,本文將詳細說明處理步驟。
Thumbnail
Codeigniter如果不調整設定,網址中會自帶index.php,為了符合MVC架構,通常會將它去除,本文將詳細說明處理步驟。
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News