付費限定

如何在laravel實作縮網址系統-功能實作終章

閱讀時間約 1 分鐘

延續上篇:如何在laravel實作縮網址系統-功能實作篇「框架與結構」


接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。


在開始之前,本篇需要具備基礎Laravel 知識

我也盡可能在註解上多附註說明,但像是Repository Pattern,這樣的模式不會在本篇詳加說明,有興趣的朋友可以留言讓我知道喔。




1. Router(路由)

在 routes/api.php 中,我們將定義縮網址系統的 API 路由。這些路由將對應到控制器中的方法。

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UrlController;

/**
* 路由用於縮短給定的網址。
*
* 這個路由接受一個 POST 請求,並返回一個縮短後的網址。
*
* @author James
* @version 1.0.0
* @since 2024-09-01
*/
Route::post('/shorten', [\App\Http\Controllers\UrlShortenerController::class, 'shorten']);

/**
* 根據短碼進行重定向的路由。
*
* 這個路由接受一個 GET 請求,並根據給定的短碼將用戶重定向到原始網址。
*
* @author James
* @version 1.0.0
* @since 2024-09-01
*/
Route::get('/{short_code}', [\App\Http\Controllers\UrlShortenerController::class, 'redirect']);

/**
* 查詢短碼資訊的路由。
*
* 這個路由接受一個 GET 請求,並返回與給定短碼相關的元數據或資訊。
*
* @author James
* @version 1.0.0
* @since 2024-09-01
*/
Route::get('/lookup/{short_code}', [\App\Http\Controllers\UrlShortenerController::class, 'lookup']);

這些路由對應三個主要功能:

  • POST /api/shorten 用於生成短網址。
  • GET /api/{short_code} 用於根據短網址重定向到原網址。
  • GET /api/lookup/{short_code} 用於查詢短網址對應的長網址。

2. Controller(控制器)

控制器負責處理路由映射到的請求,並調用相應的業務邏輯。我們在 app/Http/Controllers/UrlShortenerController.php 中實作這些方法。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Services\UrlService;

class UrlShortenerController extends Controller
{
protected $urlService;

public function __construct(UrlService $urlService)
{
$this->urlService = $urlService;
}

public function shorten(Request $request)
{
$this->validate($request, [
'url' => 'required|url|max:2048',
]);

$shortUrl = $this->urlService->createShortUrl($request->url);

return response()->json(['short_url' => $shortUrl], 201);
}

public function redirect($short_code)
{
$url = $this->urlService->getOriginalUrl($short_code);

if (!$url) {
return response()->json(['error' => 'Not found'], 404);
}

return redirect($url);
}

public function lookup($short_code)
{
$url = $this->urlService->getOriginalUrl($short_code);

if (!$url) {
return response()->json(['error' => 'Not found'], 404);
}

return response()->json(['original_url' => $url], 200);
}
}
創作者正在準備中
請加入 以軟體工程為主軸的開發紀錄 了解最新動態!
這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,作者都用幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
發表第一個留言支持創作者!
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
本文將深入探討如何在 Laravel 中設計縮網址系統的架構,涵蓋數據庫設計、API 設計與核心邏輯。主要介紹系統的核心目標,即將長網址轉換為短網址,並提供查詢和重定向功能。重點在於如何有效設計資料表、優化 API 端點,以及改善系統性能與擴展性。這些設計考慮將有助於實現一個快速而可靠的縮網址服務。
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
Side Project 劃分等級可以幫助你和你的團隊更好地規劃和管理項目。這裡是基於不同團隊規模和開發時程的五個等級: E級 (Easy) D級 (Basic) C級 (Intermediate) B級 (Advanced) A級 (Expert)
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
本文將深入探討如何在 Laravel 中設計縮網址系統的架構,涵蓋數據庫設計、API 設計與核心邏輯。主要介紹系統的核心目標,即將長網址轉換為短網址,並提供查詢和重定向功能。重點在於如何有效設計資料表、優化 API 端點,以及改善系統性能與擴展性。這些設計考慮將有助於實現一個快速而可靠的縮網址服務。
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
Side Project 劃分等級可以幫助你和你的團隊更好地規劃和管理項目。這裡是基於不同團隊規模和開發時程的五個等級: E級 (Easy) D級 (Basic) C級 (Intermediate) B級 (Advanced) A級 (Expert)
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ Params是什麼? 在網頁開發中,params代表的是參數(Parameters)。當你在路由(Route)中定義了一個或多個變數時,這些變數的值就會被存儲在 params 對象中。所以,params 就是用來存儲路由參數的地方,這些參數可以在處理請求時使用。 ※ Params的兩個功能:
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ Params是什麼? 在網頁開發中,params代表的是參數(Parameters)。當你在路由(Route)中定義了一個或多個變數時,這些變數的值就會被存儲在 params 對象中。所以,params 就是用來存儲路由參數的地方,這些參數可以在處理請求時使用。 ※ Params的兩個功能:
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更