如何在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 設計以及核心邏輯處理。這個架構設計能夠滿足縮網址系統的基本需求,並具備一定的擴展性和性能優化空間。接下來的開發將基於這個架構進行實作和細節優化。

這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,作者都用幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
發表第一個留言支持創作者!
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
Side Project 劃分等級可以幫助你和你的團隊更好地規劃和管理項目。這裡是基於不同團隊規模和開發時程的五個等級: E級 (Easy) D級 (Basic) C級 (Intermediate) B級 (Advanced) A級 (Expert)
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
本階段介紹物件導向程式設計(OOP)基礎,從OOP概念、類別與物件基本原理,到PHP中類別與物件的應用,並深入探討封裝、繼承等OOP特性,最後以實際練習加強理解。此階段為學生掌握PHP OOP打下堅實基礎。
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
Side Project 劃分等級可以幫助你和你的團隊更好地規劃和管理項目。這裡是基於不同團隊規模和開發時程的五個等級: E級 (Easy) D級 (Basic) C級 (Intermediate) B級 (Advanced) A級 (Expert)
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
本階段介紹物件導向程式設計(OOP)基礎,從OOP概念、類別與物件基本原理,到PHP中類別與物件的應用,並深入探討封裝、繼承等OOP特性,最後以實際練習加強理解。此階段為學生掌握PHP OOP打下堅實基礎。
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
相信不少女生內心都有一個Model夢吧!一直以來我都很羨慕那些自拍很好看的人,或是出去玩時,總有些朋友特別會擺拍又上相。 現在社群媒體那麼發達,人人都可以當網紅,有的人天生就很會拍照擺姿勢跟表情管理。但應該不少人也跟我一樣吧,想學別人打卡拍美照,手不知道要往哪擺,只會一號表情或比✌,想要耍酷變成超
今天我們要談到的問題是,如何在一段關係中建立真實的信任,如何在徵兆中辨別你在一段新戀情中太早信任對方,或是因著過去情感中的傷害,而減緩了對對方的信任。
網路社交當道的時代,要怎麼在虛擬世界真實的認識一個人呢? 答案是問出對的問題!
Thumbnail
當對的人出現時——一位敬畏上帝,你可以完全信任並有良好互動的人,對你有吸引力,你也樂意讓他成為你孩子的父親或母親的人——在選擇人生伴侶時,就值得考慮在你暫時的個人生活喜好上做些調整。
在當今數位化的商業環境中,SEO(搜索引擎優化)已經成為企業競爭的重要一環。了解並分析競爭對手的SEO策略是實現線上成功的關鍵。本文將討論如何在職場中進行競爭對手的SEO分析,以及八拓科技有限公司作為一家專業的數位行銷公司如何協助客戶進行相應的工作。 首先,要進行競爭對手的SEO分析,我們需要
在當今競爭激烈的職場環境中,優化網站頁面以實現更好的SEO效果是至關重要的。SEO(Search Engine Optimization)是指通過一系列策略和技巧,使網站在搜索引擎中排名更高,從而吸引更多的流量和潛在客戶。對於像八拓科技有限公司這樣的SEO公司來說,他們了解並應用最新的SEO技術對客
Thumbnail
其實,人人都有回歸清淨心的本能,只是定力不足,因此總是在煩惱苦海中受苦。 例如,當你煩惱太多,內心痛苦或面臨複雜情勢時,你會本能地找個安靜的地方思考,甚至希望家人朋友不要吵你,讓自己獨處,讓思緒沈澱,讓心情平復。 我之前常說的靜心觀照,就是這樣的過程。 無奈的是,凡夫儘管都有回歸清淨心的本能,
Thumbnail
本文是上個月「如何在一個月內寫出12萬字小說」一文的續篇,所以讀過上一篇的讀者應該都知道,精確一點的標題應該是「我如何在兩個月內寫出23萬字穿越小說」。若是還沒讀過上一篇,建議先回頭看完再接著讀本文,觀念比較能夠連貫
Thumbnail
其實精確一點的標題應該是「我如何在一個月內寫出12萬字穿越小說」。當然,每位作者的背景、基礎、專長各不相同,不可能有什麼放諸四海皆準的「武功祕笈」,所以這篇文章只能算是自我紀錄與經驗分享。不過若是能從中找到一些適合你的建議,那當然就更好了。 先跳到結論,答案只有一個:要有時間。
Thumbnail
非同質化代幣的結果,什麼東東霧殺殺,既然對於定義很模糊,不然看看有什麼應用好了,得到的結論大概是,我好像可以也發行一個自己的 NFT ?把我旅行中拍到的照片結合了我畫的貓咪創造出的作品鑄造成 NFT,也許這是目前為止最適合保存這類作品的方式〔Matters及其他寫作的平臺太多還是比較著重在文字〕,有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
相信不少女生內心都有一個Model夢吧!一直以來我都很羨慕那些自拍很好看的人,或是出去玩時,總有些朋友特別會擺拍又上相。 現在社群媒體那麼發達,人人都可以當網紅,有的人天生就很會拍照擺姿勢跟表情管理。但應該不少人也跟我一樣吧,想學別人打卡拍美照,手不知道要往哪擺,只會一號表情或比✌,想要耍酷變成超
今天我們要談到的問題是,如何在一段關係中建立真實的信任,如何在徵兆中辨別你在一段新戀情中太早信任對方,或是因著過去情感中的傷害,而減緩了對對方的信任。
網路社交當道的時代,要怎麼在虛擬世界真實的認識一個人呢? 答案是問出對的問題!
Thumbnail
當對的人出現時——一位敬畏上帝,你可以完全信任並有良好互動的人,對你有吸引力,你也樂意讓他成為你孩子的父親或母親的人——在選擇人生伴侶時,就值得考慮在你暫時的個人生活喜好上做些調整。
在當今數位化的商業環境中,SEO(搜索引擎優化)已經成為企業競爭的重要一環。了解並分析競爭對手的SEO策略是實現線上成功的關鍵。本文將討論如何在職場中進行競爭對手的SEO分析,以及八拓科技有限公司作為一家專業的數位行銷公司如何協助客戶進行相應的工作。 首先,要進行競爭對手的SEO分析,我們需要
在當今競爭激烈的職場環境中,優化網站頁面以實現更好的SEO效果是至關重要的。SEO(Search Engine Optimization)是指通過一系列策略和技巧,使網站在搜索引擎中排名更高,從而吸引更多的流量和潛在客戶。對於像八拓科技有限公司這樣的SEO公司來說,他們了解並應用最新的SEO技術對客
Thumbnail
其實,人人都有回歸清淨心的本能,只是定力不足,因此總是在煩惱苦海中受苦。 例如,當你煩惱太多,內心痛苦或面臨複雜情勢時,你會本能地找個安靜的地方思考,甚至希望家人朋友不要吵你,讓自己獨處,讓思緒沈澱,讓心情平復。 我之前常說的靜心觀照,就是這樣的過程。 無奈的是,凡夫儘管都有回歸清淨心的本能,
Thumbnail
本文是上個月「如何在一個月內寫出12萬字小說」一文的續篇,所以讀過上一篇的讀者應該都知道,精確一點的標題應該是「我如何在兩個月內寫出23萬字穿越小說」。若是還沒讀過上一篇,建議先回頭看完再接著讀本文,觀念比較能夠連貫
Thumbnail
其實精確一點的標題應該是「我如何在一個月內寫出12萬字穿越小說」。當然,每位作者的背景、基礎、專長各不相同,不可能有什麼放諸四海皆準的「武功祕笈」,所以這篇文章只能算是自我紀錄與經驗分享。不過若是能從中找到一些適合你的建議,那當然就更好了。 先跳到結論,答案只有一個:要有時間。
Thumbnail
非同質化代幣的結果,什麼東東霧殺殺,既然對於定義很模糊,不然看看有什麼應用好了,得到的結論大概是,我好像可以也發行一個自己的 NFT ?把我旅行中拍到的照片結合了我畫的貓咪創造出的作品鑄造成 NFT,也許這是目前為止最適合保存這類作品的方式〔Matters及其他寫作的平臺太多還是比較著重在文字〕,有