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

如何在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);
}
}
創作者正在準備中
請加入 詹姆士的軟體易開罐 了解最新動態!
avatar-img
詹姆士的軟體易開罐
25會員
75內容數
這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言
avatar-img
留言分享你的想法!
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
本文將深入探討如何在 Laravel 中設計縮網址系統的架構,涵蓋數據庫設計、API 設計與核心邏輯。主要介紹系統的核心目標,即將長網址轉換為短網址,並提供查詢和重定向功能。重點在於如何有效設計資料表、優化 API 端點,以及改善系統性能與擴展性。這些設計考慮將有助於實現一個快速而可靠的縮網址服務。
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
本文將深入探討如何在 Laravel 中設計縮網址系統的架構,涵蓋數據庫設計、API 設計與核心邏輯。主要介紹系統的核心目標,即將長網址轉換為短網址,並提供查詢和重定向功能。重點在於如何有效設計資料表、優化 API 端點,以及改善系統性能與擴展性。這些設計考慮將有助於實現一個快速而可靠的縮網址服務。
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。