You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Laravel为电商网站与Android应用搭建共用后端

电商网站与Android应用共用Laravel后端的实现方案

1. 项目基础架构搭建

  • 初始化Laravel项目:composer create-project laravel/laravel e-commerce-backend
  • 配置.env文件中的数据库连接信息,确保后端能正常读写数据。
  • 采用分层架构:将业务逻辑抽离到app/Services目录,Model层只负责数据库关联和基础查询,Web控制器与API控制器共用Service层,保证数据处理逻辑完全一致。

2. 路由分离与适配

Laravel原生支持Web路由与API路由分离,分别对应网站和Android应用的请求:

  • Web路由(routes/web.php):处理网站的页面渲染、表单提交等请求,使用Session认证,返回Blade视图或重定向。
  • API路由(routes/api.php):处理Android端的接口请求,返回JSON格式响应,搭配Token认证。示例API路由配置:
use App\Http\Controllers\API\ProductController;
use App\Http\Controllers\API\OrderController;

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/products', [ProductController::class, 'index']);
    Route::post('/orders', [OrderController::class, 'store']);
});

3. 双重身份认证配置

针对Web和Android端的不同场景,配置对应的认证方式:

  • Web端:直接使用Laravel Breeze或Jetstream快速搭建基于Session的登录、注册流程,满足网站用户的会话管理需求。
  • Android端:采用Laravel Sanctum实现Token认证,步骤如下:
    1. 安装Sanctum:composer require laravel/sanctum
    2. 发布迁移文件并执行:php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"、php artisan migrate
    3. 在User模型中添加HasApiTokens trait:
    use Laravel\Sanctum\HasApiTokens;
    
    class User extends Authenticatable
    {
        use HasApiTokens, HasFactory, Notifiable;
    }
    
    1. 配置CORS(config/cors.php),允许Android应用的域名访问API,开发环境可暂时设置allowed_origins为*。
    2. Android端登录时,发送POST请求到/api/login,验证通过后获取Token,后续所有请求在请求头中携带Authorization: Bearer {token}。

4. 统一响应与错误处理

为了让Web和Android端都能高效处理响应,统一返回格式并标准化错误处理:

  • 创建基类控制器app/Http/Controllers/BaseController.php,封装成功与错误响应方法:
namespace App\Http\Controllers;

use Illuminate\Http\Response;

class BaseController extends Controller
{
    public function sendResponse($result, $message)
    {
        $response = [
            'status' => 'success',
            'data' => $result,
            'message' => $message,
        ];
        return response()->json($response, Response::HTTP_OK);
    }

    public function sendError($error, $errorMessages = [], $code = Response::HTTP_BAD_REQUEST)
    {
        $response = [
            'status' => 'error',
            'message' => $error,
        ];
        if(!empty($errorMessages)){
            $response['data'] = $errorMessages;
        }
        return response()->json($response, $code);
    }
}
  • API控制器继承该基类,调用封装好的方法返回响应;Web控制器则根据场景返回视图或带错误信息的重定向。
  • 自定义业务异常(如InsufficientStockException),在app/Exceptions/Handler.php中捕获,针对Web和API请求分别返回适配的错误提示。

5. 业务逻辑复用核心

将所有核心业务逻辑(如商品查询、订单创建、库存扣减)封装到Service类中,Web和API控制器仅作为请求入口,调用对应的Service方法完成业务操作。示例订单创建逻辑:

// app/Services/OrderService.php
public function createOrder(array $data, \App\Models\User $user)
{
    // 验证订单数据
    $validated = validator($data, [
        'total_amount' => 'required|numeric|min:0.01',
        'items' => 'required|array',
        'items.*.product_id' => 'required|exists:products,id',
        'items.*.quantity' => 'required|integer|min:1',
    ])->validate();

    // 创建订单主记录
    $order = \App\Models\Order::create([
        'user_id' => $user->id,
        'total_amount' => $validated['total_amount'],
        'status' => 'pending',
    ]);

    // 添加订单项并扣减库存
    foreach ($validated['items'] as $item) {
        $order->items()->create($item);
        \App\Models\Product::where('id', $item['product_id'])
            ->decrement('stock', $item['quantity']);
    }

    return $order;
}

Web端的OrderController和API端的API\OrderController都调用这个方法,确保两端的订单逻辑完全一致,避免重复代码。

6. 测试与优化

  • Web端:直接访问对应路由,验证页面渲染、表单提交、业务流程是否正常。
  • Android端:用Postman或Retrofit测试API接口,验证Token有效性、响应格式、业务逻辑正确性。
  • 后续可根据需求添加缓存(如商品列表缓存)、队列(如订单异步通知)等优化措施,提升后端性能。

内容的提问来源于stack exchange,提问作者PAWAN BISHT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:05:31